SAP ABAP - Interfaces

Semelhante às classes em ABAP, as interfaces atuam como tipos de dados para objetos. Os componentes das interfaces são iguais aos componentes das classes. Ao contrário da declaração de classes, a declaração de uma interface não inclui as seções de visibilidade. Isso ocorre porque os componentes definidos na declaração de uma interface estão sempre integrados na seção de visibilidade pública das classes.

As interfaces são utilizadas quando duas classes semelhantes possuem um método com o mesmo nome, mas as funcionalidades são diferentes uma da outra. As interfaces podem parecer semelhantes às classes, mas as funções definidas em uma interface são implementadas em uma classe para estender o escopo dessa classe. As interfaces junto com o recurso de herança fornecem uma base para o polimorfismo. Isso ocorre porque um método definido em uma interface pode se comportar de maneira diferente em classes diferentes.

A seguir está o formato geral para criar uma interface -

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

Nesta sintaxe, <intf_name> representa o nome de uma interface. As instruções DATA e CLASSDATA podem ser usadas para definir a instância e os atributos estáticos da interface, respectivamente. As instruções METHODS e CLASS-METHODS podem ser usadas para definir a instância e os métodos estáticos da interface, respectivamente. Como a definição de uma interface não inclui a classe de implementação, não é necessário adicionar a cláusula DEFINITION na declaração de uma interface.

Note- Todos os métodos de uma interface são abstratos. Eles são totalmente declarados incluindo sua interface de parâmetro, mas não implementados na interface. Todas as classes que desejam usar uma interface devem implementar todos os métodos da interface. Caso contrário, a classe se torna uma classe abstrata.

Usamos a seguinte sintaxe na parte de implementação da classe -

INTERFACE <intf_name>.

Nesta sintaxe, <intf_name> representa o nome de uma interface. Observe que essa sintaxe deve ser usada na seção pública da classe.

A seguinte sintaxe é usada para implementar os métodos de uma interface dentro da implementação de uma classe -

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

Nesta sintaxe, <intf_name ~ method_m> representa o nome totalmente declarado de um método da interface <intf_name>.

Exemplo

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 object1→add_number.
CALL Method object1→my_interface1~msg.

Data object2 Type Ref To drive1. 
Create Object object2.
 
CALL Method object2→speed1. 
CALL Method object2→my_interface1~msg.

O código acima produz a seguinte saída -

The number is 7 
Total number of wheels is 4

No exemplo acima, my_interface1 é o nome de uma interface que contém o método 'msg'. Em seguida, duas classes, num_counter e drive1 são definidas e implementadas. Ambas as classes implementam o método 'msg' e também métodos específicos que definem o comportamento de suas respectivas instâncias, como os métodos add_number e speed1.

Note - Os métodos add_number e speed1 são específicos para as respectivas classes.