Учебники

SAP ABAP — Классы

Класс используется для указания формы объекта, и он объединяет представление данных и методы для манипулирования этими данными в одном аккуратном пакете. Данные и функции внутри класса называются членами класса .

Определение и реализация класса

Когда вы определяете класс, вы определяете план для типа данных. На самом деле это не определяет какие-либо данные, но определяет, что означает имя класса, из чего будет состоять объект класса и какие операции могут быть выполнены с таким объектом. То есть он определяет абстрактные характеристики объекта, такие как атрибуты, поля и свойства.

Следующий синтаксис показывает, как определить класс —

CLASS <class_name> DEFINITION. 
.......... 
.......... 
ENDCLASS.

Определение класса начинается с ключевого слова CLASS, за которым следует имя класса, DEFINITION и тело класса. Определение класса может содержать различные компоненты класса, такие как атрибуты, методы и события. Когда мы объявляем метод в объявлении класса, реализация метода должна быть включена в реализацию класса. Следующий синтаксис показывает, как реализовать класс —

CLASS <class_name> IMPLEMENTATION. 
........... 
.......... 
ENDCLASS.

Примечание. Реализация класса содержит реализацию всех его методов. В объектах ABAP структура класса содержит такие компоненты, как атрибуты, методы, события, типы и константы.

Атрибуты

Атрибуты — это поля данных класса, которые могут иметь любой тип данных, например C, I, F и N. Они объявлены в объявлении класса. Эти атрибуты можно разделить на 2 категории: экземпляры и статические атрибуты. Атрибут экземпляра определяет специфическое для экземпляра состояние объекта. Состояния разные для разных объектов. Атрибут экземпляра объявляется с помощью оператора DATA.

Статические атрибуты определяют общее состояние класса, которое используется всеми экземплярами класса. То есть, если вы измените статический атрибут в одном объекте класса, это изменение будет видно и для всех других объектов класса. Статический атрибут объявляется с помощью инструкции CLASS-DATA.

методы

Метод — это функция или процедура, которая представляет поведение объекта в классе. Методы класса могут получить доступ к любому атрибуту класса. Определение метода может также содержать параметры, так что вы можете указывать значения этих параметров при вызове методов. Определение метода объявлено в объявлении класса и реализовано в части реализации класса. Операторы METHOD и ENDMETHOD используются для определения части реализации метода. Следующий синтаксис показывает, как реализовать метод —

METHOD <m_name>. 
.......... 
.......... 
ENDMETHOD.

В этом синтаксисе <m_name> представляет имя метода. Примечание. Вы можете вызвать метод с помощью оператора CALL METHOD.

Доступ к атрибутам и методам

Компоненты класса могут быть определены в открытых, закрытых или защищенных разделах видимости, которые контролируют доступ к этим компонентам. Закрытая секция видимости используется для запрета доступа к компонентам извне класса. К таким компонентам можно получить доступ только из класса, такого как метод.

Компоненты, определенные в разделе публичной видимости, доступны из любого контекста. По умолчанию все члены класса будут частными. На практике мы определяем данные в приватном разделе и связанные методы в публичном разделе, чтобы их можно было вызывать извне класса, как показано в следующей программе.

  • Атрибуты и методы, объявленные в разделе Public в классе, могут быть доступны для этого класса и любого другого класса, подкласса программы.

  • Когда атрибуты и методы объявлены в защищенном разделе в классе, они могут быть доступны только для этого класса и подклассов (производных классов).

  • Когда атрибуты и методы объявлены в секции Private в классе, доступ к ним может получить только этот класс, а не любой другой класс.

Атрибуты и методы, объявленные в разделе Public в классе, могут быть доступны для этого класса и любого другого класса, подкласса программы.

Когда атрибуты и методы объявлены в защищенном разделе в классе, они могут быть доступны только для этого класса и подклассов (производных классов).

Когда атрибуты и методы объявлены в секции Private в классе, доступ к ним может получить только этот класс, а не любой другой класс.

пример

Report ZAccess1. 
CLASS class1 Definition.
   PUBLIC Section.
      Data: text1 Type char25 Value 'Public Data'.
      Methods meth1.
		
   PROTECTED Section.
      Data: text2 Type char25 Value 'Protected Data'.
		
   PRIVATE Section.     
      Data: text3 Type char25 Value 'Private Data'. 
