Factory-Methode dynmisieren....

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

Factory-Methode dynmisieren....

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Moin,

gegeben sei eine Klassenhierarchie, die wie folgt aussieht:

ZCL_MYCLASS (abstrakt)

davon erben die Klassen

ZCL_MYCLASS_1
ZCL_MYCLASS_2
etc.

In ZCL_MYCLASS gibt es die statische Methode FACTORY, die anhand von Kriterien den Namen einer der konkreten erbenden Klassen erzeugt und dynamisch instanziiert.

Problem:

Es stellt sich heraus, dass es weitere Klassen gibt, parallel zu ZCL_MYCLASS, also

ZCL_AACLASS (abstrakt)
ZCL_BBCLASS (abstrakt)

in der nach den gleichen Kriterien wie bei ZCL_MYCLASS eine FACTORY-Methode gebraucht wird, um dann

ZCL_AACLASS_1
ZCL_AACLASS_2
etc.

sowie

ZCL_BBCLASS_1
ZCL_BBCLASS_2
etc.

zu instanziieren. Nun kann ich die Factory-Methode hart unter intensivem Einsatz der Zwischenablage für jede abstrakte Oberklasse einzeln schreiben. Ich frage mich aber, ob es einen geschickteren Weg gibt. Z. B. eine weitere Oberklasse ZCL_CLASS (über den ganzen anderen Klassen), in der dynamisch eine konkrete Klasse instanziiert wird. Dazu müsste ich den Namen der Klasse irgendwie ableiten, z. B. so:

classname = 'ZCL_' && prefix && '_' && classnr.
CREATE OBJECT result type (classname)

Das Problem dabei ist das Präfix (also z. B. MYCLASS oder AACLASS oder BBCLASS). Im Grunde ist das ein identifizierbarer Teil des Namens der Klasse, dessen Factory-Methode aufgerufen wird (sprich: ZCL_MYCLASS=>FACTORY( ) müsste dazu führen, dass MYCLASS als Präfix abgeleitet wird). Allerdings muss das auch für Unterklassen funktionieren (ZCL_MYCLASS_1=>FACTORY( ) müsste ebenfalls dazu führen, dass MYCLASS als Präfix abgeleitet wird). Das wäre ja grundsätzlich lösbar, wenn ich das Ableiten des Präfix überhaupt hinbekäme.

Problem ist nämlich: Wenn ich die ZCL_MYCLASS_1=>FACTORY( )-Methode aufrufe, gibt mir sy-repid immer "ZCL_CLASS" zurück und nicht etwa "ZCL_CLASS_MYCLASS_1", weil die statische Methode FACTORY ja in ZCL_CLASS implementiert ist. Ich habe noch keinen Weg gefunden, den Namen der Klasse, in der ich mich gerade wirklich befinde, herauszufinden.

"Ha!", sagt da der Profi, "das ist mal wieder ne doofe Wenzelfrage, das ist einfach: Instanz erzeugen und dann per RTTI" - aber ich brauche den Namen der Klasse ja gerade zum Erzeugen der Instanz - und ich kann keine Instanz erzeugen, damit ich den Klassennamen herausfinden kann, mit dem ich dann die Instanz erzeuge. Das ist wie "ich brauche eine Brille, damit ich beim Suchen meiner Brille was sehe".

Wie komme ich aus dem Teufelskreis heraus?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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


Re: Factory-Methode dynmisieren....

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Hallo Ralf,

wenn du so was wie ZCL_MYCLASS_1=>FACTORY( ) irgendwo in deinem Programm aufrufst, kannst du genau so gut ZCL_MYCLASS_1=>FACTORY( 'ZCL_MYCLASS_1' ) oder ZCL_MYCLASS_1=>FACTORY( 'ZCL_MYCLASS' ) aufrufen.
Damit ist das Problem dann nicht mehr vorhanden.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Factory-Methode dynmisieren....

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
black_adept hat geschrieben:Hallo Ralf,

