Anfang des Inhaltsbereichs

Methoden deklarieren und aufrufen Dokument im Navigationsbaum lokalisieren

Dieser Abschnitt gibt einen Überblick über das Arbeiten mit Methoden in ABAP Objects. Für genauere Informationen zu den Anweisungen lesen Sie bitte die entsprechende Schlüsselwortdokumentation. Das Beispiel zu Methoden in ABAP Objects zeigt die Deklaration, Implementierung und den Aufruf von Methoden im Zusammenhang.

Methodendeklaration

Methoden werden im Deklarationsteil einer Klasse oder in einem Interface deklariert. Zum Deklarieren von Instanzmethoden dient die Anweisung

METHODS <meth> IMPORTING.. [VALUE(]<ii>[)] TYPE <type> [OPTIONAL]..
               EXPORTING.. [VALUE(]<ei>[)] TYPE <type> ..
               CHANGING.. [VALUE(]<ci>[)] TYPE <type> [OPTIONAL]..
               RETURNING VALUE(<r>)
               EXCEPTIONS.. <ei>..

mit ihren Zusätzen.

Zum Deklarieren von statischen Methoden dient die Anweisung

CLASS-METHODS <meth>...

Beide Anweisungen haben die gleiche Syntax.

Bei der Methodendeklaration wird die Parameterschnittstelle einer Methode deklariert. Hierzu dienen die Zusätze IMPORTING, EXPORTING, CHANGING und RETURNING. Mit diesen Zusätzen werden Eingabe-, Ausgabe-, Eingabe/Ausgabeparameter sowie ein Rückgabewert definiert. Gleichzeitig werden die Eigenschaften der Schnittstellenparameter festgelegt, also ob ein Schnittstellenparameter per Referenz oder Wert (VALUE) übergeben wird, wie ein Parameter typisiert ist (TYPE) und ob ein Eingabeparameter optional (OPTIONAL, DEFAULT) ist. Im Unterschied zu Funktionsbausteinen ist bei Methoden die Referenzübergabe die Voreinstellung. Um Parameter als Wert zu übergeben, muß dies durch die VALUE-Kennung festgelegt werden. Der Rückgabewert (RETURNING-Parameter) muß immer explizit als Wert übergeben werden. Er ist für Methoden geeignet, die genau einen Ausgabewert liefern sollen und schließt die gleichzeitige Verwendung von EXPORTING- und CHANGING-Parametern aus.

Wie bei Funktionsbausteinen ermöglichen es Ausnahmeparameter (EXCEPTIONS) dem Verwender, auf Ausnahmesituationen während der Ausführung der Methode zu reagieren.

Methodenimplementierung

Alle Methoden einer Klasse müssen im Implementierungsteil der Klasse zwischen den Anweisungen

METHOD <meth>.
 ...
ENDMETHOD.

implementiert werden. Bei der Implementierung einer ist keine Angabe von Schnittstellenparametern erforderlich, da diese ausschließlich bei der Deklaration der Methode festgelegt werden. Die Schnittstellenparameter einer Methoden werden innerhalb der Methodenimplementierung wie lokale Variablen behandelt. Zusätzlich zu den Schnittstellenparametern können in einer Methode weitere lokale Variablen mit der DATA-Anweisung deklariert werden.

Wie in Funktionsbausteinen können auch in Methoden die Anweisungen RAISE <exception> und MESSAGE RAISING verwendet werden, um Ausnahmesituationen zu behandeln.

Bei der Implementierung einer statische Methode ist zu beachten, daß sie nur mit den statischen Attributen ihrer Klasse arbeiten kann, während eine Instanzmethode auch Instanzattribute adressieren kann.

Statischer Methodenaufruf

Der Aufruf einer Methode erfolgt mit der Anweisung:

CALL METHOD <meth> EXPORTING... <ii> =.<f i>...
                   IMPORTING... <ei> =.<g i>...
                   CHANGING ... <ci> =.<f i>...
                   RECEIVING         r = h
                   EXCEPTIONS... <ei> = rc i...

Die Art der Adressierung der Methode <method> richtet sich danach, von wo aus welche Methode aufgerufen wird. Innerhalb einer Klasse können im Implementierungsteil die Methoden der gleichne Klasse direkt über ihren Namen <meth> aufgerufen werden:

CALL METHOD <meth>...

