Kitabı oku: «Schnelleinstieg in SAP ABAP Objects», sayfa 2
2.2 Attribute und Methoden
Die wichtigsten Komponenten einer Klasse sind Attribute und Methoden. Die Attribute stellen die Eigenschaften des Objekts dar, welches die Klasse repräsentiert. Um diese Attribute zu ermitteln und zu verarbeiten, werden die Methoden benötigt.
Es gibt sie als Instanzkomponenten und statische Komponenten.
Instanzkomponenten sind die eigentlichen Eigenschaften und Verarbeitungsmethoden des Objekts. Sie sind nur ansprechbar, nachdem aus der Klasse ein Objekt gebildet (instanziiert) wurde. Werden mehrere Objekte aus der Klasse instanziiert, hat jedes Objekt seine eigenen Werte in den Instanzattributen.
Statische Komponenten hingegen sind jederzeit verwendbar. Es müssen nicht erst Objekte aus der Klasse gebildet werden, um mit den statischen Komponenten arbeiten zu können. Statische Attribute haben nur einen Wert innerhalb der Klasse, auch wenn mehrere Objekte aus dieser instanziiert wurden. Sie sind nur notwendig, wenn alle Objekte auf den gleichen Wert zugreifen müssen, oder falls sie gebraucht werden, bevor mit der Klasse ein Objekt erzeugt wurde.
2.2.1 Attribute
Attribute können als Variablen oder Konstanten angelegt werden. Es wird empfohlen, variable Attribute immer im Sichtbarkeitsbereich »private« anzulegen, um den Objektschutzgedanken der Klasse zu erfüllen. Zur Verarbeitung benötigt man dann sogenannte SET- und GET-Methoden. Die SET-Methode wird verwendet, um das Attribut mit einem Wert zu füllen, und mit der GET-Methode lesen Sie den Wert des Attributs. Jede Klasse soll allein für die Versorgung ihrer eigenen Attribute zuständig sein.
Attribute nie »public« ohne »read-only«
In letzter Zeit mehren sich allerdings die Stimmen, die sagen, man soll variable Attribute aus Performancegründen als »public« und »read-only« deklarieren. In diesem Fall kann man sich die GET-Methoden ersparen. Die Klasse füllt dann das Attribut mit einem Wert, Aufrufer der Klasse können das Attribut aber nur lesen. Legen Sie nie ein variables Attribut »public« ohne »read-only« an!
Konstanten können »private«, »protected« oder »public« sein, weil sie nicht verändert werden können. Sie sind immer eine statische Komponente.
Lokale Klassen
Statische variable Attribute werden bei der Deklaration mit CLASS-DATA angelegt, Instanzattribute nur mit DATA.
CLASS lcl_airplane DEFINITION.
PUBLIC SECTION.
DATA gv_carrier_id TYPE s_carr_id READ-ONLY.
CONSTANTS gc_carrid_lufthansa
TYPE s_carr_id VALUE 'LH'.
PRIVATE SECTION.
DATA: gv_windows TYPE i,
gv_seats TYPE i.
CLASS-DATA gv_editor TYPE c LENGTH 20.
CONSTANTS gc_carrid_american
TYPE s_carr_id VALUE 'AA'.
ENDCLASS.
CLASS lcl_airplane IMPLEMENTATION.
ENDCLASS.
Listing 2.3
In Listing 2.3 sehen Sie das variable Instanzattribut GV_CARRIER_ID, welches als »public« und »read-only« definiert ist, sowie eine Konstante GC_CARRID_LUFTHANSA im Public-Bereich.
Im Private-Bereich befinden sich die variablen Instanzattribute GV_WINDOWS und GV_SEATS, das variable statische Attribut GV_EDITOR sowie die Konstante GC_CARRID_AMERICAN.
Globale Klassen
Um in einer globalen Klasse ein Attribut anzulegen, wechseln Sie auf die Registerkarte Attribute (siehe Abbildung 2.5).

