Hallo,
ich bin relativ neu in der Objektorentierung und habe noch Verständnisprobleme was Konstruktoren etc. betrifft.
Meine Frage hier an einem konkreten Bsp.:
Ich soll eine Klasse für die Datei-Verwaltung anlegen. Also sprich, Dateien sollen geändert, gelöscht, angezeigt usw. werden.
--> in der Klasse habe ich ein einziges Attribut mv_pathname.
Später wird eine Web Dynpro Anwendung gebaut, bei der ein Input-Field für die Eingabe der Datei existiert.
In einem anderen Paket habe ich versucht mir ein Vorgehen abzukupfern. Das Ende vom Lied ist: jetzt bin ich nur noch mehr verwirrt.
Hier läuft nämlich die Instanzierung innerhalb der selben Klasse folgendermaßen ab:
Code: Alles auswählen.
METHOD get_instance.
*Importing Parameter iv_bsp_id.
*Returning Paramter: ro_bsp type ref to zcl_bsp.
DATA lo_bsp TYPE REF TO zcl_bsp.
DATA ls_bsp TYPE z_bsp.
IF mt_bsp IS INITIAL.
zcl_fsz_bsp=>load_auftrag( ).
ENDIF.
LOOP AT mt_bsp INTO lo_bsp.
IF lo_bsp->get_bsp_id( ) = iv_bsp_id.
ro_bsp = lo_bsp.
EXIT.
ENDIF.
ENDLOOP.
ENDMETHOD.
Code: Alles auswählen.
METHOD load_bsp.
DATA lo_bsp TYPE REF TO zcl_bsp.
DATA lt_bsp TYPE STANDARD TABLE OF z_bsp.
DATA ls_bsp LIKE LINE OF lt_bsp.
CLEAR mt_bsp.
SELECT * FROM z_bsp INTO CORRESPONDING FIELDS OF TABLE lt_bsp.
LOOP AT lt_bsp INTO ls_bsp.
CREATE OBJECT lo_bsp.
MOVE-CORRESPONDING ls_bsp TO lo_bsp->ms_bsp.
INSERT lo_bsp INTO TABLE mt_bsp.
ENDLOOP.
ENDMETHOD.
Für meine File-Klasse wollte ich diese Art von Instanzierung auch verwenden. Aber
a) habe ich nicht mehrere Zeilen aus einer Tabelle, um mehrere Objekte zu erzeugen
b) ist mir dann eingefallen, hmm ich könnte ja auch einen Konstruktor verwenden. Also das heißt, die der Befehl CREATE OBJECT wird nicht unbedingt innerhalb der Klasse aufgerufen, sondern irgendwo außerhalb. Und gerade hier würde sich ein Konstruktor ja mehr als anbieten, soweit ich die Theorie richtig verstanden habe.
also bspw. in dieser Art und Weise
Code: Alles auswählen.
REPORT test.
data: lo_bsp type ref to zcl_bsp.
create object lo_bsp.
So, nach diesen zwei Möglichkeiten, hat mir ein Kollege noch eine dritte Variante genannt.
Und zwar: weder das eine, noch das andere zu benutzen, sondern einfach nur mit get( )- und set( )-Methoden zu arbeiten.
Vllt kann sich der eine oder andere von euch nun vorstellen, dass bei mir nur noch reinste Verwirrung herrscht.
Wäre irgendjemand von euch da draußen so freundlich und würde die Verwirrungen versuchen zu entspinnen?
Grüße,
neon_orange
PS: Man sollte evtl noch erwähnen, dass der Pfadname angeblich binär eingelesen wird und in xstring umgewandelt werden soll. Dies soll evtl. im Konstruktor passieren, allerdings, wie soll das gemacht werden, wenn ich nicht mal einen Returning Parameter im Konstruktor zur verfügung habe???