Von außerhalb der Klasse richtet sich die Aufrufbarkeit der Methode nach ihrer Sichtbarkeit, also in welchem Sichtbarkeitsbereich der Klasse ihre Deklaration stattfindet. Sichtbare Instanzmethoden werden von außen über

CALL METHOD <ref>-><meth>...

Aufgerufen. Dabei ist <ref> eine Referenzvariable, deren Wert auf eine Instanz der Klasse zeigt. Sichtbare statische Methoden werden von außen über

CALL METHOD <class>=><meth>...

aufgerufen, wobei <class> der Name der jeweiligen Klasse ist.

Beim Aufruf einer Methode müssen alle nicht optionalen Eingabeparameter mit dem EXPORTING- bzw. CHANGING-Zusatz der Anweisung CALL METHOD übergeben werden. Die Ausgabeparameter können, müssen aber nicht, mit dem IMPORTING- bzw. RECEIVINg-Zusatz übernommen werden. Ebenso entscheidet der Aufrufer, ob er in der Methode ausgelöste Ausnahmen mit dem EXCEPTIONS-Zusatz behandelt oder nicht. Die Behandlung der Ausnahmen ist empfohlen.

Die Übergabe bzw: Übernahme von Werten erfolgt wie bei Funktionsbausteinen durch die Syntax

... <Formalparameter> = <Aktualparameter>

hinter dem entsprechenden Zusatz. Die Schnittstellen- bzw. Formalparameter stehen immer links vom Gleichheitszeichen (=), die Aktualparameter stehen immer rechts. Das Gleichheitszeichen ist in diesem Zusammenhang also kein Zuweisungsoperator, sondern dient allein der Zuordnung zwischen Programmvariablen und der Methodenschnittstelle.

Falls die Schnittstelle einer Methode aus nur einem einzigen IMPORTING-Parameter besteht, dann, und nur dann, kann folgende Kurzform für den Methodenaufruf verwendet werden:

CALL METHOD <method>( f ).

Der Aktualparameter <f> wird an den Eingabeparameter der Methode übergeben.

Falls die Schnittstelle einer Methode nur aus IMPORTING-Parametern besteht, dann, und nur dann, kann diese Kurzform für den Methodenaufruf verwendet werden:

CALL METHOD <method>(....<ii> =.<f i>...).

Die Aktualparameter <f i > werden an die Formalparameter <i i > übergeben.

Dynamischer Methodenaufruf

Methoden können mit der in ABAP üblichen Klammersemantik dynamisch aufgerufen werden:

CALL METHOD ref->(<f>)

CALL METHOD class=>(<f>)
CALL METHOD (<c>)=><meth>
CALL METHOD (<c>)=>(<f>)

CALL METHOD (<f>)
CALL METHOD ME->(<f>)

Dabei sind <f> und <c> Felder, die den Namen der Methode <meth> oder der Klasse <class> enthalten. Anders als bei Unterprogrammen und Funktionsbausteinen ist es beim dynamischen Methodenaufrufen möglich, auch die Aktualparameter dynamisch zu übergeben. Hierzu dienen die Zusätze PARAMETER-TABLE und EXCEPTION-TABLE der Anweisung CALL METHOD:

CALL METHOD ... PARAMETER-TABLE <ptab>
                EXCEPTION-TABLE <etab>.

Die Parameter-Tabelle <ptab> muß eine Hash-Tabelle vom Tabellentyp ABAP_PARMBIND_TAB bzw. vom Zeilentyp ABAP_PARMBIND sein. Diese Typen sind im ABAP Dictionary definiert. Die Tabelle hat die drei Spalten:

Die Spalte NAME ist der eindeutige Tabellenschlüssel. Für jeden nichtoptionalen Parameter muß, für jeden optionalen Parameter kann genau eine Zeile der internen Tabelle gefüllt werden.

Die Art der Parameterübergabe ist in der Deklaration der aufgerufenen Methode für jeden Formalparameter festgelegt. Der Inhalt der Spalte KIND kann daher initial sein. Falls die Art der Parameterübergabe zur Laufzeit überprüft werden soll, kann der Spalte KIND eine der folgenden Konstanten aus der globalen Klasse CL_ABAP_OBJECTDESCR zugewiesen werden:

