Ansicht
Dokumentation

ABAPCLASS_OPTIONS - CLASS OPTIONS

ABAPCLASS_OPTIONS - CLASS OPTIONS

BAL Application Log Documentation   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

CLASS, class_options

Kurzreferenz



... $[PUBLIC$]
    $[INHERITING FROM superclass$]
    $[ABSTRACT$]
    $[FINAL$]
    $[CREATE ${PUBLIC$|PROTECTED$|PRIVATE$}$]
    $[SHARED MEMORY ENABLED$]
    $[FOR TESTING$]
    $[FOR BEHAVIOR OF$]
    $[$[GLOBAL$] FRIENDS class1 class2 ...
                      intf1  intf2  ...$].


Zusätze:

1. ... PUBLIC

2. ... INHERITING FROM superclass

3. ... ABSTRACT

4. ... FINAL

5. ... CREATE ${PUBLIC$|PROTECTED$|PRIVATE$}

6. ... SHARED MEMORY ENABLED

7. ... $[GLOBAL$] FRIENDS class1 class2 ... intf1  intf2 ...

Wirkung

Definition der Eigenschaften einer Klasse. Die folgenden Zusätze definieren spezielle Klassen:

Zusatz 1

... PUBLIC

Wirkung

Durch den Zusatz PUBLIC wird die Klasse class zu einer globalen Klasse der Klassenbibliothek. Der Zusatz PUBLIC ist nur bei genau einer Klasse eines Class-Pools möglich. Sie wird beim Anlegen einer globalen Klasse vom Class Builder erzeugt. Alle Klassen ohne den Zusatz PUBLIC sind lokale Klassen ihres Programms.

Hinweise

  • Eine globale Klasse ist ein globaler Objekttyp und befindet sich im gleichen Namensraum wie alle globalen Typen des AS ABAP.

Beispiel

Deklaration der öffentlichen Klasse CL_DEMO_SPFLI.

CLASS cl_demo_spfli DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC.


Zusatz 2

... INHERITING FROM superclass

Wirkung

Mit dem Zusatz INHERITING FROM wird über eine Vererbung von der Oberklasse superclass die Klasse class abgeleitet. Die Oberklasse superclass kann eine beliebige nicht-finale, an dieser Stelle sichtbare Klasse sein.

Jede Klasse kann nur eine direkte Oberklasse, aber mehrere direkte Unterklassen haben (Einfachvererbung). Jede Klasse ohne den Zusatz INHERITING FROM erbt implizit von der vordefinierten leeren und abstrakten Klasse object. Alle Klassen in ABAP Objects bilden einen Vererbungsbaum, in dem es von jeder Klasse einen eindeutigen Pfad zum Wurzelknoten object gibt.

Die Klasse class übernimmt alle Komponenten von superclass, ohne deren Sichtbarkeitsbereich zu ändern. In der Unterklasse sind nur die Komponenten des öffentlichen und geschützten Sichtbarkeitsbereichs der Oberklasse sichtbar. Die Eigenschaften der übernommenen Komponenten können nicht verändert werden. In einer Unterklasse können zusätzliche Komponenten deklariert und geerbte Methoden redefiniert, d.h. ohne Änderung der Schnittstelle neu implementiert werden.

Hinweis

Die öffentlichen und geschützten Komponenten aller Klassen innerhalb eines Pfads des Vererbungsbaums liegen im gleichen Namensraum. In einer Unterklasse dürfen neue Komponenten nicht genauso heißen wie öffentliche oder geschützte Komponenten, die von den Oberklassen geerbt sind.

Eine Unterklasse cls2 erbt von einer Oberklasse cls1. cls1 ist implizit Unterklasse der leeren Klasse object.

Zusatz 3

... ABSTRACT

Wirkung

Durch den Zusatz ABSTRACT wird eine abstrakte Klasse class definiert. Von einer abstrakten Klasse können keine Instanzen erzeugt werden. Um die Instanzkomponenten einer abstrakten Klasse zu verwenden, muss eine konkrete Unterklasse der Klasse instanziert werden.

Eine Unterklasse cls2 erbt von einer abstrakten Oberklasse cls1.

Zusatz 4

... FINAL

Wirkung

Durch den Zusatz FINAL wird eine finale Klasse class definiert. Von einer finalen Klasse können keine Unterklassen abgeleitet werden. Alle Methoden einer finalen Klasse sind implizit final und dürfen nicht explizit als final deklariert werden.