Abbildung 2.5: Class Builder – Detailansicht Attribute
1. Rufen Sie die Klasse Z_CL_FLIGHT im Class Builder (Transaktion SE24) auf.
2. Wechseln Sie auf den Reiter Attribute.
3. Geben Sie im Feld Attribut den Namen GV_CONNID ein.
4. Wählen Sie als Art Instance Attribute (mit Wertehilfe auswählbar).
5. Wählen Sie die Sichtbarkeit Public (mit Wertehilfe auswählbar).
6. Setzen Sie den Haken bei Schreibg. (besser bekannt als »read-only«).
7. Das Feld Typisierung ist mit Type vorbelegt. Hier sind Werte wie in der DATA-Deklaration möglich.
8. Geben Sie als Bezugstyp ein Datenelement an, in diesem Fall S_CONN_ID.
9. Drücken Sie Enter. Dadurch wird das Feld Beschreibung vorbelegt.
10. Wenn Sie möchten, können Sie in das Feld Initialwert einen Startwert eingeben.
11. Geben Sie nun ein weiteres Attribut namens GC_CITY_LONDON ein.
12. Wählen Sie hierfür die Art Constant (mit Wertehilfe auswählbar).
13. Wählen Sie die Sichtbarkeit Public (mit Wertehilfe auswählbar).
14. Das Feld Typisierung ist auch hier mit Type vorbelegt.
15. Geben Sie als Bezugstyp ein Datenelement an, in diesem Fall S_FROM_CIT.
16. Drücken Sie Enter. Dadurch wird das Feld Beschreibung vorbelegt. Ergänzen Sie den Wert um den Zusatz London.
17. Geben Sie als Initialwert London ein.
18. Geben Sie ein Attribut namens GV_CARRID ein.
19. Wählen Sie als Art Instance attribute (mit Wertehilfe auswählbar).
20. Wählen Sie die Sichtbarkeit Private (mit Wertehilfe auswählbar).
21. Das Feld Typisierung ist mit Type vorbelegt.
22. Geben Sie als Bezugstyp ein Datenelement an, in diesem Fall S_CARR_ID.
23. Drücken Sie Enter. Dadurch wird das Feld Beschreibung vorbelegt.
24. Aktivieren Sie die Klasse, indem Sie auf den Aktivierungsbutton drücken.
Sie kommen auf einen Screen, wie Sie ihn in Abbildung 2.6 sehen.

