Übung Schrödinger: 10 Interfaces (ABAP)
Aus MattWiki
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.