Ansicht
Dokumentation

ABENLOCAL_TYPE_GLOB_CLASS_GUIDL - LOCAL TYPE GLOB CLASS GUIDL

ABENLOCAL_TYPE_GLOB_CLASS_GUIDL - LOCAL TYPE GLOB CLASS GUIDL

Addresses (Business Address Services)   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Lokale Typen für globale Klassen

Innerhalb von Class-Pools können wie in fast jedem anderen ABAP-Programm Datentypen, lokale Interfaces und lokale Klassen definiert werden, um die Implementierung der globalen Klasse besser zu strukturieren. Technisch gesehen bilden diese optionalen Deklarationsteile gemeinsam mit dem Deklarationsteil der globalen Klasse den globalen Deklarationsteil des Class-Pools.

Diese lokalen Deklarationen eines Class-Pools sind außerhalb des Class-Pools unsichtbar und können daher nur wie folgt verwendet werden:

  • im privaten Sichtbarkeitsbereich (PRIVATE SECTION) der Deklarationen der globalen Klasse
  • innerhalb der Methodenimplementierungen der globalen Klasse

Diese beiden Verwendungsarten haben unterschiedliche technische Sichtbarkeitsanforderungen, da Freunde einer globalen Klasse Zugriff auf ihren privaten Sichtbarkeitsbereich haben. In der PRIVATE SECTION verwendete lokale Typdeklarationen müssen also etwaigen Freunden der Klasse zugänglich gemacht werden, während solche Typdeklarationen; die ausschließlich innerhalb der Methodenimplementierungen verwendet werden, für andere Klassen vollkommen bedeutungslos sind.

Lokale Klassen bestehen im Allgemeinen neben ihrem Deklarationsteil auch aus zugehörigen Methodenimplementierungen. Diese sind auch für Freunde der globalen Klasse unsichtbar und haben damit technisch die gleichen Sichtbarkeitsanforderungen wie lokale Typdeklarationen, die nur innerhalb der Implementierung Verwendung finden.

Lokale Datentypen, Interfaces und Klassen innerhalb eines Class-Pools werden in speziell dafür vorgesehenen Include-Programmen ablegt. Hierbei wird zwischen den folgenden beiden Bereichen unterschieden:

  • klassenrelevante lokale Definitionen
  • Lokale Definitionen und Implementierungen (Lokale Typen in ADT).

Diese Bereiche entsprechen den unterschiedlichen technischen Sichtbarkeitsanforderungen. Die internen Namen der Include-Programme enden mit CCDEF bzw. CCIMP, weshalb auch von den CCDEF- bzw. CCIMP-Includes gesprochen wird.

Lokale Deklarationen geeignet platzieren

Platzieren Sie die lokalen Deklarationen eines Class-Pools abhängig von den Anforderungen an geeigneter Stelle. Typen, die nur innerhalb der Implementierung der globalen Klasse verwendet werden, gehören zu einer anderen Stelle als Typen, die auch in der PRIVATE SECTION der globalen Klasse angesprochen werden.

Aus Sicht eines Class-Pools können alle lokalen Typdefinitionen und zugehörige Implementierungen lokaler Klassen im CCDEF-Include abgelegt werden. Ein solches Vorgehen ist aber aus Sicht der Abhängigkeitsverwaltung ungünstig. Nur bei Änderungen an den lokalen Typdeklarationen eines Class-Pools, die in der PRIVATE SECTION der globalen Klasse verwendet werden, müssen abhängige Klassen (Unterklassen und Freunde der globalen Klasse) invalidiert und neu generiert werden. Technisch erfolgt diese Invalidierung aber bei allen Änderungen im CCDEF-Include. Aus diesem Grund gibt es das zusätzliche CCIMP-Include, das für lokale Typdeklarationen, die lediglich innerhalb der Klassenimplementierung der globalen Klasse Verwendung finden, sowie für den Implementierungsteil lokaler Klassen vorgesehen ist. Bei Änderungen in diesem Bereich werden abhängige Klassen nicht invalidiert.

Um nach Änderungen an einer globalen Klasse unnötige Neugenerierungen anderer Klassen zu vermeiden, die auf ungewollten technischen Abhängigkeitsbeziehungen beruhen, müssen daher die sogenannten klassenlokalen Typen im Class Pool jeweils an den geeigneten Stellen definiert werden:

  • Im CCIMP-Include sollen alle Typen deklariert werden, die nur innerhalb der Methodenimplementierungen der globalen Klasse verwendet werden. Hier soll auch die Implementierung lokaler Klassen erfolgen.
  • Im CCDEF-Include sollen nur die Typen definiert werden, auf die auch in der PRIVATE SECTION Bezug genommen werden kann.

Deklaration und Implementierung einer lokalen Klasse sollen also nur dann auf das CCDEF-Include und das CCIMP-Include aufgeteilt werden, wenn auf sie in der PRIVATE SECTION Bezug genommen werden soll. Wird die lokale Klasse hingegen ausschließlich innerhalb der Implementierung der globalen Klasse verwendet, sollen sowohl Deklaration als auch Implementierung im CCIMP-Include erfolgen.

Hinweis

Die hier aufgeführte Regel spezialisiert die allgemeine Regel globale Deklarationen an zentraler Stelle vorzunehmen in Hinsicht auf Class-Pools. Diese sind insbesondere auf den externen Aufruf der Methoden ihrer jeweiligen globalen Klasse ausgerichtet und daher in besonderem Maße in ein Abhängigkeitsgeflecht eingebunden. Aus diesem Grund kann die gerade erwähnte Regel hier nicht in voller Strenge gelten.

Hinweis

Testklassen sollten ausschließlich in Test-Includes angelegt werden.






CL_GUI_FRONTEND_SERVICES - Frontend Services   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 6829 Date: 20240523 Time: 103537     sap01-206 ( 125 ms )