Abbildung 2.6: Aktivierungsbild der Klasse
25. Drücken Sie den Button mit dem grünen Häkchen, um die Aktivierung zu bestätigen.
2.2.2 Methoden
Die Methoden ermitteln und verarbeiten die Werte der Attribute. Die Behandlung der Methoden ähnelt stark der Behandlung von Funktionsbausteinen. Methoden, die nur den Wert eines Attributs setzen, bezeichnet man auch als SET-Methode, und solche, die nur den Wert eines Attributs lesen, als GET-Methode.
Statische Methoden können nur auf statische Attribute zugreifen und ebenso nur statische Ereignisse auslösen. Demgegenüber sind Instanzmethoden in der Lage, auf alle Komponenten zugreifen.
Methoden können neben Ausnahmen folgende Parameter besitzen:
Import-Parameter
Export-Parameter
Changing-Parameter
Returning-Parameter.
Ein Returning-Parameter gibt wie ein Export-Parameter Werte an den Aufrufer heraus, hat aber den Vorteil, dass die Methode einfacher aufgerufen werden kann:
GV_VARIABLE = METHODE( ), wenn die Methode einen Returning-Parameter hat. In GV_VARIABLE steht dann der Wert, den der Returning-Parameter ausgegeben hat.
Eine Methode kann nur einen einzigen Returning-Parameter besitzen.
Parameter können auch als »optional« deklariert werden – so wie bei Funktionsbausteinen auch.
Normalerweise findet eine Referenzübergabe zwischen dem Aufrufer und der Methode statt. Die Parameter können aber entsprechend den Funktionsbausteinen auch als Wert-Übergabe definiert werden.
Vor Release 6.10 müssen Methoden wie folgt aufgerufen werden:
CALL METHOD methode
EXPORTING
parameter1 = variable1
parameter2 = variable2
IMPORTING
parameter3 = variable3
parameter4 = variable4
CHANGING
parameter5 = variable5
parameter6 = variable6
EXCEPTIONS
exception1 = 1
exception2 = 2.
Ab Release 6.10 können Methoden wie folgt aufgerufen werden:
methode(
EXPORTING
parameter1 = variable1
parameter2 = variable2
IMPORTING
parameter3 = variable3
parameter4 = variable4
CHANGING
parameter5 = variable5
parameter6 = variable6
EXCEPTIONS
exception1 = 1
exception2 = 2 ).
Wenn es nur Import-Parameter gibt, kann die Methode auch so aufgerufen werden:
methode(
parameter1 = variable1
parameter2 = variable2 ).
Gibt es nur einen Import-Parameter, ist die folgende Variante möglich:
methode( variable1 ).
Gibt es einen Returning-Parameter, sind diese Möglichkeiten gegeben:
gv_variable = methode(
EXPORTING
parameter1 = variable2
parameter2 = variable2 ).
oder
methode(
RECEIVING
parameter = gv_variable ).
oder
gv_variable = methode( ).
Vor ABAP-Release 7.4 kann eine Methode, die einen Returning-Parameter besitzt, nur weitere Importing-Parameter besitzen. Ab Release 7.4 ist es möglich, dass eine Methode mit Returning-Parameter auch Exporting- und Changing-Parameter besitzt.
Lokale Klassen
Statische Methoden werden bei der Deklaration mit CLASS-METHODS angelegt. Instanzmethoden werden mit METHODS deklariert.
CLASS lcl_airplane DEFINITION.
PUBLIC SECTION.
DATA gv_carrier_id TYPE s_carr_id READ-ONLY.
CONSTANTS gc_carrid_lufthansa
TYPE s_carr_id VALUE 'LH'.
METHODS: set_carrier_id,
set_windows
IMPORTING iv_windows TYPE i,
set_seats
IMPORTING iv_seats TYPE i,
get_windows
EXPORTING ev_windows TYPE i,
get_seats
EXPORTING ev_seats TYPE i,
compute_windows
IMPORTING iv_windows_basic TYPE i.
CLASS-METHODS compute_data
IMPORTING iv_number_1 TYPE i
iv_number_2 TYPE i
RETURNING value(rv_sum) TYPE i.
PRIVATE SECTION.
DATA: gv_windows TYPE i,
gv_seats TYPE i.
CLASS-DATA gv_editor TYPE c LENGTH 20.
CONSTANTS gc_carrid_american
TYPE s_carr_id VALUE 'AA'.
METHODS add_seats
IMPORTING iv_number_of_seats TYPE i.
ENDCLASS.
CLASS lcl_airplane IMPLEMENTATION.
METHOD set_carrier_id.
gv_carrier_id = gc_carrid_lufthansa.
ENDMETHOD.
METHOD set_windows.
gv_windows = iv_windows.
ENDMETHOD.
METHOD set_seats.
gv_seats = iv_seats.
add_seats( 3 ).
ENDMETHOD.
METHOD get_windows.
ev_windows = gv_windows.
ENDMETHOD.
METHOD get_seats.
ev_seats = gv_seats.
ENDMETHOD.
METHOD add_seats.
gv_seats = gv_seats + iv_number_of_seats.
ENDMETHOD.
METHOD compute_data.
rv_sum = iv_number_1 + iv_number_2.
ENDMETHOD.
METHOD compute_windows.
DATA lv_windows LIKE gv_windows.
lv_windows = iv_windows_basic + 4.
set_windows(
EXPORTING
iv_windows = lv_windows ).
ENDMETHOD.
ENDCLASS.
Listing 2.4
Über das in Listing 2.4 aufgeführte Coding werden im Public-Bereich neben den Attributen auch die Instanzmethoden SET_CARRIER_ID, SET_WINDOWS, SET_SEATS, GET_WINDOWS, GET_SEATS und COMPUTER_WINDOWS angelegt sowie eine statische Methode COMPUTE_DATA deklariert.
Im Private-Bereich gibt es neben den Attributen die Instanzmethode ADD_SEATS.
Im Implementierungsbereich werden die Methoden schließlich mit Leben gefüllt:
SET_CARRIER_ID füllt das Attribut GV_CARRIER_ID mit der Konstante GC_CARRID_LUFTHANSA.
SET_WINDOWS setzt das Attribut GV_WINDOWS mit dem Import-Parameter IV_WINDOWS.
SET_SEATS füllt das Attribut GV_SEATS mit dem Import-Parameter IV_SEATS. Außerdem wird die Methode ADD_SEATS gerufen und ihr die Zahl 3 zur Verarbeitung übergeben.
GET_WINDOWS liest das Attribut GV_WINDOWS aus und übergibt den Wert an den Export-Parameter EV_WINDOWS.
GET_SEATS liest den Wert des Attributs GV_SEATS und übergibt ihn an den Export-Parameter EV_SEATS.
ADD_SEATS berechnet den Wert des Attributs GV_SEATS.
COMPUTE_DATA ermittelt den Wert des Returning-Parameters RV_SUM aus zwei Import-Parametern.
COMPUTE_WINDWS hat ein lokales Attribut LV_WINDOWS, dessen Wert berechnet wird. Anschließend wird dieser Wert an die Methode SET_WINDOWS übergeben.
Globale Klassen
Um in einer globalen Klasse eine Methode anzulegen, wechseln Sie auf die Registerkarte Methoden.
1. Rufen Sie im Class Builder die Klasse Z_CL_FLIGHT auf und wechseln Sie auf den Reiter Methoden.
2. Geben Sie in Methode den Namen einer Methode ein, in diesem Fall GET_CARRID (siehe Methode in Abbildung 2.7).

