
Sie arbeiten mit Attributen wie mit normalen Variablen desselben Typs. Außerhalb der Klasse reicht der Attributname jedoch nicht aus, um das Attribut eindeutig zu identifizieren. Um ein statisches Attribut außerhalb der Klasse zu adressieren, geben Sie zuerst den Klassennamen, dann den statischen Komponentenselektor (=>) und erst dann den Attributnamen ein. Der statische Komponentenselektor ist ein Doppelpfeil, der aus dem Gleichheits- und dem Größer-als-Zeichen besteht.
Hinweis

Bei Instanzattributen ist die Situation noch komplizierter: Um auf eine Instanzkomponente zugreifen zu können, benötigen Sie eine Referenzvariable.
Eine Referenzvariable ist eine spezielle Variable, mit der Sie Objekte anlegen, adressieren und verwalten können. Eine Referenzvariable wird verwendet, um auf die Instanz einer Klasse im Programmspeicher zu zeigen. Sie deklarieren Referenzvariablen über die Anweisung DATA mit dem Zusatz TYPE REF TO gefolgt vom Namen einer Klasse.
Der Initialwert einer Referenzvariablen wird als NULL-Referenz bezeichnet, die Referenz zeigt nirgendwo hin.

Zum Anlegen einer neuen Instanz für eine Klasse verwenden Sie den Operator NEW. Im obigen Beispiel wird ein Ausdruck NEW #( ) auf der rechten Seite einer Wertzuweisung verwendet. Das Ergebnis des Ausdrucks ist die Speicheradresse der neu angelegten Instanz. Diese Referenz wird dann in der Referenzvariable auf der linken Seite der Zuweisung gespeichert.
Möglicherweise haben Sie bemerkt, dass der Name der Klasse, die instanziiert werden soll, nicht im Ausdruck angezeigt wird. Aufgrund des Ortes des Ausdrucks NEW #( ) weiß das System jedoch bereits, dass die Zielvariable „connection" vom Typ „REF TO lcl_connection" ist und daher eine Instanz der Klasse „lcl_connection" erzeugt werden muss. Das Rautenzeichen nach dem Operator NEW bedeutet: „Den Typ der Variable vor dem Gleichheitszeichen verwenden". In komplexeren Szenarien können Sie hier den Namen der Klasse anstelle des Rautenzeichens angeben.
Hinweis
Wenn Sie eine Klasse zum ersten Mal adressieren (dies könnte beim Zugriff auf eine statische Komponente oder beim Anlegen einer Instanz für die Klasse der Fall sein), lädt das Laufzeitsystem auch die Klassendefinition in den Programmspeicher. Diese Klassendefinition enthält alle statischen Attribute, die nur einmal in der Klasse vorhanden sind, anstatt einmal in jeder Instanz.

Statische Komponenten werden über den Klassennamen und den statischen Komponentenselektor adressiert. Dies funktioniert nicht für Instanzkomponenten, da Sie die Instanz angeben müssen, auf die Sie zugreifen möchten.
Um ein Instanzattribut außerhalb der Klasse zu adressieren, geben Sie zuerst die Referenzvariable, dann den Selektor für die Instanzkomponente (->) und erst dann den Attributnamen ein. Der Selektor für die Instanzkomponente ist ein Pfeil, der aus dem Gleichheits- und dem Größer-als-Zeichen besteht.
Notiz

Eines der Hauptmerkmale der objektorientierten Programmierung ist die Tatsache, dass Sie mehrere Instanzen für dieselbe Klasse anlegen können. Jede Instanz wird an einer anderen Stelle im Programmspeicher erzeugt, und die Werte von Instanzattributen in einer Instanz sind unabhängig von den Werten in anderen Instanzen. Wie die Grafik veranschaulicht, teilen sich Instanzen derselben Klasse den Wert für die statischen Attribute.

Durch die Zuweisung einer Referenzvariablen zu einer anderen, kopiert das System die Adresse des Objekts, auf das die erste Variable zeigt, in die zweite Referenzvariable. Dadurch zeigen beide Referenzvariablen auf das gleiche Objekt.

Sie können mit derselben Referenzvariable mehrere Instanzen für eine Klasse anlegen. Jedes Mal, wenn Sie den Ausdruck NEW #( ) verwenden, legt das System eine neue Instanz für die Klasse an und hinterlegt die Adresse der neuen Instanz in der Referenzvariablen. Die Adresse der neuen Instanz überschreibt jedoch die Adresse der vorherigen Instanz.
Im Beispiel oben überschreibt die Adresse von „lcl_connection (2)" die Adresse von „lcl_connection (1)". Folglich gibt es im Programm keine Referenzvariable mehr, die auf „lcl_connection (1)" zeigt. Wenn dies für eine Instanz auftritt, kann sie nicht mehr aus dem Programm adressiert werden.
Um zu verhindern, dass der Programmspeicher mit Objekten gefüllt wird, die nicht mehr adressiert werden und zu einem Überlauf führen können, verfügt das Laufzeitsystem über die Komponente „Garbage Collector". Der Garbage Collector ist ein Programm, das regelmäßig nach Objekten sucht, auf die keine Referenzen mehr zeigen, und diese dann löscht. Wenn Sie bei einem Programm die letzte Referenz auf ein Objekt löschen, indem Sie es überschreiben oder die Anweisung CLEAR verwenden, löscht der Garbage Collector das Objekt bei seinem nächsten Lauf.
Notiz
