
Vous utilisez des attributs comme des variables normales du même type. En dehors de la classe, le nom d'attribut n'est cependant pas suffisant pour identifier l'attribut sans ambiguïté. Pour adresser un attribut statique en dehors de la classe, saisissez d'abord le nom de classe, puis le sélecteur de composant statique (=>), puis le nom d'attribut. Le sélecteur de composant statique est une double flèche composée d'un signe égal à et du signe supérieur à.
Astuce

Pour les attributs d'instance, la situation est encore plus compliquée : pour accéder à un composant d'instance, vous avez besoin d'une variable de référence.
Une variable de référence est un type spécial de variable que vous utilisez pour créer, adresser et gérer un objet. Une variable de référence est utilisée pour pointer vers l'instance d'une classe dans la mémoire de programme. Vous déclarez les variables de référence à l'aide de l'instruction DATA avec l'option TYPE REF TO suivie du nom d'une classe.
La valeur initiale d'une variable de référence est appelée la référence NULL ; la référence ne pointe pas encore n'importe où.

Pour créer une nouvelle instance d'une classe, vous utilisez l'opérateur NOUVEAU. L'exemple ci-dessus utilise une expression NEW #( ) à droite d'une valorisation. Le résultat de l'expression est l'adresse mémoire de la nouvelle instance créée. Cette référence est ensuite enregistrée dans la variable de référence à gauche de l'affectation.
Vous avez peut-être remarqué que le nom de la classe que vous souhaitez instancier n'apparaît nulle part dans l'expression. Cependant, à partir de l'emplacement de l'expression NEW #( ), le système sait déjà que la connexion de la variable cible a le type REF TO lcl_connection, et par conséquent il sait qu'il doit créer une instance de la classe lcl_connection. Le signe dièse après l'opérateur NOUVEAU signifie "utilisez le type de la variable avant le signe égal". (Dans les scénarios plus avancés, vous pouvez en fait indiquer le nom de la classe à la place du signe dièse).
Astuce
Lorsque vous adressez une classe pour la première fois (qui peut être l'accès à un composant statique ou la création d'une instance de la classe), le système d'exécution charge également la définition de classe dans la mémoire du programme. Cette définition de classe contient tous les attributs statiques qui n'existent qu'une seule fois dans la classe au lieu d'une seule pour chaque instance.

Vous adressez des composants statiques à l'aide du nom de classe et du sélecteur de composants statiques. Cela ne fonctionne pas pour les composants d'instance car vous devez indiquer l'instance à laquelle vous voulez accéder.
Pour adresser un attribut d'instance en dehors de la classe, saisissez d'abord la variable de référence, puis le sélecteur de composant d'instance (->), puis le nom d'attribut. Le sélecteur de composant d'instance est une flèche composée d'un tiret et du signe supérieur à.
Remarque

L'une des principales caractéristiques de la programmation orientée objet est le fait que vous pouvez créer plusieurs instances de la même classe. Chaque instance est créée à un emplacement différent dans la mémoire du programme et les valeurs des attributs d'instance d'une instance sont indépendantes des valeurs des autres instances. Mais comme l'illustre le graphique, les instances de la même classe partagent la valeur des attributs statiques.

Si vous affectez une variable de référence à une autre, le système copie l'adresse de l'objet vers lequel la première variable pointe dans la deuxième variable de référence. Il en résulte que vous avez deux variables de référence qui pointent vers le même objet.

Vous pouvez utiliser la même variable de référence pour créer plusieurs instances d'une classe. Chaque fois que vous utilisez l'expression NEW #( ), le système crée une nouvelle instance de la classe et place l'adresse de la nouvelle instance dans la variable de référence. Cependant, l'adresse de la nouvelle instance écrase l'adresse de l'instance précédente.
Dans l'exemple ci-dessus, l'adresse de lcl_connection (2) écrase l'adresse de lcl_connection (1). Par conséquent, il n'y a plus de variable de référence dans le programme pointant vers lcl_connection (1). Lorsque cela arrive à une instance, elle ne peut plus être traitée à partir du programme.
Pour éviter que la mémoire du programme ne soit remplie d'objets qui ne peuvent plus être adressés et qui finissent par déborder, le système d'exécution dispose d'un composant appelé Garbage Collecteur. Le Garbage Collector est un programme qui s'exécute périodiquement pour rechercher et détruire des objets vers lesquels plus aucune référence ne pointe. Si, au cours d'un programme, vous supprimez la dernière référence à un objet en l'écrasant ou en utilisant l'instruction CLEAR, le Garbage Collecteur détruira l'objet lors de son prochain passage.
Remarque
