Code: Alles auswählen.
CASE id_class.
WHEN 'AUTO'.
CREATE OBJECT rr_return TYPE zcl_fahrzeug_auto.
WHEN 'MOTORRAD'
CREATE OBJECT rr_return TYPE zcl_fahrzeug_motorrad.
ENDCASE.
Code: Alles auswählen.
TRY.
CREATE OBJECT rr_return TYPE (id_class).
CATCH cx_root.
* Irgendwas ist schief gelaufen. z.B. Die Klasse gab es nicht oder ist inkompatibel.
* Mögliche Fehler-Klassen siehe Befehl CREATE OBJECT
ENDTRY.
Mein Vorschlag ist quasi das Factory-Pattern.tseng hat geschrieben:Ich habe mich inzwischen noch weiter gelesen und Methodiken gesucht um das Vorhaben umzusetzen. Dabei bin ich noch auf das Factory-Pattern gestoßen. Nach meinem Verständnis würde dies ebenso funktionieren, da die Instanzierung der Objekte dabei ebenfalls dynamisch erfolgt. Sehe ich das soweit richtig?
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
tseng
Code: Alles auswählen.
DATA lr_beiwagen TYPE REF TO zif_beiwagen.
TRY.
lr_beiwagen ?= lr_fahrzeug. "lr_fahrzeug ist vom Typ AUTO oder MOTORRAD
nutzlast = lr_beiwagen->get_nutzlast( ).
CATCH cx_sy_move_cast_error.
exit. "Fahrzeug hat keinen Beiwagen
ENDTRY.
Das wäre dann der erwähnte/gewünschte Polymorphismusewx hat geschrieben:Interessant ist dann, wie man auf die unterschiedlichen Funktionen der abgeleiteten Klassen zugreifen kann: Nämlich durch die Verwendung von Interfaces.
Muss aber nicht notwendigerweise durch Interfaces passieren. Gerade bei dem "Beiwagen"-Beispiel scheint mir, dass "Motorrad" wohl das einzige Fahrzeug sein wird, welches von einem Beiwagen profitiert, so dass man gerade in diesem Fall statt des Interfaces direkt auf die Motorradklasse downcasten könnte und sich hier ein damit dann überflüssiges Interface spart.ewx hat geschrieben:Interessant ist dann, wie man auf die unterschiedlichen Funktionen der abgeleiteten Klassen zugreifen kann: Nämlich durch die Verwendung von Interfaces.
Ganz ehrlich: Ich habe das erst hinterher herausgefunden...black_adept hat geschrieben:Unglaublich was es alles so gibt.
--> Beiwagen-Interface ist ne super Idee