SAP ABAP - Encapsulation

L'encapsulation est un concept de programmation orientée objet (POO) qui lie les données et les fonctions qui manipulent les données et les protège des interférences extérieures et des abus. L'encapsulation des données a conduit à l'important concept POO de masquage des données. L'encapsulation est un mécanisme de regroupement des données et des fonctions qui les utilisent, et l'abstraction des données est un mécanisme permettant d'exposer uniquement les interfaces et de masquer les détails d'implémentation à l'utilisateur.

ABAP prend en charge les propriétés d'encapsulation et de masquage des données via la création de types définis par l'utilisateur appelés classes. Comme indiqué précédemment, une classe peut contenir des membres privés, protégés et publics. Par défaut, tous les éléments définis dans une classe sont privés.

Encapsulation par interface

L'encapsulation signifie en fait qu'un attribut et une méthode peuvent être modifiés dans différentes classes. Par conséquent, les données et la méthode peuvent avoir une forme et une logique différentes qui peuvent être masquées pour séparer la classe.

Considérons l'encapsulation par interface. L'interface est utilisée lorsque nous devons créer une méthode avec différentes fonctionnalités dans différentes classes. Ici, le nom de la méthode n'a pas besoin d'être changé. La même méthode devra être implémentée dans différentes implémentations de classe.

Exemple

Le programme suivant contient une interface inter_1. Nous avons déclaré un attribut et une méthode method1. Nous avons également défini deux classes comme Class1 et Class2. Nous devons donc implémenter la méthode 'method1' dans les deux implémentations de classe. Nous avons implémenté la méthode 'method1' différemment dans différentes classes. Au début de la sélection, nous créons deux objets Object1 et Object2 pour deux classes. Ensuite, nous appelons la méthode par différents objets pour obtenir la fonction déclarée dans des classes séparées.

Report ZEncap1. 
Interface inter_1.
   Data text1 Type char35.
   Methods method1.
EndInterface.

CLASS Class1 Definition.
   PUBLIC Section.
      Interfaces inter_1.
ENDCLASS. 

CLASS Class2 Definition.
   PUBLIC Section.
      Interfaces inter_1. 
ENDCLASS.

CLASS Class1 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 1 Interface method'.
      Write / inter_1~text1.
   EndMethod. 
ENDCLASS.
 
CLASS Class2 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 2 Interface method'.
      Write / inter_1~text1.
   EndMethod. 
ENDCLASS.
 
Start-Of-Selection.
   Data: Object1 Type Ref To Class1,
      Object2 Type Ref To Class2.
		
   Create Object: Object1, Object2.
   CALL Method: Object1→inter_1~method1,
                Object2→inter_1~method1.

Le code ci-dessus produit la sortie suivante -

Class 1 Interface method 
Class 2 Interface method

Les classes encapsulées n'ont pas beaucoup de dépendances avec le monde extérieur. De plus, les interactions qu'ils ont avec les clients externes sont contrôlées via une interface publique stabilisée. Autrement dit, une classe encapsulée et ses clients sont faiblement couplés. Pour la plupart, les classes avec des interfaces bien définies peuvent être connectées à un autre contexte. Lorsqu'elles sont conçues correctement, les classes encapsulées deviennent des actifs logiciels réutilisables.

Conception de la stratégie

La plupart d'entre nous ont appris par une expérience amère à rendre les membres de la classe privés par défaut à moins que nous n'ayons vraiment besoin de les exposer. C'est juste une bonne encapsulation. Cette sagesse est appliquée le plus souvent aux membres de données et s'applique également à tous les membres.