Die Bezeichnungen richten sich nach der Sicht des Aufrufers. Falls angegebene und tatsächliche Parameterart nicht übereinstimmen, wird der abfangbare Laufzeitfehler DYN_CALL_METH_PARAM_KIND erzeugt. Weiterhin können die Einträge in der Spalte KIND als zusätzlicher Schlüssel dienen, beispielsweise zum Auslesen sämtlicher importierter Werte nach dem Methodenaufruf. Für den Wert des Aktualparameters muß die Referenz VALUE der Tabellenzeile auf ein Datenobjekt zeigen, das den gewünschten Wert enthält. Hierfür kann der Befehl GET REFERENCE verwendet werden.

Die Ausnahme-Tabelle <etab> muß eine Hash-Tabelle vom Tabellentyp ABAP_EXCPBIND_TAB bzw. vom Zeilentyp ABAP_EXCPBIND sein. Diese Typen sind im ABAP Dictionary definiert. Die Tabelle hat die zwei Spalten

Die Spalte NAME ist der eindeutige Tabellenschlüssel. Für jede Ausnahme kann genau eine Zeile der internen Tabelle gefüllt werden. Dabei wird der Komponente VALUE der Zahlenwert zugewiesen, der nach Auslösen der Ausnahme in SY-SUBRC stehen soll.

Funktionale Methoden

Funktionale Methoden sind Methoden mit beliebig vielen IMPORTING-Parametern und einem RETURNING-Parameter. Funktionale Methoden können außer mit CALL METHOD durch folgende Ausdrücke an Operandenpositionen aufgerufen werden:

IMPORTING-Parameter

Ausdruck

keine

meth( )

ein

meth( f ) oder meth( p = f )

n

meth( p1 = f 1 ... p n = f n )

Diese Schreibweise ist zur Zeit möglich:

Die funktionale Methode wird anstelle eines Operanden eingetragen. Bei Ausführung der Anweisung wird die Methode aufgerufen und der zurückgegebene RETURNING-Parameter als Operand verwendet.

Ereignisbehandlermethoden

Ereignisbehandlermethoden sind spezielle Methoden, die nicht nur mit der Anweisung CALL METHOD aufgerufen werden können, sondern auch über Ereignisse auslösbar sind. Ereignisbehandlermethoden werden mit dem Zusatz

... FOR EVENT <evt> OF <cif>...

der Anweisungen METHODS bzw. CLASS-METHODS deklariert.

Für die Schnittstelle einer Ereignisbehandlermethode bestehen folgende Besonderheiten:

Mehr zu Ereignisbehandlermethoden und Ereignissen finden Sie unter Ereignisse auslösen und behandeln.

Konstruktoren

Konstruktoren sind spezielle Methoden, die nicht mit CALL METHOD aufgerufen werden können, sondern vom System automatisch ausgeführt werden, um einen definierten Anfangszustand für Objekte oder Klassen herzustellen. Wir unterscheiden zwischen Instanz- und statischen Konstruktoren. Konstruktoren sind Methoden mit vordefinierten Namen. Um sie zu verwenden, müssen sie explizit in der Klasse deklariert werden.

Der Instanzkonstruktor eine Klasse ist die vordefinierte Instanzmethode CONSTRUCTOR und wird im öffentlichen Bereich über

METHODS CONSTRUCTOR
        IMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL]..
        EXCEPTIONS.. <ei>.

deklariert und wie jede gewöhnliche Methode im Implementierungsteil implementiert. Das System ruft den Instanzkonstruktor für jede Instanz der Klasse genau einmal auf, und zwar direkt nach der vollständigen Erzeugung der Instanz mit der Anweisung CREATE OBJECT. Die Eingabeparameter und die Ausnahmen des Instanzkonstruktors werden bei der Erzeugung einer Instanz mit der Anweisung CREATE OBJECT mit deren Zusätzen EXPORTING und EXCEPTIONS übergeben bzw. behandelt.

Der statische Konstruktor einer Klasse ist die vordefinierte statische Methode CLASS_CONSTRUCTOR und wird im öffentlichen Bereich über

CLASS-METHODS CLASS_CONSTRUCTOR.

deklariert und wie jede gewöhnliche Methode im Implementierungsteil implementiert. Der statische Konstruktor hat keine Parameter. Das System ruft den statischen Konstruktor für jede Klasse genau einmal auf, und zwar vor dem ersten Zugriff auf die Klasse. Innerhalb des statischen Konstruktors kann deshalb nicht auf seine eigene Klasse zugegriffen werden.

Im Beispiel zu Methoden in ABAP Objects wird auch die Verwendung von Instanz- und statischen Konstruktoren gezeigt.

 

 

Ende des Inhaltsbereichs