Hinweise

  • Finale Klassen schließen einen Vererbungsbaum endgültig ab.
  • In Klassen, die gleichzeitig abstrakt und final sind, sind nur die statischen Komponenten verwendbar. Es können zwar Instanzkomponenten deklariert werden, diese sind aber nicht verwendbar. Die gemeinsame Angabe von ABSTRACT und FINAL ist also nur für statische Klassen sinnvoll.

Beispiel

In diesem Beispiel werden eine abstrakte Klasse c1 und eine finale Klasse c2 definiert, wobei c2 von c1 erbt. In c2 kann auf m1, aber nicht auf a1 zugegriffen werden.

Zusatz 5

... CREATE ${PUBLIC$|PROTECTED$|PRIVATE$}

Wirkung

Der Zusatz CREATE legt fest, in welchem Kontext die Klasse class instanziert, d.h., wo die Anweisung CREATE OBJECT für diese Klasse ausgeführt, und in welchem Sichtbarkeitsbereich der Instanzkonstruktor der Klasse deklariert werden kann.

  • Eine Klasse mit dem Zusatz CREATE PUBLIC kann überall dort instanziert werden, wo die Klasse im Rahmen des Paketkonzepts sichtbar ist.
  • Eine Klasse mit dem Zusatz CREATE PROTECTED kann nur in Methoden ihrer Unterklassen und der Klasse selbst sowie deren Freunden instanziert werden.
  • Eine Klasse mit dem Zusatz CREATE PRIVATE kann nur in Methoden der Klasse selbst oder deren Freunden instanziert werden. Das bedeutet insbesondere, dass sie auch nicht als vererbter Bestandteil von Unterklassen instanziert werden kann.

Die Instanzierbarkeit einer Unterklasse hängt wie folgt von der direkten Oberklasse ab:

  • Direkte Unterklassen von object oder einer Klasse mit dem Zusatz CREATE PUBLIC erben implizit den Zusatz CREATE PUBLIC. Explizit können alle CREATE-Zusätze angegeben werden, die dann den geerbten Zusatz überschreiben.
  • Direkte Unterklassen einer Klasse mit dem Zusatz CREATE PROTECTED erben implizit den Zusatz CREATE PROTECTED. Explizit können alle CREATE-Zusätze angegeben werden, die dann den geerbten Zusatz überschreiben.
  • Direkte Unterklassen einer Klasse mit dem Zusatz CREATE PRIVATE, die keine Freunde der Klasse sind, erhalten implizit einen Zusatz CREATE NONE. Sie sind nicht instanzierbar und es dürfen keine expliziten CREATE-Zusätze angegeben werden. Direkte Unterklassen, die Freunde der Klasse sind, erben implizit den Zusatz CREATE PRIVATE. All CREATE-Zusätze können für Freunde der Oberklassen explizit angegeben werden, die privat instanzierbar sind.

Die Anweisung METHODS constructor zur Deklaration des Instanzkonstruktors einer lokalen Klasse kann in allen Sichtbarkeitsbereichen aufgeführt werden, die allgemeiner oder gleich der im CREATE-Zusatz angegebenen Instanzierbarkeit sind. Bei globalen Klassen sollte aus technischen Gründen die Deklaration nur im öffentlichen Sichtbarkeitsbereich erfolgen.

Instanzkonstruktor im öffentlichen Sichtbarkeitsbereich deklarieren

Hinweise

  • Es empfiehlt sich, eine privat instanzierbare Klasse gleichzeitig final zu machen, da ihre Unterklassen nicht instanziert werden können, wenn sie keine Freunde der Klasse sind.
  • Es empfiehlt sich den Instanzkonstruktor lokaler Klassen in dem Sichtbarkeitsbereich der Klasse zu deklarieren, welcher der Instanzierbarkeit entspricht, da dies die Verwendung von dort deklarierten Komponenten in der Schnittstelle des Konstruktors erlaubt.

Die Klasse cls ist nur privat instanzierbar. Die eigene Methode factory darf eine Instanzierung durchführen und gibt eine Referenz auf das erzeugte Objekt zurück.

Zusatz 6

... SHARED MEMORY ENABLED

Wirkung

Mit dem Zusatz SHARED MEMORY ENABLED wird eine Shared-Memory-fähige Klasse definiert, deren Instanzen als Shared Objects im Shared Memory abgelegt werden können.

Bei Unterklassen kann der Zusatz SHARED MEMORY ENABLED nur angegeben werden, wenn auch alle expliziten Oberklassen mit diesem Zusatz definiert sind. Eine Unterklasse erbt den Zusatz nicht automatisch von ihrer Oberklasse.

