SAP ABAP - Héritage

L'un des concepts les plus importants de la programmation orientée objet est celui de l'héritage. L'héritage nous permet de définir une classe en termes d'une autre classe, ce qui facilite la création et la maintenance d'une application. Cela offre également la possibilité de réutiliser la fonctionnalité de code et un temps de mise en œuvre rapide.

Lors de la création d'une classe, au lieu d'écrire des membres de données et des méthodes complètement nouveaux, le programmeur peut désigner que la nouvelle classe doit hériter des membres d'une classe existante. Cette classe existante s'appelle lebase class ou super class, et la nouvelle classe est appelée derived class ou sub class.

  • Un objet d'une classe peut acquérir les propriétés d'une autre classe.

  • La classe dérivée hérite des données et des méthodes d'une super classe. Cependant, ils peuvent écraser des méthodes et ajouter de nouvelles méthodes.

  • Le principal avantage de l'héritage est la réutilisabilité.

La relation d'héritage est spécifiée à l'aide de l'ajout 'INHERITING FROM' à l'instruction de définition de classe.

Voici la syntaxe -

CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

Exemple

Report ZINHERITAN_1. 
CLASS Parent Definition. 
PUBLIC Section. 
Data: w_public(25) Value 'This is public data'. 
Methods: ParentM. 
ENDCLASS. 

CLASS Child Definition Inheriting From Parent. 
PUBLIC Section. 
Methods: ChildM. 
ENDCLASS. 

CLASS Parent Implementation. 
Method ParentM. 
Write /: w_public. 
EndMethod. ENDCLASS. 

CLASS Child Implementation. 
Method ChildM. 
Skip. 
Write /: 'Method in child class', w_public.
EndMethod. 
ENDCLASS. 

Start-of-selection. 
Data: Parent Type Ref To Parent, 
Child Type Ref To Child. 
Create Object: Parent, Child. 
Call Method: Parent→ParentM, 
child→ChildM.

Le code ci-dessus produit la sortie suivante -

This is public data 
Method in child class 
This is public data

Contrôle d'accès et héritage

Une classe dérivée peut accéder à tous les membres non privés de sa classe de base. Ainsi, les membres de la super classe qui ne devraient pas être accessibles aux fonctions membres des sous-classes devraient être déclarés privés dans la super classe. Nous pouvons résumer les différents types d'accès selon qui peut y accéder de la manière suivante -

Accès Publique Protégé Privé
Mêmes cals Oui Oui Oui
Classe dérivée Oui Oui Non
Hors classe Oui Non Non

Lors de la dérivation d'une classe à partir d'une super-classe, elle peut être héritée via un héritage public, protégé ou privé. Le type d'héritage est spécifié par le spécificateur d'accès comme expliqué ci-dessus. Nous n'utilisons guère l'héritage protégé ou privé, mais l'héritage public est couramment utilisé. Les règles suivantes sont appliquées lors de l'utilisation de différents types d'héritage.

  • Public Inheritance- Lors de la dérivation d'une classe d'une superclasse publique, les membres publics de la superclasse deviennent des membres publics de la sous-classe et les membres protégés de la superclasse deviennent des membres protégés de la sous-classe. Les membres privés de la super classe ne sont jamais accessibles directement à partir d'une sous-classe, mais sont accessibles via des appels aux membres publics et protégés de la super classe.

  • Protected Inheritance - Lorsqu'ils dérivent d'une super-classe protégée, les membres publics et protégés de la super-classe deviennent des membres protégés de la sous-classe.

  • Private Inheritance - Lorsqu'ils dérivent d'une super classe privée, les membres publics et protégés de la super classe deviennent des membres privés de la sous-classe.

Redéfinition des méthodes dans la sous-classe

Les méthodes de la super classe peuvent être réimplémentées dans la sous-classe. Peu de règles de redéfinition des méthodes -

  • L'instruction de redéfinition de la méthode héritée doit se trouver dans la même section que la définition de la méthode d'origine.

  • Si vous redéfinissez une méthode, vous n'avez pas besoin de saisir à nouveau son interface dans la sous-classe, mais uniquement le nom de la méthode.

  • Dans la méthode redéfinie, vous pouvez accéder aux composants de la super classe directe à l'aide de la super référence.

  • La pseudo référence super ne peut être utilisée que dans des méthodes redéfinies.

Exemple

Report Zinheri_Redefine. 
CLASS super_class Definition. 
Public Section. 
Methods: Addition1 importing g_a TYPE I
                             g_b TYPE I
		   exporting g_c TYPE I.
ENDCLASS. 

CLASS super_class Implementation. 
Method Addition1. 
g_c = g_a + g_b. 
EndMethod. 
ENDCLASS. 

CLASS sub_class Definition Inheriting From super_class. 
Public Section. 
METHODS: Addition1 Redefinition. 
ENDCLASS. 

CLASS sub_class Implementation. 
Method Addition1. 
g_c = g_a + g_b + 10. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Parameters: P_a Type I, P_b TYPE I. 
Data: H_Addition1 TYPE I. 
Data: H_Sub TYPE I. 
Data: Ref1 TYPE Ref TO sub_class. 
Create Object Ref1. 
Call Method Ref1→Addition1 exporting g_a = P_a 
                                     g_b = P_b
		           Importing g_c = H_Addition1. 
Write:/ H_Addition1.

Après avoir exécuté F8, si nous entrons les valeurs 9 et 10, le code ci-dessus produit la sortie suivante -

Redefinition Demo 
29