Übung Schrödinger: 10 Interfaces (ABAP): Unterschied zwischen den Versionen
Aus MattWiki
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
Listing der Übungsaufgaben zum Thema Interfaces aus Kapitel 10 des Buchs "Schrödinger programmiert ABAP". | |||
<syntaxhighlight lang="abap"> | |||
REPORT zsch_matt_searchit. | |||
INTERFACE lif_search. | |||
METHODS get_it | |||
IMPORTING | |||
id_thing TYPE string | |||
EXPORTING | |||
et_things TYPE stringtab. | |||
DATA gd_things_count TYPE i. | |||
ENDINTERFACE. | |||
CLASS lcl_katze DEFINITION. | |||
PUBLIC SECTION. | |||
INTERFACES lif_search. | |||
METHODS get_it. | |||
PROTECTED SECTION. | |||
PRIVATE SECTION. | |||
ENDCLASS. | |||
CLASS lcl_katze IMPLEMENTATION. | |||
METHOD lif_search~get_it. | |||
DATA: ld_thing LIKE LINE OF et_things. | |||
CONCATENATE 'Du suchst ' id_thing | |||
INTO ld_thing SEPARATED BY space. | |||
APPEND 'Ich bin es, die Katze' TO et_things. | |||
APPEND ld_thing TO et_things. | |||
APPEND 'Ich bringe dir eine Maus' TO et_things. | |||
ENDMETHOD. | |||
METHOD get_it. | |||
" Die Methode get_it kann in der Klassenimplementierung mit | |||
" gleichem Namen, wie die Methode des Interfaces vorhanden sein. | |||
" Im vorliegenden Fall ist die Methodenimplementierung jedoch | |||
" nicht notwendig. | |||
ENDMETHOD. | |||
ENDCLASS. | |||
CLASS lcl_hund DEFINITION. | |||
PUBLIC SECTION. | |||
INTERFACES lif_search. | |||
PROTECTED SECTION. | |||
PRIVATE SECTION. | |||
ENDCLASS. | |||
CLASS lcl_hund IMPLEMENTATION. | |||
METHOD lif_search~get_it. | |||
DATA: ld_thing LIKE LINE OF et_things. | |||
CONCATENATE 'Du suchst ' id_thing | |||
INTO ld_thing SEPARATED BY space. | |||
APPEND 'Ich bin es, der Hund' TO et_things. | |||
APPEND ld_thing TO et_things. | |||
APPEND 'Ich bringe dir einen Knochen' TO et_things. | |||
ENDMETHOD. | |||
ENDCLASS. | |||
DATA: gr_schroedingers_katze TYPE REF TO lcl_katze, "Objektreferenz | |||
gr_schroedingers_hund TYPE REF TO lcl_hund, "Objektreferenz | |||
gr_search TYPE REF TO lif_search, "Interface-Referenz | |||
gt_things TYPE stringtab, | |||
gs_things LIKE LINE OF gt_things. | |||
START-OF-SELECTION. | |||
CREATE OBJECT: gr_schroedingers_katze, | |||
gr_schroedingers_hund. | |||
" Der statische Typ der gr_search-Referenz ist das Interface | |||
" Der dynamische Typ der gr_search-Referenz ist der Typ, | |||
" der der Interface-Referenz zugewiesen wurde. | |||
" Im Grunde ist eine Interface-Referenz wie eine | |||
" Objektreferenz mit einem Filter, da nur die | |||
" Methoden ansprechbar sind, die im Interface definiert wurden. | |||
" Up-Cast - Spricht mit der Katze | |||
" Durch das Interface | |||
gr_search = gr_schroedingers_katze. | |||
gr_search->get_it( | |||
EXPORTING | |||
id_thing = 'Stock' | |||
IMPORTING | |||
et_things = gt_things ). | |||
" Up-Cast - Spricht mit dem Hund | |||
gr_search = gr_schroedingers_hund. | |||
gr_search->get_it( | |||
EXPORTING | |||
id_thing = 'Stock' | |||
IMPORTING | |||
et_things = gt_things ). | |||
LOOP AT gt_things INTO gs_things. | |||
WRITE: / gs_things. | |||
ENDLOOP. | |||
</syntaxhighlight> | |||
[[Category:ABAP]] | [[Category:ABAP]] |
Aktuelle Version vom 14. April 2018, 21:56 Uhr
Listing der Übungsaufgaben zum Thema Interfaces aus Kapitel 10 des Buchs "Schrödinger programmiert ABAP".
REPORT zsch_matt_searchit.
INTERFACE lif_search.
METHODS get_it
IMPORTING
id_thing TYPE string
EXPORTING
et_things TYPE stringtab.
DATA gd_things_count TYPE i.
ENDINTERFACE.
CLASS lcl_katze DEFINITION.
PUBLIC SECTION.
INTERFACES lif_search.
METHODS get_it.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_katze IMPLEMENTATION.
METHOD lif_search~get_it.
DATA: ld_thing LIKE LINE OF et_things.
CONCATENATE 'Du suchst ' id_thing
INTO ld_thing SEPARATED BY space.
APPEND 'Ich bin es, die Katze' TO et_things.
APPEND ld_thing TO et_things.
APPEND 'Ich bringe dir eine Maus' TO et_things.
ENDMETHOD.
METHOD get_it.
" Die Methode get_it kann in der Klassenimplementierung mit
" gleichem Namen, wie die Methode des Interfaces vorhanden sein.
" Im vorliegenden Fall ist die Methodenimplementierung jedoch
" nicht notwendig.
ENDMETHOD.
ENDCLASS.
CLASS lcl_hund DEFINITION.
PUBLIC SECTION.
INTERFACES lif_search.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_hund IMPLEMENTATION.
METHOD lif_search~get_it.
DATA: ld_thing LIKE LINE OF et_things.
CONCATENATE 'Du suchst ' id_thing
INTO ld_thing SEPARATED BY space.
APPEND 'Ich bin es, der Hund' TO et_things.
APPEND ld_thing TO et_things.
APPEND 'Ich bringe dir einen Knochen' TO et_things.
ENDMETHOD.
ENDCLASS.
DATA: gr_schroedingers_katze TYPE REF TO lcl_katze, "Objektreferenz
gr_schroedingers_hund TYPE REF TO lcl_hund, "Objektreferenz
gr_search TYPE REF TO lif_search, "Interface-Referenz
gt_things TYPE stringtab,
gs_things LIKE LINE OF gt_things.
START-OF-SELECTION.
CREATE OBJECT: gr_schroedingers_katze,
gr_schroedingers_hund.
" Der statische Typ der gr_search-Referenz ist das Interface
" Der dynamische Typ der gr_search-Referenz ist der Typ,
" der der Interface-Referenz zugewiesen wurde.
" Im Grunde ist eine Interface-Referenz wie eine
" Objektreferenz mit einem Filter, da nur die
" Methoden ansprechbar sind, die im Interface definiert wurden.
" Up-Cast - Spricht mit der Katze
" Durch das Interface
gr_search = gr_schroedingers_katze.
gr_search->get_it(
EXPORTING
id_thing = 'Stock'
IMPORTING
et_things = gt_things ).
" Up-Cast - Spricht mit dem Hund
gr_search = gr_schroedingers_hund.
gr_search->get_it(
EXPORTING
id_thing = 'Stock'
IMPORTING
et_things = gt_things ).
LOOP AT gt_things INTO gs_things.
WRITE: / gs_things.
ENDLOOP.