Abbildung 2.7: Methoden der Klasse Z_CL_FLIGHT
3. Wählen Sie unter Art eine der Methodenarten: »Instance Method« oder »Static Method«, in diesem Fall Instance Method.
4. Wählen Sie im Feld Sichtbarkeit den Sichtbarkeitsbereich »public«, »protected« oder »private«, in diesem Fall Public.
5. Geben Sie in Beschreibung eine Bezeichnung für die Methode ein, in diesem Fall Get CARRID.
6. Legen Sie einen Parameter an, indem Sie den Cursor auf den Namen GET_CARRID setzen und auf den Button Parameter drücken.
7. Geben Sie im Feld Parameter den Namen des Parameters an, in diesem Fall RV_CARRID (siehe Abbildung 2.8).

Abbildung 2.8: Parameter für Methode GET_CARRID
8. Wählen Sie im Feld Art den Typ (»Importing«, »Exporting«, »Changing« oder »Returning«), in diesem Fall Returning.
9. Geben Sie im Feld Bezugstyp den Namen des Datenelements an, in diesem Fall S_CARR_ID.
10. Drücken Sie Enter. Dadurch wird auch das Feld Beschreibung gefüllt.
11. Drücken Sie den Button Methoden. So gelangen Sie zurück auf die Methodenübersicht.
12. Machen Sie einen Doppelklick auf den Namen der Methode GET_CARRID. Sie kommen jetzt in den Implementierungsteil der Methode und können die Methode zwischen dem Coding METHOD und ENDMETHOD mit Leben füllen.
13. Drücken Sie in der Drucktastenzeile auf Signatur.
Sie sehen jetzt wie in Abbildung 2.9 oberhalb des Codings die Parameter, die Sie für Ihre Methode angelegt haben, in diesem Fall nur einen Parameter. Als Signatur wird die Schnittstelle der Methode bezeichnet.

