Übung Schrödinger: 08 Klassen lokal (ABAP)
Aus MattWiki
Beispielklasse aus dem Buch Schrödinger programmiert ABAP für die Definition von lokalen klassen.
REPORT zsch_matt_cmachine.
CLASS lcl_wasserbehaelter DEFINITION.
" Öffentlich sichtbar
PUBLIC SECTION.
CONSTANTS: gc_wasser_haerte_grenze TYPE f VALUE 14.
" METHODS get_wasserstand EXPORTING ed_wasserstand TYPE i.
METHODS get_wasserstand
RETURNING value(rd_wasserstand) TYPE i.
METHODS set_wasserstand
IMPORTING value(id_wasserstand) TYPE i.
METHODS check_wasser_haerte.
" Nur für Vererbung sichtbar
PROTECTED SECTION.
" Nur privat sichtbar
PRIVATE SECTION.
DATA: gd_wasserstand TYPE i,
gd_wasser_haerte TYPE f.
ENDCLASS.
CLASS lcl_wasserbehaelter IMPLEMENTATION.
METHOD get_wasserstand.
rd_wasserstand = me->gd_wasserstand.
ENDMETHOD.
METHOD set_wasserstand.
me->gd_wasserstand = id_wasserstand.
ENDMETHOD.
METHOD check_wasser_haerte.
IF me->gd_wasser_haerte > gc_wasser_haerte_grenze.
MESSAGE 'AU, das tut weh!' TYPE 'I'.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS lcl_kaffeevollautomat DEFINITION.
PUBLIC SECTION.
CLASS-DATA: anz_kva TYPE i.
CLASS-METHODS: class_constructor.
CLASS-METHODS: erhoehe_anz_kva.
METHODS: constructor.
METHODS: ein_kaffee_sil_vous_plait
IMPORTING
value(id_expresso) TYPE abap_bool OPTIONAL
value(id_verlaengerter) TYPE abap_bool OPTIONAL.
METHODS: bohne_nachfuellen
IMPORTING
ir_bohne TYPE REF TO zcl_matt_cbean.
METHODS: on_loaded FOR EVENT loaded OF zcl_matt_cbeanbox.
PRIVATE SECTION.
DATA: gd_wasserstand TYPE i,
gr_wasserbehaelter TYPE REF TO lcl_wasserbehaelter,
gr_bohnenbehaelter TYPE REF TO zcl_matt_cbeanbox.
ENDCLASS.
CLASS lcl_kaffeevollautomat IMPLEMENTATION.
METHOD class_constructor.
ENDMETHOD.
METHOD constructor.
CALL METHOD erhoehe_anz_kva.
CREATE OBJECT me->gr_wasserbehaelter.
me->gr_wasserbehaelter->set_wasserstand( id_wasserstand = 1000 ).
CREATE OBJECT me->gr_bohnenbehaelter.
" Events vom Bohnenbehälter im KVA registrieren
SET HANDLER me->on_loaded FOR me->gr_bohnenbehaelter.
ENDMETHOD.
METHOD ein_kaffee_sil_vous_plait.
ENDMETHOD.
METHOD erhoehe_anz_kva.
" Verschiedene Arten auf statische Attribute zuzugreifen:
anz_kva = anz_kva + 1.
lcl_kaffeevollautomat=>anz_kva = lcl_kaffeevollautomat=>anz_kva - 1.
ADD 1 TO lcl_kaffeevollautomat=>anz_kva.
ENDMETHOD.
METHOD bohne_nachfuellen.
me->gr_bohnenbehaelter->insert_bean( ir_cbean = ir_bohne ).
ENDMETHOD.
METHOD on_loaded.
"MESSAGE 'Bohnenbehälter ist voll.' TYPE 'I'.
ENDMETHOD.
ENDCLASS.
" Objektreferenz ist eine Variable, die die Speicheradresse
" eines Objekts enthält.
" Variablen, die Objekte enthalten, können nur als Objektreferenz
" angelegt werden.
" Deklaration einer Objektreferenz vom Objekttyp lcl_kaffeevollautomat
DATA: gr_kva_zuhause TYPE REF TO lcl_kaffeevollautomat,
gr_kva_arbeit TYPE REF TO lcl_kaffeevollautomat,
gr_arabica_bohne TYPE REF TO zcl_matt_cbean,
gd_zubereitungsart TYPE char40.
START-OF-SELECTION.
" Objektinstanzierung
CREATE OBJECT gr_kva_zuhause.
CREATE OBJECT gr_kva_arbeit.
DO 7150 TIMES.
CREATE OBJECT gr_arabica_bohne.
gr_kva_zuhause->bohne_nachfuellen( ir_bohne = gr_arabica_bohne ).
ENDDO.