wenn du so was wie ZCL_MYCLASS_1=>FACTORY( ) irgendwo in deinem Programm aufrufst, kannst du genau so gut ZCL_MYCLASS_1=>FACTORY( 'ZCL_MYCLASS_1' ) oder ZCL_MYCLASS_1=>FACTORY( 'ZCL_MYCLASS' ) aufrufen.
Damit ist das Problem dann nicht mehr vorhanden.
Hmhmhm, das wäre ein Ansatz, der eine Überlegung wert wäre.... Aber dynamischer wäre mir das eigentlich lieber, weil ich den Klassennamen ja eh zusammenbaue.

Vielleicht hat ja jemand eine Idee, die diesen Ansatz noch toppt ;)

Ich überlege gerade, ob mich "Abstrakte Fabrik" da weiterbringen kann.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Factory-Methode dynmisieren....

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Wobei ich mich wundere warum du überhaupt ZCL_MYCLASS_1=>FACTORY( ) aufrufen willst. Wenn nachher das Resultat dieses Aufrufs eine Instanz von ZCL_MYCLASS2 wäre, schlägt dich jeder der nachher das Programm warten soll.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Factory-Methode dynmisieren....

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
black_adept hat geschrieben:Wobei ich mich wundere warum du überhaupt ZCL_MYCLASS_1=>FACTORY( ) aufrufen willst. Wenn nachher das Resultat dieses Aufrufs eine Instanz von ZCL_MYCLASS2 wäre, schlägt dich jeder der nachher das Programm warten soll.
Das ist auffallend richtig - ich habe beim Schreiben des Postings nicht bedacht, dass die Factory-Methode auf PRIVATE steht, also nur in der Oberklasse aufgerufen werden kann.

Am Problem ändert das jedoch nix, ich will nicht für eine deutlich zweistellige Zahl an Klassen fast identische Factor-Methoden schreiben....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Factory-Methode dynmisieren....

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
ralf.wenzel hat geschrieben:Ich überlege gerade, ob mich "Abstrakte Fabrik" da weiterbringen kann.
Auch da wirst du den Namen der Grundklasse ( ZCL_MYCLASS ) mitgeben müssen.
Das was dir vorschwebt ( Factory-Methode in einer Klasse oberhalb von ZCL_MYCLASS, damit du die nicht überall neu/gleich definieren musst ) ist ja schon eine Art abstract factory --> du landest wieder bei ZCL_CLASS=>FACTORY( 'ZCL_MYCLASS')
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Factory-Methode dynmisieren....

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
black_adept hat geschrieben:
ralf.wenzel hat geschrieben:Ich überlege gerade, ob mich "Abstrakte Fabrik" da weiterbringen kann.
Auch da wirst du den Namen der Grundklasse ( ZCL_MYCLASS ) mitgeben müssen.
Das was dir vorschwebt ( Factory-Methode in einer Klasse oberhalb von ZCL_MYCLASS, damit du die nicht überall neu/gleich definieren musst ) ist ja schon eine Art abstract factory --> du landest wieder bei ZCL_CLASS=>FACTORY( 'ZCL_MYCLASS')
Also bin ich nicht der einzige, der nicht weiß, wie man den Namen der aufgerufenen Klasse ermitteln kann ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Factory-Methode dynmisieren....

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
ralf.wenzel hat geschrieben: Problem ist nämlich: Wenn ich die ZCL_MYCLASS_1=>FACTORY( )-Methode aufrufe, gibt mir sy-repid immer "ZCL_CLASS" zurück und nicht etwa "ZCL_CLASS_MYCLASS_1", weil die statische Methode FACTORY ja in ZCL_CLASS implementiert ist. Ich habe noch keinen Weg gefunden, den Namen der Klasse, in der ich mich gerade wirklich befinde, herauszufinden.
Das hatte ich doch gerade letzte Woche hier http://www.abapforum.com/forum/viewtopi ... =3&t=20371beschrieben. Ich gebe einfach die Referenz über den Parameter mit.
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: Factory-Methode dynmisieren....

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Icke0801 hat geschrieben:
ralf.wenzel hat geschrieben: Problem ist nämlich: Wenn ich die ZCL_MYCLASS_1=>FACTORY( )-Methode aufrufe, gibt mir sy-repid immer "ZCL_CLASS" zurück und nicht etwa "ZCL_CLASS_MYCLASS_1", weil die statische Methode FACTORY ja in ZCL_CLASS implementiert ist. Ich habe noch keinen Weg gefunden, den Namen der Klasse, in der ich mich gerade wirklich befinde, herauszufinden.
Das hatte ich doch gerade letzte Woche hier http://www.abapforum.com/forum/viewtopi ... =3&t=20371beschrieben. Ich gebe einfach die Referenz über den Parameter mit.
Das habe ich gelesen. Aber du machst die Ermittlung, nachdem du eine Instanz erzeugt hast. Ich brauche den Namen der Klasse, um die Instanz zu erzeugen!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Factory-Methode dynmisieren....

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
ralf.wenzel hat geschrieben: Das habe ich gelesen. Aber du machst die Ermittlung, nachdem du eine Instanz erzeugt hast. Ich brauche den Namen der Klasse, um die Instanz zu erzeugen!
Achso, ich dachte, du bist schon "drin" , so hatte ich das aus....
ralf.wenzel hat geschrieben: Also bin ich nicht der einzige, der nicht weiß, wie man den Namen der aufgerufenen Klasse ermitteln kann ;)
.....gelesen.
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: Factory-Methode dynmisieren....

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
ralf.wenzel hat geschrieben:Also bin ich nicht der einzige, der nicht weiß, wie man den Namen der aufgerufenen Klasse ermitteln kann ;)
Geht halt nicht bei statischen Methoden. Fertisch. Zumindest nicht "ehrlich".

