SAP ABAP - Classes

Une classe est utilisée pour spécifier la forme d'un objet et combine la représentation des données et les méthodes de manipulation de ces données dans un package soigné. Les données et les fonctions d'une classe sont appeléesmembers of the class.

Définition et implémentation de classe

Lorsque vous définissez une classe, vous définissez un plan pour un type de données. Cela ne définit en fait aucune donnée, mais définit ce que signifie le nom de la classe, en quoi consistera un objet de la classe et quelles opérations peuvent être effectuées sur un tel objet. Autrement dit, il définit les caractéristiques abstraites d'un objet, telles que les attributs, les champs et les propriétés.

La syntaxe suivante montre comment définir une classe -

CLASS <class_name> DEFINITION. 
.......... 
.......... 
ENDCLASS.

Une définition de classe commence par le mot-clé CLASS suivi du nom de la classe, DEFINITION et du corps de la classe. La définition d'une classe peut contenir divers composants de la classe tels que des attributs, des méthodes et des événements. Lorsque nous déclarons une méthode dans la déclaration de classe, l'implémentation de la méthode doit être incluse dans l'implémentation de la classe. La syntaxe suivante montre comment implémenter une classe -

CLASS <class_name> IMPLEMENTATION. 
........... 
.......... 
ENDCLASS.

Note- L'implémentation d'une classe contient l'implémentation de toutes ses méthodes. Dans les objets ABAP, la structure d'une classe contient des composants tels que des attributs, des méthodes, des événements, des types et des constantes.

Les attributs

Les attributs sont des champs de données d'une classe qui peuvent avoir n'importe quel type de données tel que C, I, F et N. Ils sont déclarés dans la déclaration de classe. Ces attributs peuvent être divisés en 2 catégories: les attributs d'instance et les attributs statiques. Uninstance attributedéfinit l'état spécifique à l'instance d'un objet. Les états sont différents pour différents objets. Un attribut d'instance est déclaré à l'aide de l'instruction DATA.

Static attributesdéfinir un état commun d'une classe qui est partagé par toutes les instances de la classe. Autrement dit, si vous modifiez un attribut statique dans un objet d'une classe, la modification est également visible par tous les autres objets de la classe. Un attribut statique est déclaré à l'aide de l'instruction CLASS-DATA.

Méthodes

Une méthode est une fonction ou une procédure qui représente le comportement d'un objet dans la classe. Les méthodes de la classe peuvent accéder à n'importe quel attribut de la classe. La définition d'une méthode peut également contenir des paramètres, de sorte que vous pouvez fournir les valeurs à ces paramètres lorsque des méthodes sont appelées. La définition d'une méthode est déclarée dans la déclaration de classe et implémentée dans la partie implémentation d'une classe. Les instructions METHOD et ENDMETHOD sont utilisées pour définir la partie implémentation d'une méthode. La syntaxe suivante montre comment implémenter une méthode -

METHOD <m_name>. 
.......... 
.......... 
ENDMETHOD.

Dans cette syntaxe, <m_name> représente le nom d'une méthode. Note - Vous pouvez appeler une méthode à l'aide de l'instruction CALL METHOD.

Accès aux attributs et méthodes

Les composants de classe peuvent être définis dans des sections de visibilité publiques, privées ou protégées qui contrôlent la manière dont ces composants sont accessibles. La section de visibilité privée est utilisée pour refuser l'accès aux composants depuis l'extérieur de la classe. Ces composants ne sont accessibles que depuis l'intérieur de la classe, comme une méthode.

Les composants définis dans la section de visibilité publique sont accessibles à partir de n'importe quel contexte. Par défaut, tous les membres d'une classe seraient privés. En pratique, nous définissons les données dans la section privée et les méthodes associées dans la section publique afin qu'elles puissent être appelées de l'extérieur de la classe comme indiqué dans le programme suivant.

  • Les attributs et méthodes déclarés dans la section Public d'une classe sont accessibles par cette classe et toute autre classe, sous-classe du programme.

  • Lorsque les attributs et méthodes sont déclarés dans la section Protected d'une classe, ceux-ci ne sont accessibles que par cette classe et ses sous-classes (classes dérivées).

  • Lorsque les attributs et méthodes sont déclarés dans la section Private d'une classe, ceux-ci ne sont accessibles que par cette classe et pas par une autre classe.

Exemple

Report ZAccess1. 
CLASS class1 Definition.
   PUBLIC Section.
      Data: text1 Type char25 Value 'Public Data'.
      Methods meth1.
		
   PROTECTED Section.
      Data: text2 Type char25 Value 'Protected Data'.
		
   PRIVATE Section.     
      Data: text3 Type char25 Value 'Private Data'. 