Hinweise

  • Die statischen Attribute einer Shared-Memory-fähigen Klasse werden nicht anders behandelt als die einer normalen Klasse, d.h. sie werden beim Laden der Klasse in die interne Sitzung eines Programms dort angelegt. Wenn verschiedene Programme auf die gleichen Shared Objects zugreifen, sind die statischen Attribute der zugehörigen Klassen mehrfach und unabhängig voneinander in den Programmen vorhanden.
  • In einer Shared-Memory-fähigen Klasse können keine Ereignisse deklariert oder behandelt werden. Die Anweisungen $[CLASS-$] EVENTS und der Zusatz FOR EVENT dürfen nicht im Deklarationsteil angegeben werden.
  • Für globale Shared-Memory-fähige Klassen muss der Zusatz SHARED MEMORY ENABLED durch Auswahl der Eigenschaft Shared memory fähig im Class Builder erzeugt werden. Dies gilt insbesondere für die Gebietswurzelklasse eines Gebiets, die immer global ist.
  • Der Zusatz sollte nur angegeben werden, wenn dies ohne Probleme möglich ist. Probleme im Zusammenhang mit dem Shared Memory gibt es in folgenden Fällen:
  • Die Klasse besitzt statische Attribute und in diesen Attributen werden Informationen über die Gesamtheit der Instanzen, z.B. die Gesamtanzahl der Instanzen abgelegt.

  • Die Klasse allokiert intern, z.B. über Kernel-Methoden, eigenen Speicher.

Beispiel

Deklaration der öffentlichen Klasse CL_DEMO_FLIGHT_LIST. Die Klasse ist Shared-Memory-fähig und Wurzelklasse des in der Transaktion SHMA verwalteten Gebiets CL_DEMO_FLIGHTS.

CLASS cl_demo_flight_list DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC
  SHARED MEMORY ENABLED.


Zusatz 7

... $[GLOBAL$] FRIENDS class1 class2 ... intf1 intf2 ...

Wirkung

Mit dem Zusatz FRIENDS macht die Klasse class die Klassen class1 class2 ... bzw. die Interfaces intf1 intf2 ... zu ihren Freunden. Gleichzeitig werden sämtliche Unterklassen der Klassen class1 class2 ..., sämtliche Klassen, die eines der Interfaces intf1 intf2 ... implementieren, und sämtliche Interfaces, die eines der Interfaces intf1 intf2 ... als Komponenten-Interface enthalten, zu Freunden der Klasse class. Es muss mindestens eine Klasse oder ein Interface angegeben werden.

Die Freunde einer Klasse haben unbeschränkten Zugriff auf alle Komponenten der Klasse unabhängig von deren Sichtbarkeitsbereich oder dem Zusatz READ-ONLY und können uneingeschränkt Instanzen der Klasse erzeugen.

Die Freunde von class sind nicht automatisch auch Freunde der Unterklassen von class. Die Klasse class wird durch den Zusatz FRIENDS nicht zum Freund ihrer Freunde.

Ohne den Zusatz GLOBAL können für class1 class2... und intf1 intf2 ... alle an dieser Stelle sichtbaren Klassen und Interfaces angegeben werden. Falls globale Klassen und Interfaces der Klassenbibliothek zu Freunden gemacht werden, ist zu beachten, dass in diesen die lokalen Klassen anderer ABAP-Programme nicht sichtbar sind. Ein statischer Zugriff auf die Komponenten einer lokalen Klasse class ist in solchen Freunden nicht möglich.

Der Zusatz GLOBAL ist nur bei gleichzeitiger Verwendung des Zusatzes PUBLIC, also für die globale Klasse eines Class-Pools, erlaubt. Hinter GLOBAL FRIENDS können andere globale Klassen und Interfaces der Klassenbibliothek aufgeführt werden. Dieser Zusatz wird beim Anlegen einer globalen Klasse vom Class Builder erzeugt, wenn auf der entsprechenden Registerkarte Freunde eingetragen wurden.

Hinweis

Der Zusatz FRIENDS muss als letzter hinter den übrigen Zusätzen angegeben werden.

Beispiel

In diesem Beispiel ist das Interface i1 und damit auch die implementierende Klasse c2 Freund der Klasse c1. Die Klasse c2 kann c1 instanzieren und auf ihre private Komponente a1 zugreifen.

Beispiel

Die generierte Gebietsklasse CL_DEMO_FLIGHTS erbt von der Systemklasse CL_SHM_AREA und macht diese auch zu ihrem Freund.

CLASS cl_demo_flights DEFINITION
  PUBLIC
  INHERITING FROM cl_shm_area
  FINAL
  CREATE PRIVATE
  GLOBAL FRIENDS cl_shm_area.

Freundschaft






ABAP Short Reference   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 21457 Date: 20240425 Time: 115107     sap01-206 ( 281 ms )