SAP ABAP - Interfacce

Analogamente alle classi in ABAP, le interfacce agiscono come tipi di dati per gli oggetti. I componenti delle interfacce sono gli stessi dei componenti delle classi. A differenza della dichiarazione di classi, la dichiarazione di un'interfaccia non include le sezioni di visibilità. Questo perché i componenti definiti nella dichiarazione di un'interfaccia sono sempre integrati nella sezione di visibilità pubblica delle classi.

Le interfacce vengono utilizzate quando due classi simili hanno un metodo con lo stesso nome, ma le funzionalità sono diverse l'una dall'altra. Le interfacce potrebbero sembrare simili alle classi, ma le funzioni definite in un'interfaccia sono implementate in una classe per estendere l'ambito di quella classe. Le interfacce insieme alla funzione di ereditarietà forniscono una base per il polimorfismo. Questo perché un metodo definito in un'interfaccia può comportarsi in modo diverso in classi diverse.

Di seguito è riportato il formato generale per creare un'interfaccia:

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

In questa sintassi, <intf_name> rappresenta il nome di un'interfaccia. Le istruzioni DATA e CLASSDATA possono essere utilizzate per definire rispettivamente l'istanza e gli attributi statici dell'interfaccia. Le istruzioni METHODS e CLASS-METHODS possono essere utilizzate per definire rispettivamente i metodi di istanza e statici dell'interfaccia. Poiché la definizione di un'interfaccia non include la classe di implementazione, non è necessario aggiungere la clausola DEFINITION nella dichiarazione di un'interfaccia.

Note- Tutti i metodi di un'interfaccia sono astratti. Sono completamente dichiarati inclusa la loro interfaccia dei parametri, ma non implementati nell'interfaccia. Tutte le classi che vogliono utilizzare un'interfaccia devono implementare tutti i metodi dell'interfaccia. Altrimenti, la classe diventa una classe astratta.

Usiamo la seguente sintassi nella parte di implementazione della classe:

INTERFACE <intf_name>.

In questa sintassi, <intf_name> rappresenta il nome di un'interfaccia. Si noti che questa sintassi deve essere utilizzata nella sezione pubblica della classe.

La seguente sintassi viene utilizzata per implementare i metodi di un'interfaccia all'interno dell'implementazione di una classe:

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

In questa sintassi, <intf_name ~ method_m> rappresenta il nome completamente dichiarato di un metodo dell'interfaccia <intf_name>.

Esempio

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.

Il codice precedente produce il seguente output:

The number is 7 
Total number of wheels is 4

Nell'esempio sopra, my_interface1 è il nome di un'interfaccia che contiene il metodo "msg". Successivamente, vengono definite e implementate due classi, num_counter e drive1. Entrambe queste classi implementano il metodo "msg" e anche metodi specifici che definiscono il comportamento delle rispettive istanze, come i metodi add_number e speed1.

Note - I metodi add_number e speed1 sono specifici delle rispettive classi.