Abbildung 2.9: Signatur der Methode GET_CARRID
Ein erneutes Anklicken von Signatur blendet die Parameter wieder aus.
14. Schreiben Sie das folgende Coding in Ihre Methode:
METHOD get_carrid.
rv_carrid = gv_carrid.
ENDMETHOD.
Listing 2.5
Dadurch übergeben Sie den Inhalt des Attributs GV_CARRID an den Returning-Parameter RV_CARRID. Programmteile, die diese Methode aufrufen, können dadurch den Inhalt des Attributs GV_CARRID lesen.
Sie können in der Methode auch lokale Variablen definieren, um dort mit ihnen zu arbeiten.
Für das Attribut GV_CONNID benötigen wir keine GET-Methode, weil wir dieses Attribut als »public read-only« definiert haben.
15. Mit dem Button Zurück gelangen Sie wieder in die Klassenübersicht.
16. Legen Sie die weiteren Methoden DETERMINE_FLIGHT, COMPUTE_DATA und DETERMINE_DESTINATION wie in Abbildung 2.7 ersichtlich an.
17. Legen Sie die Methode SET_CARRID als Instanzmethode mit Sichtbarkeitsbereich »private« an.
18. Legen Sie für diese Methode einen Import-Parameter IV_CARRID mit Bezug zum Datenelement S_CARR_ID an.
19. Füllen Sie die Methode SET_CARRID mit folgendem Coding:
METHOD set_carrid.
gv_carrid = iv_carrid.
ENDMETHOD.
Listing 2.6
20. Legen Sie die Methode SET_CONNID als Instanzmethode mit Sichtbarkeitsbereich »private« an.
21. Legen Sie für diese Methode einen Import-Parameter IV_CONNID mit Bezug zum Datenelement S_CONN_ID an.
22. Füllen Sie die Methode SET_CONNID mit folgendem Coding:
METHOD set_connid.
gv_connid = iv_connid.
ENDMETHOD.
Listing 2.7
23. Aktivieren Sie die Klasse.
Wenn Sie sich im Codingteil einer Methode befinden, können Sie jederzeit über das Menü Springen • Klassendefinition in Ihre Klassendefinition und über das Menü Springen • Methodendefinition in Ihre Methodendefinition gelangen.
2.3 Eigenständige Datentypen einer Klasse
Wenn die Datentypen oder Datenelemente, die im SAP-System vorhanden sind, nicht ausreichen, können Sie in der Klasse auch eigenständige Datentypen erstellen. Diese gelten dann als statische Komponenten.
Sie haben zum einen die Möglichkeit, in der Methode lokale Datentypen, die nur für die Methode gelten, oder in der Klasse globale Datentypen anzulegen, die für die gesamte Klasse gelten. Wenn Sie den Datentyp als »public« definieren, können auch alle Programmteile, die die Klasse verwenden, auf den Datentyp zugreifen.
Zum Anlegen eines klasseneigenen Datentyps wechseln Sie auf die Registerkarte Typen der globalen Klasse.
1. Rufen Sie die Klasse Z_CL_FLIGHT auf und wechseln Sie auf den Reiter Typen.
2. Geben Sie im Feld Typ den Namen des neuen Datentyps an, in diesem Fall TY_AIRPLANE (gemäß Abbildung 2.10).

Abbildung 2.10: Class Builder – Ansicht eigene Datentypen
3. Wählen Sie unter Sichtbarkeit den Sichtbarkeitsbereich des Datentyps an, in diesem Fall Private.
4. Wenn Sie sich auf ein im SAP-System vorhandenes Datenobjekt beziehen wollen, wählen Sie für Typisierung Type. Für den Bezug auf eine bestehende Klasse wählen Sie hier »TYPE REF TO«. Geben Sie im Feld Bezugstyp das SAP-Objekt an. Meist aber werden Sie einen neuen Datentyp, z.B. eine neue Struktur, benötigen. Wählen Sie dazu den Pfeilbutton zwischen Bezugstyp und Beschreibung.
Wenn Sie sich für den PFEILBUTTON entscheiden, kommen Sie in den Editor für den Sichtbarkeitsbereich, so wie Sie es in Abbildung 2.11 sehen, und können dort als TYPES einen entsprechenden Datentyp anlegen.