Wenn du es unbedingt machen willst.

1.) Callstack auslesen und im Callstack die Aufrufstelle ermitteln, wo die statische Methode gerufen wird ( vorletzter Eintrag des Callstacks ).
2.) Read report auf die Zeile und hoffen, dass dort nur eine einzige Anweisung steht.
3.) Sich fragen, ob man nicht lieber seine Vorgehensweise umstellen sollte statt so einen Blödsinn anzuwenden.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Factory-Methode dynmisieren....

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Der Preis ist mir zu hoch. Ich habe das jetzt konventionell gelöst. Was ich dabei nicht verstehe, ist die wirklich nicht nachvollziehbare Befüllung von sy-repid
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Factory-Methode dynmisieren....

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Du kennst ja für altbackene Formroutinen die Aufrufmöglichkeit

Code: Alles auswählen.

PERFORM formname IN PROGRAM anderesprogramm

Stell dir einen Methodenaufruf einer nicht redefinierten Methode einfach analog vor, dass die Methode dort aufgerufen wird, wo sie definiert wurde. Dann verstehst du auch den sy-repid.
( Das gilt nicht nur für statische Methoden, die in ABAP per se nicht redefiniert werden dürfen sondern auch für Instanzmethoden )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Factory-Methode dynmisieren....

Beitrag von erp-bt (Specialist / 163 / 4 / 21 ) »
Hallo Ralf,

ich bin mir jetzt nicht ganz sicher welche Klassen als Ergebnis eigentlich rauskommen sollten, aber wenn es ZCL_MYCLASS_1, ZCL_AACLASS_1, ZCL_BBCLASS_1, bzw. ZCL_MYCLASS_2, ZCL_AACLASS_2, ZCL_BBCLASS_2. gewesen sein sollten, wäre das Abstract Factory ja eigentlich schon der richtige Ansatz gewesen. Oder benötigst Du alle Klassen gleichzeitig? Aber warum da statische Methoden aufgerufen werden ist mir auch noch unklar.

Ich hab' mal das Beispiel der abstrakten Factory aus dem Head First Buch nach Abap übersetzt. Wobei das Beispiel nochmal einen Schritt weiter geht, da noch eine unterschiedliche Familie von Pizzen erstellt wird (veggie, cheese) Das bräuchtest Du eigentlich nicht. Du bräuchtest meiner Meinung nach ein Interface pro Präfix, Deine konkreten Klassen, eine Abstrake oder Interface-Klasse für das Abstract-Factory, und eine konkrete Factory pro zu erstellenden Zweig (1, 2). Einen Consumer brauchst Du natürlich auch noch.

