Konstruktor, getter setter und andere Spässchen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Konstruktor, getter setter und andere Spässchen

Beitrag von neon_orange (ForumUser / 1 / 0 / 0 ) »
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.

Code: Alles auswählen.

mv_pathname = iv_pathname.
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???

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Konstruktor, getter setter und andere Spässchen

Beitrag von a-dead-trousers (Top Expert / 4457 / 227 / 1198 ) »
hi!

Bei deinem Beispielcoding handelt es sich um eine sog. statische Factory-Methode. Die statischen Methoden gehören nicht zu einer Instanz sondern werden von allen Instanzen gleichermaßen verwendet. Man kann darin z.B. nicht auf Instanzattribute über "me->" zugreifen, sondern benötigt dafür ein Objekt der Klasse.
Diese Vorgehensweise ist dann interessant, wenn man zwar mehrere Objekte anlegen möchte, aber z.b. alle Instanzen zusätzlich noch zentral verwalten möchte.
So kann man verhindern, dass ein Objekt mit denselben Daten unnötigerweise doppelt Instanziert wird.
Auch wenn man vor dem Anlegen eines Objektes immer die gleichen Schritte durchlaufen muss, diese aber nicht im Konstruktor erledigen kann oder möchte, ist eine Factorymethode empfehlenswert.

Das Ergebnis eines Konstruktors (Return-Parameter) ist immer das erstellte Objekt.

Was dein Kollege mit dem GET und SET gemeint hat, kann ich nur raten, aber ich vermute, dass nur eine Instanz angelegt werden soll und die Attribute (mv_pathname) über Set und Get geändert werden sollen.
Also der Konstruktor hat keinen Parameter und erst nachdem das SET mit einem Dateinamen erfolgt ist, funktionieren auch die weiteren Methoden (z.B. ändern, löschen usw.)
Will man eine andere Datei bearbeiten muss man zuerst wieder das SET aufrufen.

Ich würde dir aber raten (im Sinne des OO Gedankens) für jede Datei eine Instanz anzulegen.
Solltest du mehrere Instanzen auf einmal anlegen müssen (Liste von Dateinamen) kannst du dafür eine Factory-Methode schreiben.

Was das Umwandeln von XSTRING in STRING angeht, gibts hier im Forum schon genug Beispiele (auch von mir). Einfach suchen.

lg ADT

P.S.: Wenn du "neu" bei OO bist, würde ich deinen Chef um eine Einschulung bitten. Muss jetzt nicht unbedingt eine ABAP spezifische Schulung sein, denn OO gibt es mittlerweile in fast jeder Programmiersprache und die grundlegenden Konzepte unterscheiden sich kaum voneinander.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2287
Views
GETTER-Methode mal anders
von ewx » 26.01.2016 09:04 • Verfasst in Tips + Tricks & FAQs
1
Antw.
1028
Views
Aufruf redifinierter Methode im Super Konstruktor
von nickname8 » 07.03.2021 13:31 • Verfasst in ABAP Objects®

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

IF mit AND und OR
vor 2 Tagen von GastX 6 / 2879
Meine Inbox
vor 2 Tagen von Rabea1103 1 / 1472
PCL2 Cluster auslesen
vor 4 Tagen von DeathAndPain 2 / 2638
FUBA 'HR_INFOTYPES_OPERATION'
vor 4 Tagen von Bright4.5 3 / 7709

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

IF mit AND und OR
vor 2 Tagen von GastX 6 / 2879
Meine Inbox
vor 2 Tagen von Rabea1103 1 / 1472
PCL2 Cluster auslesen
vor 4 Tagen von DeathAndPain 2 / 2638
FUBA 'HR_INFOTYPES_OPERATION'
vor 4 Tagen von Bright4.5 3 / 7709