Учебники

SAP ABAP — Интерфейсы

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

Интерфейсы используются, когда два одинаковых класса имеют метод с одинаковым именем, но функциональные возможности отличаются друг от друга. Интерфейсы могут выглядеть аналогично классам, но функции, определенные в интерфейсе, реализованы в классе для расширения области действия этого класса. Интерфейсы вместе с функцией наследования обеспечивают основу для полиморфизма. Это потому, что метод, определенный в интерфейсе, может вести себя по-разному в разных классах.

Ниже приведен общий формат для создания интерфейса:

INTERFACE <intf_name>. 
DATA..... 
CLASS-DATA..... 
METHODS..... 
CLASS-METHODS..... 
ENDINTERFACE.

В этом синтаксисе <intf_name> представляет имя интерфейса. Операторы DATA и CLASSDATA могут использоваться для определения экземпляра и статических атрибутов интерфейса соответственно. Операторы METHODS и CLASS-METHODS могут использоваться для определения экземпляра и статических методов интерфейса соответственно. Поскольку определение интерфейса не включает в себя класс реализации, нет необходимости добавлять предложение DEFINITION в объявление интерфейса.

Примечание. Все методы интерфейса являются абстрактными. Они полностью объявлены, включая их интерфейс параметров, но не реализованы в интерфейсе. Все классы, которые хотят использовать интерфейс, должны реализовывать все методы интерфейса. В противном случае класс становится абстрактным классом.

Мы используем следующий синтаксис в части реализации класса —

INTERFACE <intf_name>. 

В этом синтаксисе <intf_name> представляет имя интерфейса. Обратите внимание, что этот синтаксис должен использоваться в открытом разделе класса.

Следующий синтаксис используется для реализации методов интерфейса внутри реализации класса:

METHOD <intf_name~method_m>. 
<statements>. 
ENDMETHOD.

В этом синтаксисе <intf_name ~ method_m> представляет полностью объявленное имя метода интерфейса <intf_name>.

пример

Report ZINTERFACE1. 
INTERFACE my_interface1. 
Methods msg. 
ENDINTERFACE. 

CLASS num_counter Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods add_number. 
PRIVATE Section. 
Data num Type I. 
ENDCLASS. 

CLASS num_counter Implementation. 
Method my_interface1~msg. 
Write: / 'The number is', num. 
EndMethod. 

Method add_number. 
ADD 7 TO num. 
EndMethod. 
ENDCLASS. 

CLASS drive1 Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods speed1.
PRIVATE Section.
Data wheel1 Type I. 
ENDCLASS. 

CLASS drive1 Implementation.
Method my_interface1~msg.
Write: / 'Total number of wheels is', wheel1. 
EndMethod. 

Method speed1. 
Add 4 To wheel1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data object1 Type Ref To num_counter. 
Create Object object1. 

CALL Method object1add_number.
CALL Method object1my_interface1~msg.

Data object2 Type Ref To drive1. 
Create Object object2.
 
CALL Method object2speed1. 
CALL Method object2my_interface1~msg. 

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

The number is 7 
Total number of wheels is 4

В приведенном выше примере my_interface1 — это имя интерфейса, содержащего метод msg. Далее, два класса, num_counter и drive1 определены и реализованы. Оба эти класса реализуют метод «msg», а также специальные методы, которые определяют поведение их соответствующих экземпляров, такие как методы add_number и speed1.

Примечание . Методы add_number и speed1 относятся к соответствующим классам.