Was man noch machen könnte ist, das man anstelle der einzelnen Factory-Methoden innerhalb der abstrakten Factory das Prototype-Pattern anwendet, wenn man viele gleichartige Klassen hat. Das habe ich selber aber noch nicht probiert.

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  Z_DP_FACTORY_ABSTRACT_01
*&
*&---------------------------------------------------------------------*
*& This is the transformed example of the Head First Design Pattern
*& Book.
*& Main characteristic for abstarct factory method is that the creation
*& is done by the composition of an ingredient factory.
*&
*&---------------------------------------------------------------------*
report z_dp_factory_abstract_01.

interface lif_dough.
  methods get returning value(r_dough) type string.
endinterface.
interface lif_sauce.
  methods get returning value(r_sauce) type string.
endinterface.
interface lif_cheese.
  methods get returning value(r_cheese) type string.
endinterface.

class lcl_thin_crust_dough definition.
  public section.
    interfaces lif_dough.
endclass.
class lcl_thin_crust_dough implementation.
  method lif_dough~get.
    r_dough = 'Thin crust dough'.
  endmethod.
endclass.

class lcl_thick_crust_dough definition.
  public section.
    interfaces lif_dough.
endclass.
class lcl_thick_crust_dough implementation.
  method lif_dough~get.
    r_dough = 'Thick crust dough'.
  endmethod.
endclass.

class lcl_marinara_sauce definition.
  public section.
    interfaces lif_sauce.
endclass.
class lcl_marinara_sauce implementation.
  method lif_sauce~get.
    r_sauce = 'Delicious marinara sauce'.
  endmethod.
endclass.

class lcl_plum_tomato_sauce definition.
  public section.
    interfaces lif_sauce.
endclass.
class lcl_plum_tomato_sauce implementation.
  method lif_sauce~get.
    r_sauce = 'Plum tomato sauce'.
  endmethod.
endclass.

class lcl_mozarella_cheese definition.
  public section.
    interfaces lif_cheese.
endclass.
class lcl_mozarella_cheese implementation.
  method lif_cheese~get.
    r_cheese = 'Shredded mozarella cheese'.
  endmethod.
endclass.

class lcl_parmesan_cheese definition.
  public section.
    interfaces lif_cheese.
endclass.
class lcl_parmesan_cheese implementation.
  method lif_cheese~get.
    r_cheese = 'Parmesan cheese'.
  endmethod.
endclass.

interface lif_ingredient_factory.

* The "create"-Methods in the ingredient factory interface is abstract, which
* means that the conctrete product which is created by the implementing class
* uses a "factory" method. So "factory" methods are use within abstract factories

  methods create_dough returning value(r_dough) type string.
  methods create_sauce returning value(r_sauce) type string.
  methods create_cheese returning value(r_cheese) type string.
endinterface.

class lcl_ny_ingredient_factory definition.

  public section.
    interfaces lif_ingredient_factory.

endclass.
class lcl_ny_ingredient_factory implementation.

  method lif_ingredient_factory~create_dough.
    data dough type ref to lif_dough.
    create object dough type lcl_thin_crust_dough.
    r_dough = dough->get( ).
  endmethod.

  method lif_ingredient_factory~create_sauce.
    data sauce type ref to lif_sauce.
    create object sauce type lcl_marinara_sauce.
    r_sauce = sauce->get( ).
  endmethod.

  method lif_ingredient_factory~create_cheese.
    data cheese type ref to lif_cheese.
    create object cheese type lcl_mozarella_cheese.
    r_cheese = cheese->get( ).
  endmethod.

endclass.

class lcl_ch_ingredient_factory definition.

  public section.
    interfaces lif_ingredient_factory.