ENDCLASS.
 
CLASS class1 Implementation.   
   Method meth1.     
      Write: / 'Public Method:',   
             / text1,
             / text2,
             / text3.
      Skip.
   EndMethod.
ENDCLASS. 

Start-Of-Selection.   
   Data: Objectx Type Ref To class1.
   Create Object: Objectx.
   CALL Method: Objectxmeth1.
   Write: / Objectxtext1.

Приведенный выше код производит следующий вывод —

Public Method: 
Public Data 
Protected Data 
Private Data
  
Public Data

Статические Атрибуты

Статический атрибут объявляется с оператором CLASS-DATA. Все объекты или экземпляры могут использовать статический атрибут класса. Статические атрибуты доступны напрямую с помощью имени класса, например class_name⇒name_1 = ‘Some Text’.

пример

Ниже приводится программа, в которой мы хотим напечатать текст с номерами строк от 4 до 8 раз. Мы определяем класс class1 и в открытом разделе объявляем CLASS-DATA (статический атрибут) и метод. После реализации класса и метода мы напрямую обращаемся к статическому атрибуту в событии Start-Of-Selection. Затем мы просто создаем экземпляр класса и вызываем метод.

Report ZStatic1. 
CLASS class1 Definition.   
   PUBLIC Section.
      CLASS-DATA: name1 Type char45,
                  data1 Type I.
   Methods: meth1. 
ENDCLASS. 

CLASS class1 Implementation.   
   Method meth1.
      Do 4 Times.
         data1 = 1 + data1.
         Write: / data1, name1.
      EndDo.
      Skip.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
   class1name1 = 'ABAP Object Oriented Programming'.
   class1data1 = 0.
   Data: Object1 Type Ref To class1,
         Object2 Type Ref To class1.
			
   Create Object: Object1, Object2.
   CALL Method: Object1meth1, 
                Object2meth1.

Приведенный выше код производит следующий вывод —

Статические Атрибуты

Конструкторы

Конструкторы — это специальные методы, которые вызываются автоматически при создании объекта или при доступе к компонентам класса. Конструктор запускается всякий раз, когда создается объект, но нам нужно вызвать метод, чтобы вызвать общий метод. В следующем примере мы объявили два открытых метода method1 и constructor. Оба эти метода имеют разные операции. При создании объекта класса метод конструктора запускает его работу.

пример

Report ZConstructor1. 
CLASS class1 Definition.
   PUBLIC Section.
      Methods: method1, constructor.
ENDCLASS. 

CLASS class1 Implementation.
   Method method1.
      Write: / 'This is Method1'.
   EndMethod.
	
   Method constructor.
      Write: / 'Constructor Triggered'.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection.
   Data Object1 Type Ref To class1.
   Create Object Object1.

Приведенный выше код производит следующий вывод —

Constructor Triggered

Оператор ME в методах

Когда вы объявляете переменную любого типа в публичной секции класса, вы можете использовать ее в любой другой реализации. Переменная может быть объявлена ​​с начальным значением в публичном разделе. Мы можем объявить переменную снова внутри метода с другим значением. Когда мы пишем переменную внутри метода, система напечатает измененное значение. Чтобы отразить предыдущее значение переменной, мы должны использовать оператор «ME».

В этой программе мы объявили открытую переменную text1 и начали со значения. Мы снова объявили одну и ту же переменную, но создали ее с другим значением. Внутри метода мы записываем эту переменную с оператором ‘ME’, чтобы получить ранее инициированное значение. Мы получим измененное значение, объявив напрямую.

пример

Report ZMEOperator1. 
CLASS class1 Definition.
   PUBLIC Section. 
	
Data text1 Type char25 Value 'This is CLASS Attribute'.
   Methods method1. 
ENDCLASS. 

CLASS class1 Implementation.
   Method method1. 
	
Data text1 Type char25 Value 'This is METHOD Attribute'.
   Write: / MEtext1,
          / text1.
   ENDMethod.
ENDCLASS. 

Start-Of-Selection.
   Data objectx Type Ref To class1.
   Create Object objectx.
   CALL Method objectxmethod1.

Приведенный выше код производит следующий вывод —