Abbildung 2.11: Anlegen einer Struktur für eigene Datentypen
5. Mit dem Button Zurück kommen Sie wieder in die Klassenübersicht.
6. Geben Sie im Feld Beschreibung eine Erläuterung zum Datentyp an.
In der Klasse können Sie jetzt Attribute anlegen, deren Typ sich auf diesen angelegten Datentyp bezieht.
7. Aktivieren Sie die Klasse.
2.4 Konstruktoren
Konstruktoren sind eine besondere Form von Methoden. Sie sind dazu gedacht, die Attribute der Klasse in einen Anfangszustand zu versetzen, damit mit Ihnen gearbeitet werden kann. Sie füllen erstmalig die Attribute des Objekts, damit sie von den Methoden weiter verarbeitet werden können.
Konstruktoren lassen sich nicht über einen Methodenaufruf starten, sondern werden vom Programm automatisch aufgerufen.
Es gibt den CONSTRUCTOR, eine Instanzmethode, die bei der Erzeugung eines Objekts der Klasse genau einmal automatisch aufgerufen wird, und es gibt den CLASS_CONSTRUCTOR, eine statische Methode, die automatisch einmal vor dem ersten Zugriff des Programms auf die Klasse ausgeführt wird. Die Namen CONSTRUCTOR bzw. CLASS_CONSTRUCTOR sind fest vorgegeben.
Ein CONSTRUCTOR kann nur Import-Parameter besitzen und kann Ausnahmen erzeugen.
Ein CLASS_CONSTRUCTOR hat weder Parameter, noch kann er Ausnahmen erzeugen.
Lokale Klassen
CLASS lcl_airplane DEFINITION.
PUBLIC SECTION.
DATA gv_carrier_id TYPE s_carr_id READ-ONLY.
CONSTANTS gc_carrid_lufthansa
TYPE s_carr_id VALUE 'LH'.
METHODS: constructor
IMPORTING
iv_windows TYPE i
iv_seats TYPE i,
set_carrier_id,
set_windows
IMPORTING iv_windows TYPE i,
set_seats
IMPORTING iv_seats TYPE i,
get_windows
EXPORTING ev_windows TYPE i,
get_seats
EXPORTING ev_seats TYPE i,
compute_windows
IMPORTING iv_windows_basic TYPE i.
CLASS-METHODS compute_data
IMPORTING iv_number_1 TYPE i
iv_number_2 TYPE i
RETURNING VALUE(rv_sum) TYPE i.
PRIVATE SECTION.
DATA: gv_windows TYPE i,
gv_seats TYPE i.
CLASS-DATA gv_editor TYPE c LENGTH 20.
CONSTANTS gc_carrid_american
TYPE s_carr_id VALUE 'AA'.
METHODS add_seats
IMPORTING iv_number_of_seats TYPE i.
ENDCLASS.
CLASS lcl_airplane IMPLEMENTATION.
METHOD constructor.
set_carrier_id( ).
set_windows( iv_windows ).
set_seats( iv_seats ).
ENDMETHOD.
METHOD set_carrier_id.
gv_carrier_id = gc_carrid_lufthansa.
ENDMETHOD.
METHOD set_windows.
gv_windows = iv_windows.
ENDMETHOD.
METHOD set_seats.
gv_seats = iv_seats.
add_seats( 3 ).
ENDMETHOD.
METHOD get_windows.
ev_windows = gv_windows.
ENDMETHOD.
METHOD get_seats.
ev_seats = gv_seats.
ENDMETHOD.
METHOD add_seats.
gv_seats = gv_seats + iv_number_of_seats.
ENDMETHOD.
METHOD compute_data.
rv_sum = iv_number_1 + iv_number_2.
ENDMETHOD.
METHOD compute_windows.
DATA lv_windows LIKE gv_windows.
lv_windows = iv_windows_basic + 4.
set_windows(
EXPORTING
iv_windows = lv_windows ).
ENDMETHOD.
ENDCLASS.
Listing 2.8
In Listing 2.8 wurde das Coding der lokalen Klasse LCL_AIRPLANE um die Definition und Implementierung des CONSTRUCTORS ergänzt. Der CONSTRUCTOR besitzt zwei Parameter: IV_WINDOWS und IV_SEATS. Denken Sie bitte daran, dass deren Type I auch durch Datenelemente ersetzt werden kann.
In der Methode CONSTRUCTOR werden drei Methoden aufgerufen, um die Attribute mit Werten zu füllen: SET_CARRIER_ID, SET_WINDOWS und SET_SEATS.
Einen CLASS_CONSTRUCTOR können Sie anlegen, indem Sie ihn im Definitionsteil mit CLASS-METHODS CLASS_CONSTRUCTOR anlegen und anschließend im Implementierungsteil mit Leben füllen.
Ücretsiz ön izlemeyi tamamladınız.