Ansicht
Dokumentation

ABENINTERFACE_COMPOSITION - INTERFACE COMPOSITION

ABENINTERFACE_COMPOSITION - INTERFACE COMPOSITION

General Data in Customer Master   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Schachtelung von Interfaces

Interfaces von ABAP-Objekten können verschachtelt werden. Ein Interface kann ein oder mehrere Interfaces als Komponenten enthalten, die selbst wieder Interfaces enthalten können. Ein Interface, das ein anderes Interface enthält, wird geschachteltes oder zusammengesetztes Interface genannt. Ein Interface, das in einem Interface geschachtelt ist, heißt Komponenten-Interface. Ein Interface, das keine geschachtelten Interfaces enthält heißt elementares Interface.

Sämtliche Interfacekomponenten eines geschachtelten Interfaces liegen auf einer Ebene. Wenn ein geschachteltes Interface i3 Interface-Komponenten i2 enthält, die selber geschachtelt sind, werden deren Interface-Komponenten i1 zu Interface-Komponenten von i3. Dabei enthält ein geschachteltes Interface jede Interfacekomponente genau einmal. Auch wenn ein Komponenten-Interface ein weiteres mal als Komponente eines anderen Komponenten-Interfaces eingebaut wird, ist es trotzdem nur ein einziges mal vorhanden.

Zur Schachtelung von Interfaces dient die Anweisung INTERFACES innerhalb einer Interface-Definition:

INTERFACE i3.
  INTERFACES: i1, i2 ...
ENDINTERFACE.

Hier besteht das Interface i3 aus seinen Komponenten und aus den Interfaces i1 und i2. Die Komponenten der Komponenten-Interfaces sind im geschachtelten Interface über den Interfacekomponenten-Selektor (~) sichtbar. Innerhalb obiger Definition von i3 sind also Ausdrücke wie i1~comp oder i2~comp möglich. Mit Hilfe der ALIASES-Anweisung können aber auch eigene Namen definiert werden.

Verwendung von Aliasnamen

Innerhalb von Interface-Definitionen können mit der ALIASES-Anweisung Aliasnamen den Komponenten von Komponenten-Interfaces zugewiesen werden und dadurch auch solche, die mehr als eine Ebene tief geschachtelt sind, innerhalb der Interface-Definition sichtbar gemacht werden:

INTERFACE i2.
  INTERFACES i1.
  ALIASES alias21 FOR i1~comp1.
ENDINTERFACE.

INTERFACE i3.
  INTERFACES i2.
  ALIASES alias31 FOR i2~alias21.
  ALIASES alias32 FOR i2~comp2.
ENDINTERFACE.

Zugriff über Interfacereferenzvariablen

Referenzvariablen, die mit Bezug auf ein geschachteltes Interface typisiert sind, können Referenzvariablen zugewiesen werden, die mit Bezug auf eines der Komponenten-Interfaces typisiert sind (Upcast). Über letztere können die Komponenten der Komponenten-Interfaces angesprochen werden. Der umgekehrte Fall kann statisch nicht überprüft werden und muss mit dem Casting-Operator (?= oder CAST) erfolgen (Downcast).

INTERFACE i1.
  DATA comp1.
ENDINTERFACE.

INTERFACE i2.
  DATA comp2.
  INTERFACES i1.
ENDINTERFACE.

INTERFACE i3.
  INTERFACES i2.
ENDINTERFACE.

DATA: iref1 TYPE REF TO i1,
      iref2 TYPE REF TO i2,
      iref3 TYPE REF TO i3.

iref2 = iref3.
iref1 = iref2.

* empfohlener Zugriff:

... iref1->comp1 ...
... iref2->comp2 ...

* nicht empfohlener Zugriff:

... iref2->i1~comp1 ...
... iref3->i2~comp2 ...

Implementierung geschachtelter Interfaces in Klassen.

Wenn ein geschachteltes Interface in einer Klasse implementiert wird, werden sämtliche beteiligten Interfaces unabhängig von ihrer Schachtelungshierarchie gleichberechtigt nebeneinander in der Klasse implementiert und die Klasse muss jede Methode nur einmal implementieren.

INTERFACE i1.
  DATA comp1.
  METHODS meth1.
ENDINTERFACE.

INTERFACE i2.
  DATA comp2.
  INTERFACES i1.
ENDINTERFACE.

INTERFACE i3.
  DATA comp3.
  INTERFACES i2.
ENDINTERFACE.

CLASS class DEFINITION.
  PUBLIC SECTION.
    INTERFACES i3.
ENDCLASS.

CLASS class IMPLEMENTATION.
  METHOD i1~meth.
    ...
  ENDMETHOD.
ENDCLASS.

DATA cref TYPE REF TO class.
DATA iref1 TYPE REF TO i1.
DATA iref2 TYPE REF TO i2.
DATA iref3 TYPE REF TO i3.

iref1 = iref2 = iref3 = cref.

* empfohlener Zugriff:

... iref1->comp1 ...
... iref2->comp2 ...
... iref3->comp3 ...

* nicht empfohlener Zugriff:

... cref->i1~comp1 ...
... cref->i2~comp2 ...
... cref->i3~comp3 ...

... iref3->i1~comp1 ...
... iref3->i2~comp2 ...
... iref2->i1~comp1 ...

Zuweisungen über Upcasts sind immer möglich. Klassenreferenzvariablen, für Klassen, die ein geschachteltes Interface implementieren, können allen Interfacereferenzvariablen zugewiesen werden, die mit Bezug auf eine zugehörige Interfacekomponente typisiert sind. Die Interfacereferenzvariablen kennen in der Klasse jeweils nur die Komponenten ihres Interfaces. Entsprechendes gilt für die Zuweisung zwischen Interfacereferenzvariablen. Komponentenzugriffe über den Interfacekomponenten-Selektor sind möglich, aber nicht empfohlen. Geschachtelte Ausdrücke wie cref->i3~i2~comp2 oder cref->i3~i2~i3~comp3 sind nicht möglich.






General Data in Customer Master   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 7026 Date: 20240523 Time: 163401     sap01-206 ( 105 ms )