ENDCLASS.
 
CLASS class1 Implementation.   
   Method meth1.     
      Write: / 'Public Method:',   
             / text1,
             / text2,
             / text3.
      Skip.
   EndMethod.
ENDCLASS. 

Start-Of-Selection.   
   Data: Objectx Type Ref To class1.
   Create Object: Objectx.
   CALL Method: Objectx→meth1.
   Write: / Objectx→text1.

Le code ci-dessus produit la sortie suivante -

Public Method: 
Public Data 
Protected Data 
Private Data
  
Public Data

Attributs statiques

Un attribut statique est déclaré avec l'instruction CLASS-DATA. Tous les objets ou instances peuvent utiliser l'attribut statique de la classe. Les attributs statiques sont accessibles directement à l'aide du nom de classe comme class_name⇒name_1 = 'Some Text'.

Exemple

Voici un programme dans lequel nous voulons imprimer un texte avec le numéro de ligne 4 à 8 fois. Nous définissons une classe class1 et dans la section publique nous déclarons CLASS-DATA (attribut statique) et une méthode. Après avoir implémenté la classe et la méthode, nous accédons directement à l'attribut statique dans l'événement Start-Of-Selection. Ensuite, nous créons simplement l'instance de la classe et appelons la méthode.

Report ZStatic1. 
CLASS class1 Definition.   
   PUBLIC Section.
      CLASS-DATA: name1 Type char45,
                  data1 Type I.
   Methods: meth1. 
ENDCLASS. 

CLASS class1 Implementation.   
   Method meth1.
      Do 4 Times.
         data1 = 1 + data1.
         Write: / data1, name1.
      EndDo.
      Skip.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
   class1⇒name1 = 'ABAP Object Oriented Programming'.
   class1⇒data1 = 0.
   Data: Object1 Type Ref To class1,
         Object2 Type Ref To class1.
			
   Create Object: Object1, Object2.
   CALL Method: Object1→meth1, 
                Object2→meth1.

Le code ci-dessus produit la sortie suivante -

Constructeurs

Les constructeurs sont des méthodes spéciales qui sont appelées automatiquement, soit lors de la création d'un objet, soit lors de l'accès aux composants d'une classe. Le constructeur est déclenché chaque fois qu'un objet est créé, mais nous devons appeler une méthode pour déclencher la méthode générale. Dans l'exemple suivant, nous avons déclaré deux méthodes publiques method1 et constructor. Ces deux méthodes ont des opérations différentes. Lors de la création d'un objet de la classe, la méthode constructeur déclenche son opération.

Exemple

Report ZConstructor1. 
CLASS class1 Definition.
   PUBLIC Section.
      Methods: method1, constructor.
ENDCLASS. 

CLASS class1 Implementation.
   Method method1.
      Write: / 'This is Method1'.
   EndMethod.
	
   Method constructor.
      Write: / 'Constructor Triggered'.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection.
   Data Object1 Type Ref To class1.
   Create Object Object1.

Le code ci-dessus produit la sortie suivante -

Constructor Triggered

Opérateur ME en méthodes

Lorsque vous déclarez une variable de n'importe quel type dans la section publique d'une classe, vous pouvez l'utiliser dans n'importe quelle autre implémentation. Une variable peut être déclarée avec une valeur initiale dans la section publique. Nous pouvons déclarer à nouveau la variable dans une méthode avec une valeur différente. Lorsque nous écrivons la variable à l'intérieur de la méthode, le système affichera la valeur modifiée. Pour refléter la valeur précédente de la variable, nous devons utiliser l'opérateur «ME».

Dans ce programme, nous avons déclaré une variable publique text1 et initialisée avec une valeur. Nous avons de nouveau déclaré la même variable, mais instanciée avec une valeur différente. Dans la méthode, nous écrivons cette variable avec l'opérateur 'ME' pour obtenir la valeur précédemment initiée. Nous obtenons la valeur modifiée en déclarant directement.

Exemple

Report ZMEOperator1. 
CLASS class1 Definition.
   PUBLIC Section. 
	
Data text1 Type char25 Value 'This is CLASS Attribute'.
   Methods method1. 
ENDCLASS. 

CLASS class1 Implementation.
   Method method1. 
	
Data text1 Type char25 Value 'This is METHOD Attribute'.
   Write: / ME→text1,
          / text1.
   ENDMethod.
ENDCLASS. 

Start-Of-Selection.
   Data objectx Type Ref To class1.
   Create Object objectx.
   CALL Method objectx→method1.

Le code ci-dessus produit la sortie suivante -

This is CLASS Attribute 
This is METHOD Attribute