endclass.
class lcl_ch_ingredient_factory implementation.

  method lif_ingredient_factory~create_dough.
    data dough type ref to lif_dough.
    create object dough type lcl_thick_crust_dough.
    r_dough = dough->get( ).
  endmethod.

  method lif_ingredient_factory~create_sauce.
    data sauce type ref to lif_sauce.
    create object sauce type lcl_plum_tomato_sauce.
    r_sauce = sauce->get( ).
  endmethod.

  method lif_ingredient_factory~create_cheese.
    data cheese type ref to lif_cheese.
    create object cheese type lcl_parmesan_cheese.
    r_cheese = cheese->get( ).
  endmethod.

endclass.

class lcl_pizza definition abstract.

  public section.
    methods prepare abstract.
    methods bake.
    methods cut.
    methods box.
    methods get_name returning value(r_name) type string.
    methods set_name importing i_name type string.

  protected section.
    data name     type string.
    data dough    type string.
    data sauce    type string.
    data cheese   type string.


endclass.               "lcl_pizza

class lcl_pizza implementation.
  method bake.
    cl_demo_output=>write( 'Bake for 5 minutes at 350 degree celsius' ).
  endmethod.

  method cut.
    cl_demo_output=>write( 'Cutting pizza into diagonal slices ' ).
  endmethod.

  method box.
    cl_demo_output=>write( 'Place pizza in official pizza store box' ).
  endmethod.

  method get_name.
    r_name = me->name.
  endmethod.

  method set_name.
    me->name = i_name.
  endmethod.
endclass.               "lcl_pizza

class lcl_cheese_pizza definition inheriting from lcl_pizza.

  public section.
    data ingredient_factory type ref to lif_ingredient_factory.

    methods constructor importing i_ingredient_factory type ref to lif_ingredient_factory.

    methods prepare redefinition.
endclass.

class lcl_cheese_pizza implementation.
  method constructor.

    super->constructor( ).

    me->ingredient_factory = i_ingredient_factory.

  endmethod.

  method prepare.

    cl_demo_output=>write( 'Preparing ' && me->name ).
    me->dough  = me->ingredient_factory->create_dough( ).
    me->sauce  = me->ingredient_factory->create_sauce( ).
    me->cheese = me->ingredient_factory->create_cheese( ).

  endmethod.
endclass.

class lcl_veggie_pizza definition inheriting from lcl_pizza.

  public section.
    data ingredient_factory type ref to lif_ingredient_factory.

    methods constructor importing i_ingredient_factory type ref to lif_ingredient_factory.

    methods prepare redefinition.
endclass.

class lcl_veggie_pizza implementation.
  method constructor.

    super->constructor( ).

    me->ingredient_factory = i_ingredient_factory.

  endmethod.

  method prepare.

    cl_demo_output=>write( 'Preparing ' && me->name ).
    me->dough  = ingredient_factory->create_dough( ).
    me->sauce  = ingredient_factory->create_sauce( ).
    me->cheese = ingredient_factory->create_cheese( ).

  endmethod.
endclass.


class lcl_pizza_store definition abstract.

  public section.

    methods order_pizza
      importing i_pizza_type type string returning value(r_pizza) type ref to lcl_pizza.

  protected section.
    methods create_pizza abstract
      importing i_pizza_type type string returning value(r_pizza) type ref to lcl_pizza.

endclass.               "lcl_pizza_store
class lcl_pizza_store implementation.

  method order_pizza.

    data pizza type ref to lcl_pizza.

    pizza = me->create_pizza( exporting i_pizza_type = i_pizza_type ).

    pizza->bake( ).
    pizza->cut( ).
    pizza->box( ).

    r_pizza = pizza.

  endmethod.

endclass.               "lcl_pizza_store

class lcl_ny_pizza_store definition inheriting from lcl_pizza_store.

  protected section.
    methods create_pizza redefinition.

endclass.               "lcl_newyork_pizza_store
class lcl_ny_pizza_store implementation.

  method create_pizza.

    data pizza type ref to lcl_pizza.
    data ingredient_factory type ref to lif_ingredient_factory.

    create object ingredient_factory type lcl_ny_ingredient_factory.

    case i_pizza_type.
      when 'cheese'.
        create object pizza type lcl_cheese_pizza exporting i_ingredient_factory = ingredient_factory.
        pizza->set_name( exporting i_name = 'New York style cheese pizza' ).
      when 'veggie'.
        create object pizza type lcl_veggie_pizza exporting i_ingredient_factory = ingredient_factory.
        pizza->set_name( exporting i_name = 'New York style veggie pizza' ).
      when others.
    endcase.

    r_pizza = pizza.

  endmethod.

