SAP ABAP - Interfaces

Comme les classes dans ABAP, les interfaces agissent comme des types de données pour les objets. Les composants des interfaces sont les mêmes que les composants des classes. Contrairement à la déclaration de classes, la déclaration d'une interface n'inclut pas les sections de visibilité. En effet, les composants définis dans la déclaration d'une interface sont toujours intégrés dans la section de visibilité publique des classes.

Les interfaces sont utilisées lorsque deux classes similaires ont une méthode avec le même nom, mais les fonctionnalités sont différentes l'une de l'autre. Les interfaces peuvent sembler similaires aux classes, mais les fonctions définies dans une interface sont implémentées dans une classe pour étendre la portée de cette classe. Les interfaces ainsi que la fonction d'héritage fournissent une base pour le polymorphisme. En effet, une méthode définie dans une interface peut se comporter différemment dans différentes classes.

Voici le format général pour créer une interface -

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

Dans cette syntaxe, <nom_intf> représente le nom d'une interface. Les instructions DATA et CLASSDATA peuvent être utilisées pour définir respectivement les attributs d'instance et statiques de l'interface. Les instructions METHODS et CLASS-METHODS peuvent être utilisées pour définir respectivement l'instance et les méthodes statiques de l'interface. Comme la définition d'une interface n'inclut pas la classe d'implémentation, il n'est pas nécessaire d'ajouter la clause DEFINITION dans la déclaration d'une interface.

Note- Toutes les méthodes d'une interface sont abstraites. Ils sont entièrement déclarés avec leur interface de paramètres, mais ne sont pas implémentés dans l'interface. Toutes les classes qui souhaitent utiliser une interface doivent implémenter toutes les méthodes de l'interface. Sinon, la classe devient une classe abstraite.

Nous utilisons la syntaxe suivante dans la partie implémentation de la classe -

INTERFACE <intf_name>.

Dans cette syntaxe, <nom_intf> représente le nom d'une interface. Notez que cette syntaxe doit être utilisée dans la section publique de la classe.

La syntaxe suivante est utilisée pour implémenter les méthodes d'une interface dans l'implémentation d'une classe -

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

Dans cette syntaxe, <intf_name ~ method_m> représente le nom entièrement déclaré d'une méthode de l'interface <intf_name>.

Exemple

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.

Le code ci-dessus produit la sortie suivante -

The number is 7 
Total number of wheels is 4

Dans l'exemple ci-dessus, my_interface1 est le nom d'une interface contenant la méthode 'msg'. Ensuite, deux classes, num_counter et drive1 sont définies et implémentées. Ces deux classes implémentent la méthode 'msg' ainsi que des méthodes spécifiques qui définissent le comportement de leurs instances respectives, telles que les méthodes add_number et speed1.

Note - Les méthodes add_number et speed1 sont spécifiques aux classes respectives.