Dynamische Typisierung?

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Dynamische Typisierung?

Beitrag von cortex (ForumUser / 4 / 0 / 0 ) »
Hallo Experten,

folgende Situation:
In einer Methode einer ABAP-Klasse (nicht im Kundennamensraum) wird irgendwo

Code: Alles auswählen.

CREATE OBJECT gr_obj.
  g_result = gr_obj->get_result( ).
verwendet.
Ich möchte in dieser Methode nun in gr_obj statt eines Objekts der Originalklasse ein Objekt einer eigenen Klasse (die von der Originalklasse erbt) erzeugen und deren Methode get_result aufrufen.
Erstmal kein Problem:
Ich verwende die implizite Erweiterungsoption am Beginn des Methodencodings und schreibe hier:

Code: Alles auswählen.

*$*$-Start: (1)--------------------------------------------------------$*$*
  DATA gr_obj TYPE REF TO zcl_erbt_von_originalklasse.
*$*$-Start: (1)--------------------------------------------------------$*$*
Damit verschattet mein lokales gr_obj die Original-Deklaration und alles funktioniert wie gewünscht.

ABER:
Wie kann ich steuern, dass meine "Verschattung" nur unter bestimmten Bedingungen erfolgt?
Also z.B. (Coding bitte nicht ernstnehmen, soll nur die Idee illustrieren):

Code: Alles auswählen.

*$*$-Start: (1)--------------------------------------------------------$*$*
IF sy-mandt EQ 100.
  DATA gr_obj TYPE REF TO zcl_erbt_von_originalklasse.
ELSE.
  DATA gr_obj TYPE REF TO originalklasse.
ENDIF.
*$*$-Start: (1)--------------------------------------------------------$*$*
Jemand eine Idee?

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


Re: Dynamische Typisierung?

Beitrag von Pyro (Specialist / 121 / 14 / 18 ) »
evtl bringt dich das weiter:

Code: Alles auswählen.

data: gv_varname type string VALUE 'ZCL_KLASSE',
go_test TYPE REF TO data.

CREATE DATA go_test type REF TO (gv_varname).

FIELD-SYMBOLS: <fs> .

ASSIGN go_test->* to <fs>.

create OBJECT <fs> TYPE (gv_varname).
http://sap.ittoolbox.com/groups/technic ... ct-4528803


//EDIT:
Ups, das war wohl etwas weit ums haus gelaufen, probier das mal^^

Code: Alles auswählen.

DATA: lo_object TYPE REF TO OBJECT,
      gv_classname TYPE string VALUE 'ZCL_CLASS'.

CREATE OBJECT lo_object TYPE (gv_classname).

http://www.abapforum.com/forum/viewtopi ... =3&t=16404

Re: Dynamische Typisierung?

Beitrag von cortex (ForumUser / 4 / 0 / 0 ) »
Hallo Pyro,
danke für deine Antwort.
Leider bringt mich das nicht weiter, da ich ja an die Codestelle "CREATE OBJECT gr_obj." nicht modifikationsfrei rankomme...

Re: Dynamische Typisierung?

Beitrag von Pyro (Specialist / 121 / 14 / 18 ) »
Ah, ok, sorry, hatte ich nicht ganz gelesen.

also bräuchtest du dann quasi sowas in der art?:

Code: Alles auswählen.

data: gr_obj TYPE REF TO OBJECT.

IF >BEDINGUNG<.
  CREATE OBJECT gr_obj type ('ZCL_CLASS').

ELSE.
  "gr_obj = super->gr_obj.
ENDIF.
die Frage ist quasi nur, wie man an das gr_obj von der verschatteten Klasse dran kommt...

Re: Dynamische Typisierung?

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Jetzt bewege ich mich auf dünnem Eis......

Im Deklarationsblock ist sowas ziemlich doof, aber kann man das nicht einfach "fasten"?

Sprich:

Code: Alles auswählen.

data: originalklasse.
data: zcl_erbt_von_originalklasse.

if (bedingung)
zcl_erbt_von_originalklasse = originalklasse.
endif.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynamische Typisierung?

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
ralf.wenzel hat geschrieben:Jetzt bewege ich mich auf dünnem Eis......
Im Deklarationsblock ist sowas ziemlich doof, aber kann man das nicht einfach "fasten"?
Sprich:

Code: Alles auswählen.

data: originalklasse.
data: zcl_erbt_von_originalklasse.

if (bedingung)
zcl_erbt_von_originalklasse = originalklasse.
endif.
Nü das geht nicht.
Ein Objekt der Oberklasse kann nicht einem Objekt der Unterklasse zugewiesen werden.
Nur umgekehrt ist ein "casten" möglich.

So wie das ganze verstanden habe, geht es eigentlich um ein "anderes" Verhalten der Methode "get_result".
@Cortex: Hast du es schon mal mit einem "Enhancement" der Klasse versucht?
(SE24->[Originalklasse]->Anzeigen->Menü->Klasse->Erweitern)

lg ADT
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

Re: Dynamische Typisierung?

Beitrag von cortex (ForumUser / 4 / 0 / 0 ) »
Hallo ADT,

tatsächlich gibt es beim 'enhancen' der Klasse die Möglichkeit eine "Overwrite-Methode" zu schreiben die statt der originalen Methode aufgerufen wird.
In dieser habe ich dann auch Zugriff auf die CREATE OBJECT-Anweisung.
Zusammen mit dem Hinweis von Pyro wird ein Schuh draus...
In der Overwrite-Methode steht nun vor dem (kopierten) Original-Code:

Code: Alles auswählen.

DATA:
  gr_obj TYPE REF TO cl_originalklasse,
  lv_classname  TYPE string.

  IF sy-mandt EQ 100.
    lv_classname = 'ZCL_ERBT_VON_ORIGINALKLASSE'.
  ELSE.
    lv_classname = 'CL_ORIGINALKLASSE'.
  ENDIF.
Einzige Änderung im (kopierten) Originalcode ist:

Code: Alles auswählen.

CREATE OBJECT gr_obj TYPE (lv_classname).
Danke für eure Hinweise!

Seite 1 von 1

Vergleichbare Themen

10
Antw.
5706
Views
Dynamische Typisierung
von Gast » 19.01.2006 10:24 • Verfasst in ABAP® Core
1
Antw.
629
Views
Dynamische Typisierung durch Changing Parameter
von Coffeebean » 11.07.2021 12:31 • Verfasst in ABAP Objects®
2
Antw.
1561
Views
Typisierung von Formparameter
von RiffRaff » 27.08.2004 09:46 • Verfasst in ABAP® Core
10
Antw.
4586
Views
Problem: Unterprogramm und Parameter(typisierung)
von MacLeod » 25.01.2012 16:31 • Verfasst in ABAP® Core
4
Antw.
1473
Views
Typisierung bei Select-Options und Methoden-Exportparameter
von cecslucas » 06.08.2019 11:40 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.