Methoden
Methoden sind in der Klasse deklariert. Während Attribute Eigenschaften der Klasse sind, beschreiben Methoden ein Verhalten der Klasse.
Es kann unterschieden werden in:
- Instanzmethoden
- statische Methoden
Instanzmethoden
Eine Klasse ist sozusagen der Bauplan von einer Sache. Eine Referenzvariable in Bezug auf diese Klasse wird erzeugt durch den Befehl
Data: ref_var type ref of classname.
Ein Objekt/Instanz in Bezug auf diese Klasse, wo auch physischer Hauptspeicher zugewiesen wird, bewirkt folgender Befehl
Create object ref_var.
Im neuen ABAP ab 7.40 ist auch folgendfe Syntax möglich, siehe Instanz Klasse erzeugen mit NEW im neuen ABAP
DATA(lo_class) = NEW lcl_classe( ).
Wenn die Referenzvariable bereits angelegt wurde, wird die Klassenreferenz durch "#" ersetzt.
Data: lo_class type ref to lcl_class. DATA(lo_class) = NEW #( ).
Diese Instanz der Klasse kann nun die Instanzmethoden der Klasse ausführen
call method ref_var->methodenname exporting .. importing ..
Statische Methoden
Eine statische Methode ist eine Funktion, die von außerhalb der Klasse direkt aufgerufen werden kann. Bei statischen Methoden wird das Zeichen "=>" zwischen Klasse und Methodenname benutzt.
Es muss kein Objekt in Bezug auf eine Klasse im Programm erzeugt werden.
data: lv_url_string type string. lv_url_string = 'www.eberstein.de'. * Startet Browser mit angegebener Adresse call method cl_gui_frontend_services=>execute exporting document = lv_url_string exceptions others = 1.
Methoden innerhalb der Klasse (Eigenreferenz ME->)
Methoden innerhalb einer Klasse lassen sich über das Eigenreferenz ME ansprechen. Diese Methoden sollten mit der Sichtbarkeit PRIVATE deklariert werden, sofern diese Methoden lediglich innerhalb der Klasse genutzt werden. So ist auf den ersten Blick für den Programmierer der Unterschied ersichtlich zwischen den Public-Methoden (Schnittstelle der Klasse nach außen) und den internen Methoden der Klasse.
CALL METHOD me->get_stock_per_posting_date EXPORTING budat = i_budat matnr = ls_result-matnr werks = ls_result-werks lgort = ls_result-lgort charg = ls_result-charg mtart = ls_result-mtart meins = ls_result-meins IMPORTING gbest = ls_result-gbest.
Methoden umbenennen
- Es ist innerhalb einer Klasse extrem wichtig klare Methodennamen zu vergeben. Speziell wenn eine Klasse wächst und viele Methoden beinhaltet, geht sehr schnell die Übersicht verloren, wenn der Methodenname nicht eingängig ist.
- Solange eine Methode noch nicht verwendet wird, ist es unkompliziert. Man kann man die Methode umbenennen und es sind keine Probleme zu erwarten.
- Wird eine Methode von einem oder mehreren Programmen verwendet, muss man wesentlich vorsichtiger sein. Es wird bei einer Umbenennung einer Methode nicht geprüft, ob eine Methode in einem Programm verwendet wird. Benennt man nun die Methode um, ohne in der Verwendern den Methodennamen umzubenennen, wird das verwendende Programm einen Syntaxfehler haben. Das kann im schlimmsten Fall erst im Produktivsystem auffallen.
- Es ist daher empfehlenswert zunächst ein Verwendungsnachweis auf eine Methode zu machen. Wird sie nicht verwendet, kann man sie ohne Probleme umbenennen. Wird sie verwendet, sollte die Methode zuerst kopiert werden. Es muss dann auch geprüft werden, ob man in den verwendenden Programmen den Aufrufer ändern kann und es durchtransportieren bis ins Produktiv. Es kann sein, dass aufgrund anderer Entwicklungen das Programm noch nicht ins Produktiv transportiert werden kann. Dann sollte man einen Kommentar an diese Methode schreiben und den Aufrufer ändern, aber sich auch bewusst sein, dass im Produktiv noch der alte Methodennamen steht. Dann muss in der Klasse der alte kopierte Methodenname zunächst belassen werden. Aber es sollte dann auch zeitnah versucht werden alle Verwender ins Produktiv zu bekommen, um die alte Methode löschen zu können.
- Beim Verwendungsnachweis ist zu beachten, dass der Methodenaufruf dynamisch erfolgen kann und dies würde der Verwendungsnachweis nicht erfassen. Hier könnte man zusätzlich noch mit dem Programm RS_ABAP_SOURCE_SCAN nach dem Methodennamen suchen im Kundennamensraum. Das ist dann immer noch nicht 100% sicher, aber verringert doch die Wahrscheinlich einer nicht gefundenen Verwendung deutlich.
- Aufgrund dieser Probleme sollte bei der Anlage einer Methode möglichst gleich ein adäquater Name gefunden werden, um spätere Probleme zu vermeiden.
Literatur
- ABAP Objects; Frank Wolf, S. 24f.