ABAPCLASS_OPTIONS - CLASS OPTIONS
BAL Application Log Documentation BAL Application Log DocumentationDiese Dokumentation steht unter dem Copyright der SAP AG.
CLASS - class_options
Syntax
... [PUBLIC]
[INHERITING FROM superclass]
[ABSTRACT]
[FINAL]
[CREATE {PUBLIC|PROTECTED|PACKAGE|PRIVATE}]
[SHARED MEMORY ENABLED]
[OPEN FOR PACKAGE]
[FOR TESTING]
[[GLOBAL] FRIENDS class1 class2 ...
intf1 intf2 ...].
Zusätze:
1. ... PUBLIC
2. ... INHERITING FROM superclass
3. ... ABSTRACT
4. ... FINAL
5. ... CREATE {PUBLIC|PROTECTED|PACKAGE|PRIVATE}
6. ... SHARED MEMORY ENABLED
7. ... OPEN FOR PACKAGE
8. ... [GLOBAL] FRIENDS class1 class2 ... intf1 intf2 ...
Wirkung
Definition der Eigenschaften einer Klasse. Mit dem Zusatz FOR TESTING wird eine Testklasse fürABAP Unit angelegt.
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 einesClass-Pools möglich und wird beim Anlegen einer globalen Klasse vomClassBuilder erzeugt. Alle Klassen ohne den Zusatz PUBLIC sind lokale Klassen ihres Programms.
Hinweise
- Im öffentlichenSichtbarkeitsbereichglobaler Klassen kann sich nur auf öffentlich bekannte Datentypen bezogen werden.
- Datentypen und Konstanten, die im öffentlichenSichtbarkeitsbereichglobaler Klassen mit den Anweisungen TYPES und CONSTANTS deklariert werden, lösen deren Deklaration inTypgruppen ab.
Zusatz 2
... INHERITING FROM superclass
Wirkung
Durch den Zusatz INHERITING FROM wird die Klasse class durch Vererbung von der Oberklassesuperclass abgeleitet und dadurch zu ihrer direkten Unterklasse. 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 inABAPObjects 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 undgeschütztenSichtbarkeitsbereichs der Oberklasse sichtbar. Die Eigenschaften der übernommenen Komponentenkönnen nicht verändert werden. In einer Unterklasse können zusätzliche Komponentendeklariert 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 Vererbungsbaumsliegen 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.
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 einekonkrete Unterklasse der Klasse instanziert werden.
Zusatz 4
... FINAL
Wirkung
Durch den Zusatz FINAL wird eine finale Klasse class definiert. Von einer finalen Klassekönnen keine Unterklassen abgeleitet werden. Alle Methoden einer finalen Klasse sind implizit final und dürfen nicht explizit als final deklariert werden.
Hinweis
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ürstatische Klassen sinnvoll.
Beispiel
In diesem Beispiel werden eine abstrakte Klasse c1 und eine finale Klasse c2 definiert,wobei c2 von c1 erbt. c1 ist implizit Unterklasse der leeren Klasse object. In c2 kann auf m1, aber nicht auf a1 zugegriffen werden.
CLASS c1 DEFINITION ABSTRACT.
PROTECTED SECTION.
METHODS m1.
PRIVATE SECTION.
DATA a1 TYPE string VALUE `Attribute A1 of class C1`.
ENDCLASS.
CLASS c2 DEFINITION INHERITING FROM c1 FINAL.
PUBLIC SECTION.
METHODS m2.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
METHOD m1.
WRITE / a1.
ENDMETHOD.
ENDCLASS.
CLASS c2 IMPLEMENTATION.
METHOD m2.
m1( ).
ENDMETHOD.
ENDCLASS.
DATA oref TYPE REF TO c2.
START-OF-SELECTION.
CREATE OBJECT oref.
oref->m2( ).
Zusatz 5
... CREATE {PUBLIC|PROTECTED|PACKAGE|PRIVATE}
Wirkung
Der Zusatz CREATE legt fest, in welchem Kontext die Klasse class instanziert, d.h., wodie Anweisung CREATE OBJECT für diese Klasse ausgeführt, und in welchem Sichtbarkeitsbereich derInstanzkonstruktor der Klasse deklariert werden kann.
- Eine Klasse mit dem Zusatz CREATE PUBLIC kann überall dort instanziert werden, wo die Klasse im Rahmen desPaketkonzepts sichtbar ist.
- Eine Klasse mit dem Zusatz CREATE PROTECTED kann nur in Methoden ihrer von derPaketprüfungerlaubten Unterklassen und der Klasse selbst instanziert werden. Wenn eine Klasse mit dem Zusatz OPEN FOR PACKAGE definiert ist, kann sie zusätzlich von allen Repository-Objekten des Pakets der Klasse instanziert werden.
- Eine Klasse mit dem Zusatz CREATE PACKAGE kann nur innerhalb des Pakets der Klasse instanziertwerden. Voraussetzung für die Angabe von CREATE PACKAGE ist die gleichzeitige Verwendung des Zusatzes OPEN FOR PACKAGE.
- Eine Klasse mit dem Zusatz CREATE PRIVATE kann nur in Methoden der Klasse selbst instanziertwerden. Das bedeutet insbesondere, dass sie auch nicht als vererbter Bestandteil von Unterklassen instanziert werden kann.
Die Instanzierbarkeit einer Klasse hängt wie folgt von der direkten Oberklasse ab:
- Direkte Unterklassen von object oder einer Klasse mit dem Zusatz CREATE PUBLIC erben implizitden 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 CREATEPROTECTED. Explizit können alle CREATE-Zusätze angegeben werden, die dann den geerbten Zusatz überschreiben.
- Direkte Unterklassen einer Klasse mit dem Zusatz CREATE PACKAGE erben implizit den Zusatz CREATEPACKAGE. 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 keineFreundeder Klasse sind, erhalten implizit einen Zusatz CREATE NONE. Sie sind nicht instanzierbar undes dürfen keine expliziten CREATE-Zusätze angegeben werden. Direkte Unterklassen,die Freunde der Klasse sind, erben implizit den Zusatz CREATE PRIVATE. Explizit können bei Freunden privat instanzierbarer Oberklassen alle CREATE-Zusätze angegeben werden.
Die Anweisung METHODS constructor zur Deklaration des Instanzkonstruktors einer lokalen Klasse kann in allenSichtbarkeitsbereichenaufgeführt werden, die allgemeiner oder gleich der im CREATE-Zusatz angegebenen Instanzierbarkeitsind. Bei globalen Klassen kommt aus technischen Gründen nur eine Deklaration im öffentlichen Sichtbarkeitsbereich in Frage.
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.
Zusatz 6
... SHARED MEMORY ENABLED
Wirkung
Mit dem Zusatz SHARED MEMORY ENABLED wird eineShared-Memory-fähige Klasse definiert, deren Instanzen alsShared Objects imShared Memory abgelegt werden können.
Bei Unterklassen kann der Zusatz SHARED MEMORY ENABLED nur angegeben werden, wenn auch alle explizitenOberklassen 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 alsdie einer normalen Klasse. D.h. sie werden beim Laden der Klasse in den internen Modus eines Programmsdort angelegt. Wenn verschiedene Programme auf die gleichen Shared Objects zugreifen, sind die statischenAttribute der zugehörigen Klassen mehrfach und unabhängig voneinander in den Programmen vorhanden.
- Zurzeit können in einer Shared-Memory-fähigen Klasse noch keine Ereignisse deklariertoder 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 imClass Builder erzeugt werden. Dies gilt insbesondere für dieGebietswurzelklasse einesGebiets, die immer global ist.
- Der Zusatz sollte nur angegeben werden, wenn dies ohne Probleme möglich ist. Probleme im Zusammenhang mit demShared 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.
Zusatz 7
... OPEN FOR PACKAGE
Wirkung
Dieser Zusatz
- ist Voraussetzung für die Verwendung der Anweisung PACKAGESECTION im Deklarationsteil der Klasse, um einen Paket-Sichtbarkeitsbereich anzulegen,
- ist Voraussetzung für die Verwendung des Zusatzes CREATE PACKAGE,
- bewirkt, dass die Komponenten des geschützten Sichtbarkeitsbereichs für Repository Objekte des gleichen Pakets sichtbar werden.
Der Zusatz OPEN FOR PACKAGE wird nicht von Oberklassen an Unterklassen vererbt.
Hinweis
Der Zusatz READ-ONLYwird nur in Klassen mit dem Zusatz OPEN FOR PACKAGE für geschützte und Paket-sichtbareAttribute benötigt und kann auch nur in solchen Klassen für diese Sichtbarkeitsbereiche angegeben werden.
Zusatz 8
... [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 Unterklassender 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 diegeschütztenund privaten Komponenten der Klasse 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 undInterfaces der Klassenbibliothek zu Freunden gemacht werden, ist zu beachten, dass in diesen die lokalenKlassen 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 einesClass-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 vomClass 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 c2Freund der Klasse c1. Die Klasse c2 kann c1 instanzieren und auf ihre private Komponente a1 zugreifen.
INTERFACE i1.
...
ENDINTERFACE.
CLASS c1 DEFINITION CREATE PRIVATE FRIENDS i1.
PRIVATE SECTION.
DATA a1 TYPE c LENGTH 10 VALUE 'Class 1'.
ENDCLASS.
CLASS c2 DEFINITION.
PUBLIC SECTION.
INTERFACES i1.
METHODS m2.
ENDCLASS.
CLASS c2 IMPLEMENTATION.
METHOD m2.
DATA oref TYPE REF TO c1.
CREATE OBJECT oref.
WRITE oref->a1.
ENDMETHOD.
ENDCLASS.
Vendor Master (General Section) CPI1466 during Backup
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 21828 Date: 20120526 Time: 192314 triton ( 491 ms )