endclass.               "lcl_newyork_pizza_store

class lcl_ch_pizza_store definition inheriting from lcl_pizza_store.

  protected section.
    methods create_pizza redefinition.

endclass.               "lcl_chicago_pizza_store
class lcl_ch_pizza_store implementation.

  method create_pizza.

    data pizza type ref to lcl_pizza.
    data ingredient_factory type ref to lif_ingredient_factory.

    create object ingredient_factory type lcl_ch_ingredient_factory.

    case i_pizza_type.
      when 'cheese'.
        create object pizza type lcl_cheese_pizza exporting i_ingredient_factory = ingredient_factory.
        pizza->set_name( exporting i_name = 'Chicago style cheese pizza' ).
      when 'veggie'.
        create object pizza type lcl_veggie_pizza exporting i_ingredient_factory = ingredient_factory.
        pizza->set_name( exporting i_name = 'Chicago style veggie pizza' ).
      when others.
    endcase.

    r_pizza = pizza.

  endmethod.

endclass.               "lcl_chicago_pizza_store

*&---------------------------------------------------------------------*
*&       Class PizzaTestDrive
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
class lcl_pizza_test_drive definition.

  public section.
    class-methods main.

endclass.               "main

*&---------------------------------------------------------------------*
*&       Class (Implementation)  PizzaTestDrive
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
class lcl_pizza_test_drive implementation.

  method main.

    data ny_pizza_store type ref to lcl_pizza_store.
    data chicago_pizza_store type ref to lcl_pizza_store.
    data pizza type ref to lcl_pizza.


    create object ny_pizza_store type lcl_ny_pizza_store.
    pizza = ny_pizza_store->order_pizza( exporting i_pizza_type = 'cheese' ).
    cl_demo_output=>write( 'Ethan ordered a ' && pizza->get_name( ) ).
    cl_demo_output=>display( ).

    pizza = ny_pizza_store->order_pizza( exporting i_pizza_type = 'veggie' ).
    cl_demo_output=>write( 'Rebecca ordered a ' && pizza->get_name( ) ).
    cl_demo_output=>display( ).

    create object chicago_pizza_store type lcl_ch_pizza_store.
    pizza = chicago_pizza_store->order_pizza( exporting i_pizza_type = 'cheese' ).
    cl_demo_output=>write( 'Jeron ordered a ' && pizza->get_name( ) ).
    cl_demo_output=>display( ).

    pizza = chicago_pizza_store->order_pizza( exporting i_pizza_type = 'veggie' ).
    cl_demo_output=>write( 'Maik ordered a ' && pizza->get_name( ) ).
    cl_demo_output=>display( ).

  endmethod.

endclass.               "main

start-of-selection.

  lcl_pizza_test_drive=>main( ).
Liebe Grüße,
...entwickelnder Berater...beratender Entwickler

Seite 1 von 1

Vergleichbare Themen

20
Antw.
9395
Views
Erstellen einer Factory-Methode (Instanzmethode)
von yuro » 20.12.2014 01:02 • Verfasst in ABAP® für Anfänger
4
Antw.
2923
Views
cl_salv_table=>factory icon wird nicht nach event angezeigt
von c oco » 23.08.2012 17:57 • Verfasst in ABAP® für Anfänger
1
Antw.
1859
Views
cl_salv_table=>factory "lt_bkpf ist nicht typkompatibel zum formalen Parameter "t_table"
von Elekam » 07.10.2020 15:59 • Verfasst in ABAP Objects®
1
Antw.
1726
Views
Entscheidungsmaker Methode
von erzoo24 » 04.05.2016 16:07 • Verfasst in ABAP® für Anfänger
20
Antw.
11950
Views
Methode GET_SELECTED_ROWS
von Torsten » 06.09.2004 14:40 • Verfasst in ABAP Objects®

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.