Sie sind auf Seite 1von 73

Integrata - SAP objektorientierte Programmierung 1

1. Grundlagen der Objektorientierung....................................................................................1


2. Umsetzung der lokalen Klassen in globale Klassen...........................................................5
3. Konstruktorenverwendung in einem neuen Programm zbeispiel2_00...............................9
4. Thema Vererbung..............................................................................................................10
5. Ereignisse..........................................................................................................................12
6. Interfaces...........................................................................................................................13
7. Thema Pointer und Referenzen.........................................................................................15
8. Legen Sie eine BadI-Schnittstelle an................................................................................16
9. Kontrolle der Schnittstelle im Class builder.....................................................................19
10. Legen Sie das Testprogramm an...................................................................................20
11. Legen Sie eine Implementierung an.............................................................................23
12. Abwicklung shared objects...........................................................................................25
13. Legen Sie einen Schalter an..........................................................................................31
14. Legen Sie eine Business Function an............................................................................34
15. Steuern Sie den Badi als schaltbare Einheit..................................................................36
16. Arbeiten mit Erweiterungen in globalen Klassen.........................................................39
17. Wiederholung der Grundlagen Teil 1............................................................................45
18. Umsetzung der lokalen Klasse in eine Globale............................................................48
19. Transaktionscode zum Methodenaufruf zuordnen........................................................51
20. Wiederholung der Grundlagen Vererbung Teil 2..........................................................53
21. Umsetzung der lokalen Klassen in Globale..................................................................55
22. Wiederholung der Grundlagen Interfaces Teil 3...........................................................56
23. Wiederholung der Grundlagen Interfaces Teil 4...........................................................57
24. Abstrakte Klassen.........................................................................................................58
25. Freunde.........................................................................................................................59
26. Ausnahmeklassen in der Objektorientierung................................................................60
27. Legen Sie eine globale Klasse an..................................................................................62
Ausnahme wenn beim addieren count > 10 ist.........................................................................66

1. Grundlagen der Objektorientierung

>Doppelklick auf die markierte Zeile<


Integrata - SAP objektorientierte Programmierung 2

>zbeispiel1_00 00 = Gruppe anlegen<

>sichern<
>lokales Objekt<

Betten Sie folgenden Codeblock ein

--------- Codeblock 1 -------------


*&---------------------------------------------------------------------*
*& Report ZBEISPIEL1_00
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
Integrata - SAP objektorientierte Programmierung 3

REPORT ZBEISPIEL1_00.

* Klassen sind Vorlagen fr Objekte.


* Umgekehrt kann man auch den Typ eines Objekts als seine Klasse bezeichnen
.
* Eine Klasse ist eine abstrakte Darstellung oder bildlich gesehen eine Bau
anleitung
* fr Objekte.
* Zur Beschreibung der Eigenschaften von Objekten enthalten Klassen Kompone
nten,
* welche den Zustand und das Verhalten von Objekten definieren.

* Lokale Klassen bestehen aus ABAP-Quelltext, der innerhalb der Anweisungen


CLASS - ENDCLASS
* eingeschlossen ist.
* Eine vollstndige Klassendefinition besteht aus einem Deklarationsteil un
d falls erforderlich aus
* einem Implementationsteil.
* Der Deklarationsteil enthlt die Deklaration aller Komponenten (Attribute
, Methoden, Ereignisse)
* einer Klasse.
* Bei lokalen Klassen gehrt der Deklarationsteil von Klassen zu den global
en Datendeklarationen und
* sollte deshalb auch am Anfang des Programms stehen.
* Falls im Deklarationsteil einer Klasse Methoden deklariert werden, benti
gt die Klasse auch einen
* Implementationsteil. Dieser besteht aus einem Anweisungsblock

CLASS counter DEFINITION.

* Public Section
*
* Alle im ffentlichen Abschnitt deklarierten Komponenten
* sind fr alle Verwender sowie in den Methoden aller Erben
* und der Klasse selbst ansprechbar.
* Die ffentlichen Komponenten stellen die Schnittstelle
* der Klasse zu jedem Verwender dar.

PUBLIC SECTION.

* Methoden sind klasseninterne Prozeduren, die das Verhalten eines


* Objekts bestimmen.
* Sie haben Zugriff auf alle Attribute ihrer Klasse und knnen
* somit den Zustand eines Objekts verndern.
* Methoden haben eine Parameterschnittstelle, ber die sie beim
* Aufruf mit Werten versorgt werden und ber die sie Werte an
* den Aufrufer zurckgeben knnen.
* Die privaten Attribute einer Klasse knnen nur durch Methoden
* der gleichen Klasse gendert werden.

* Bezglich Definition und Parameterbergabe hneln Methoden


* den bisherigen Funktionsbausteinen.
* Eine Methode meth wird im Deklarationsteil einer Klasse deklariert
* und im teil der Klasse durch den Verarbeitungsblock

METHODS: set IMPORTING value(set_value) TYPE i,


increment,
get EXPORTING value(get_value) TYPE i.

* Private Section
*
Integrata - SAP objektorientierte Programmierung 4

* Alle im privaten Abschnitt deklarierten Komponenten sind nur


* in den Methoden der Klasse selbst ansprechbar und auch nicht
* fr die Erben sichtbar.
* Die privaten Komponenten stellen somit keine Schnittstelle zu den
* Verwendern der Klasse dar.

PRIVATE SECTION.

DATA count TYPE i.


ENDCLASS.

CLASS counter IMPLEMENTATION.


METHOD set.
count = set_value.
ENDMETHOD.
METHOD increment.
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.

DATA number TYPE i VALUE 5.

* Klassenreferenzen werden vollstndig mit dem Zusatz


* ... TYPE REF TO class
* der TYPES- oder DATA-Anweisung definiert, wobei class eine Klasse bezeich
net.
* Eine Referenzvariable vom Typ Klassenreferenz heit Klassenreferenzvariab
le
* oder ebenfalls kurz Klassenreferenz.

DATA cnt TYPE REF TO counter.

START-OF-SELECTION.

Break pwd.

* Die Anweisung CREATE OBJECT erzeugt eine Instanz einer Klasse bzw. ein Ob
jekt
* und weist die Referenz auf das Objekt der Referenzvariablen oref zu.
* Direkt nach der Erzeugung des Objekts wird der Instanzkonstruktor
* der Klasse ausgefhrt.

CREATE OBJECT cnt.

CALL METHOD cnt->set EXPORTING set_value = number.

DO 3 TIMES.
CALL METHOD cnt->increment.
ENDDO.

CALL METHOD cnt->get IMPORTING get_value = number.

WRITE number.

Neue Schreibweise
Integrata - SAP objektorientierte Programmierung 5

CREATE OBJECT cnt.

cnt->set( EXPORTING set_value = number ).

DO 3 TIMES.
cnt->increment( ).
ENDDO.

cnt->get( IMPORTING get_value = number ).

WRITE number.

Debuggen Sie ihr Programm

Dann zurck zum Easy Access

2. Umsetzung der lokalen Klassen in globale Klassen

> <

> <
Integrata - SAP objektorientierte Programmierung 6

>

<

> <

> <

> <
Integrata - SAP objektorientierte Programmierung 7

> <

> <

> <

> <
Integrata - SAP objektorientierte Programmierung 8

> <

> <

Attribute , Methoden und Paramter sichten und testen

Im Testprogramm Zeile anpassen und testen

> <
Integrata - SAP objektorientierte Programmierung 9

3. Konstruktorenverwendung in einem neuen Programm


zbeispiel2_00
--------- Codeblock 2 -------------

CLASS counter DEFINITION.


PUBLIC SECTION.
METHODS: constructor IMPORTING value(set_value) TYPE i,
increment,
get EXPORTING value(get_value) TYPE i.
PRIVATE SECTION.
DATA count TYPE i.
ENDCLASS.

CLASS counter IMPLEMENTATION.


METHOD constructor.
count = set_value.
ENDMETHOD.
METHOD increment.
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.

DATA number TYPE i VALUE 5.


DATA cnt TYPE REF TO counter.

START-OF-SELECTION.

Break pwd.
CREATE OBJECT cnt EXPORTING set_value = number.

DO 3 TIMES.
CALL METHOD cnt->increment.
ENDDO.

CALL METHOD cnt->get IMPORTING get_value = number.

WRITE number.
Integrata - SAP objektorientierte Programmierung 10

>anlegen<

4. Thema Vererbung

>sichern<
>lokales Objekt<
Integrata - SAP objektorientierte Programmierung 11

CLASS counter DEFINITION.


PUBLIC SECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
increment,
get EXPORTING value(get_value) TYPE i.
PROTECTED SECTION.
DATA count TYPE i.
ENDCLASS.

CLASS counter IMPLEMENTATION.


METHOD set.
count = set_value.
ENDMETHOD.
METHOD increment.
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.

CLASS counter_ten DEFINITION INHERITING FROM counter.


PUBLIC SECTION.
METHODS increment REDEFINITION.
DATA count_ten(1) TYPE c.
ENDCLASS.

CLASS counter_ten IMPLEMENTATION.


METHOD increment.
DATA modulo TYPE i.
CALL METHOD super->increment.
WRITE / count.
modulo = count MOD 10.
IF modulo = 0.
count_ten = count_ten + 1.
WRITE count_ten.
ENDIF.
ENDMETHOD.
ENDCLASS.

DATA: count TYPE REF TO counter,


number TYPE i VALUE 5.

START-OF-SELECTION.

CREATE OBJECT count TYPE counter_ten.

CALL METHOD count->set EXPORTING set_value = number.

DO 20 TIMES.
CALL METHOD count->increment.
ENDDO.
Integrata - SAP objektorientierte Programmierung 12

5. Ereignisse

>anlegen<

CLASS counter DEFINITION.


PUBLIC SECTION.
METHODS increment_counter.
EVENTS critical_value EXPORTING value(excess) TYPE i.
PRIVATE SECTION.
DATA: count TYPE i,
threshold TYPE i VALUE 10.
ENDCLASS.

CLASS counter IMPLEMENTATION.


METHOD increment_counter.
DATA diff TYPE i.
ADD 1 TO count.
IF count > threshold.
diff = count - threshold.
RAISE EVENT critical_value EXPORTING excess = diff.
ENDIF.
ENDMETHOD.
ENDCLASS.

CLASS handler DEFINITION.


PUBLIC SECTION.
METHODS handle_excess FOR EVENT critical_value OF counter
IMPORTING excess.
ENDCLASS.

CLASS handler IMPLEMENTATION.


METHOD handle_excess.
WRITE: / 'Excess is', excess.
ENDMETHOD.
ENDCLASS.

DATA: r1 TYPE REF TO counter,


h1 TYPE REF TO handler.

START-OF-SELECTION.

CREATE OBJECT: r1, h1.

* Mit diesem Zusatz werden die Ereignisbehandler der Liste handler1 handler2 ...
* fr alle Objekte registriert, deren Ereignisse sie behandeln knnen.
Integrata - SAP objektorientierte Programmierung 13

* Das sind alle Objekte, deren Klassen gleich class oder Unterklasse von class sind
* bzw. das Interface intf direkt oder ber eine Oberklasse implementieren.
* Diese Registrierung gilt auch fr alle auslsenden Instanzen, die erst nach der Anweisung SET HANDLER erzeugt werden

SET HANDLER h1->handle_excess FOR ALL INSTANCES.

DO 20 TIMES.
CALL METHOD r1->increment_counter.
ENDDO.

6. Interfaces

* Klassen, deren Objektinstanzen, und der Zugriff ber Referenzvariablen bilden die Grundlage von
* ABAP Objects. Allein mit diesen Mitteln ist es schon mglich typische Business-Anwendungen mit
* Objekten wie Kunde, Auftrag, Position, Rechnung usw., zu modellieren und mit ABAP Objects zu*
* implementieren.
* Es kommt aber oft vor, dass hnliche Klassen eine gleichartige Funktionalitt zur Verfgung stellen
mssen,
* die zwar unterschiedlich in den einzelnen Klassen kodiert ist, aber vom Benutzer mit der gleichen
Schnittstelle aufgerufen werden soll.
* Beispielsweise knnen wir uns die hnlichen Klassen Sparkonto und Girokonto vorstellen, die beide
eine Methode zur Berechnung des Jahresabschlusses anbieten. Schnittstelle und Name der Methode
sind gleich, die eigentliche Implementierung ist jedoch unterschiedlich.
* Weiterhin mchte der Benutzer dieser Klassen, bzw. deren Instanzen, den Jahresabschluss fr alle
Konten durchfhren, ohne sich darum zu kmmern, welche Kontoart vorliegt.

INTERFACE status.
METHODS write.
ENDINTERFACE.

CLASS counter DEFINITION.


PUBLIC SECTION.
INTERFACES status.
METHODS increment.
PRIVATE SECTION.
DATA count TYPE i.
ENDCLASS.

CLASS counter IMPLEMENTATION.


METHOD status~write.
WRITE: / 'Count in counter is', count.
ENDMETHOD.
METHOD increment.
ADD 1 TO count.
ENDMETHOD.
ENDCLASS.

CLASS bicycle DEFINITION.


PUBLIC SECTION.
INTERFACES status.
METHODS drive.
PRIVATE SECTION.
DATA speed TYPE i.
ENDCLASS.

CLASS bicycle IMPLEMENTATION.


METHOD status~write.
WRITE: / 'Speed of bicycle is', speed.
ENDMETHOD.
METHOD drive.
ADD 10 TO speed.
ENDMETHOD.
ENDCLASS.

DATA: count TYPE REF TO counter,


bike TYPE REF TO bicycle,
status TYPE REF TO status,
status_tab TYPE TABLE OF REF TO status.

START-OF-SELECTION.
Integrata - SAP objektorientierte Programmierung 14

CREATE OBJECT: count, bike.

DO 5 TIMES.
CALL METHOD: count->increment,
bike->drive.
ENDDO.

APPEND: count TO status_tab,


bike TO status_tab.

LOOP AT status_tab INTO status.


CALL METHOD status->write.
ENDLOOP.

Global umsetzen
Integrata - SAP objektorientierte Programmierung 15

7. Thema Pointer und Referenzen


CLASS counter DEFINITION.
PUBLIC SECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
increment,
get EXPORTING value(get_value) TYPE i.
PRIVATE SECTION.
DATA count TYPE i.
ENDCLASS.

CLASS counter IMPLEMENTATION.


METHOD set.
count = set_value.
ENDMETHOD.
METHOD increment.
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.

DATA: cnt_1 TYPE REF TO counter,


cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter,
cnt_tab TYPE TABLE OF REF TO counter.

DATA number TYPE i.

START-OF-SELECTION.

CREATE OBJECT: cnt_1,


cnt_2.

MOVE cnt_2 TO cnt_3.

CLEAR cnt_2.

cnt_3 = cnt_1.

CLEAR cnt_3.

APPEND cnt_1 TO cnt_tab.

CREATE OBJECT: cnt_2,


cnt_3.

APPEND: cnt_2 TO cnt_tab,


cnt_3 TO cnt_tab.

CALL METHOD cnt_1->set EXPORTING set_value = 1.

CALL METHOD cnt_2->set EXPORTING set_value = 10.

CALL METHOD cnt_3->set EXPORTING set_value = 100.

DO 3 TIMES.
CALL METHOD: cnt_1->increment,
cnt_2->increment,
cnt_3->increment.
ENDDO.

LOOP AT cnt_tab INTO cnt_1.


CALL METHOD cnt_1->get IMPORTING get_value = number.
WRITE / number.
ENDLOOP.
Integrata - SAP objektorientierte Programmierung 16

8. Legen Sie eine BadI-Schnittstelle an

> <

> <
Integrata - SAP objektorientierte Programmierung 17

> <

> <

> <

Karte > < ziehen

> <

> <

> <
Integrata - SAP objektorientierte Programmierung 18

> <

> <
> <
> <

> <> <


Integrata - SAP objektorientierte Programmierung 19

> <

9. Kontrolle der Schnittstelle im Class builder

> <

> <
Integrata - SAP objektorientierte Programmierung 20

>Kontrolle<

10. Legen Sie das Testprogramm an

> <

> <
Integrata - SAP objektorientierte Programmierung 21

> <
> <
> <

Coding einbetten --------

*&---------------------------------------------------------------------*
*& Report ZBADI_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZBADI_TEST .

tables: spfli.

data: wa_spfli type spfli,


it_spfli type table of spfli with key carrid connid.

*Initialise the object of the interface.

selection-screen begin of block b1.


select-options: s_carr for spfli-carrid.
selection-screen end of block b1.

start-of-selection.
select * from spfli into corresponding fields of table it_spfli
where carrid in s_carr.

end-of-selection.
loop at it_spfli into wa_spfli.
write:/ wa_spfli-carrid,
wa_spfli-connid,
wa_spfli-cityfrom,
wa_spfli-deptime,
wa_spfli-arrtime.

hide: wa_spfli-carrid, wa_spfli-connid.

endloop.

at line-selection.
check not wa_spfli-carrid is initial.
clear wa_spfli.

Coding Ende
Coding testen
Integrata - SAP objektorientierte Programmierung 22

Coding Block 2 einbetten ----------

*Initialise the object of the interface.


*data: exit_ref1 type ref to ZBADI_SPFLI_00.

get badi exit_ref1.


call badi exit_ref1->lineselection
EXPORTING
i_carrid = wa_spfli-carrid
i_connid = wa_spfli-connid.

Coding Ende vor clear wa_spfli.


Coding testen
Integrata - SAP objektorientierte Programmierung 23

11. Legen Sie eine Implementierung an

> <

> <

> <

> <
Integrata - SAP objektorientierte Programmierung 24

> <
> <

> < Doppelt anklicken

> <x2
> <
Integrata - SAP objektorientierte Programmierung 25

Methoden ABAP-Code

data : wa_flights type sflight,


it_flights type table of sflight.

format color col_heading.


write:/ 'Flight info of:', i_carrid, i_connid.
format color col_normal.

select * from sflight


into corresponding fields of table it_flights
where carrid = i_carrid
and connid = i_connid.

loop at it_flights into wa_flights.


write:/ wa_flights-fldate,
wa_flights-planetype,
wa_flights-price currency wa_flights-currency,
wa_flights-seatsmax,
wa_flights-seatsocc.
endloop.

>aktivieren<
>Programm testen<

12. Abwicklung shared objects

> <
Integrata - SAP objektorientierte Programmierung 26

> <

> <
>lokales Objekt<

> <
Integrata - SAP objektorientierte Programmierung 27

>doppelklick auf add_message<

DATA: l_message LIKE LINE OF messages.

l_message-text = i_message_text.
GET TIME.
l_message-date = sy-datum.
l_message-time = sy-uzeit.
l_message-user = sy-uname.
INSERT l_message INTO TABLE messages.
DESCRIBE TABLE messages.
WHILE sy-tfill > c_max_messages.
DELETE messages INDEX 1.
DESCRIBE TABLE messages.
ENDWHILE.

Code einbinden und sichern.


2.Modus erffnen

> <

> <

> <
>lokales Objekt<

type-pool zch20 .
types: begin of zch20_ty_message,
date type sydatum,
Integrata - SAP objektorientierte Programmierung 28

time type syuzeit,


user type syuname,
text type string,
end of zch20_ty_message.
types: zch20_ty_message_t type sorted table of zch20_ty_message
with non-unique key date time.

Im 1.Modus

><

> <

>Doppelklick auf Methode<

DATA: l_message LIKE LINE OF messages.

CLEAR sy-lsind.
LOOP AT messages INTO l_message.
WRITE: / l_message-date,
l_message-time,
l_message-user,
l_message-text.
ENDLOOP.

> <
Integrata - SAP objektorientierte Programmierung 29

>sichern<

><

><
report z_chat_20 no standard page heading.
*&------------------------------------------------------*
*& Report Z640_011
*&------------------------------------------------------*
include <ICON>.
data: area type ref to zl_chat_area_20,
messages type ref to zcl_chat_messages_20,
error type ref to object,
error_msg type ref to if_message,
errtext type string,
x field_name type char72,
message_text type text80.

start-of-selection.
try.
area = zl_chat_area_20=>attach_for_read( ).
catch cx_shm_attach_error.
try.
area = zl_chat_area_20=>attach_for_write( ).
create object messages area handle area.
area->set_root( messages ).
area->detach_commit( ).
area = zl_chat_area_20=>attach_for_read( ).
catch cx_shm_attach_error into error.
perform error.
endtry.
endtry.
try.
area->root->list_messages( ).
area->detach( ).
catch cx_shm_attach_error.
Integrata - SAP objektorientierte Programmierung 30

perform error.
endtry.
perform input.

at line-selection.
get cursor field field_name.
case field_name.
when 'ICON_CREATE_TEXT'.
message_text = sy-lisel+33(80).
check not message_text is initial.
try.
area = zl_chat_area_20=>attach_for_update( ).
area->root->add_message( message_text ).
clear message_text.
area->root->list_messages( ).
area->detach_commit( ).
catch cx_shm_attach_error into error.
perform error.
endtry.
perform input.
when 'ICON_REFRESH'.
try.
area = zl_chat_area_20=>attach_for_read( ).
area->root->list_messages( ).
area->detach( ).
catch cx_shm_attach_error into error.
perform error.
endtry.
perform input.
endcase.

*&------------------------------------------------------*
*& Form error
*&------------------------------------------------------*
form error.
error_msg ?= error.
errtext = error_msg->get_text( ).
write: / errtext.
stop.
endform. " error

*&------------------------------------------------------*
*& Form input
*&------------------------------------------------------*
form input .
get time.
write: / sy-datum,
sy-uzeit,
sy-uname,
message_text input,
icon_create_text as icon hotspot,
icon_refresh as icon hotspot.
endform. " input

Beispielcoding...
Integrata - SAP objektorientierte Programmierung 31

13. Legen Sie einen Schalter an

>SFW1<

> <

> <
Integrata - SAP objektorientierte Programmierung 32

> <

> <

> <
> <

> <
Integrata - SAP objektorientierte Programmierung 33

> <

> <

>Zeile markieren<
> <
Integrata - SAP objektorientierte Programmierung 34

>Paket zuordnen<

> <
> <

14. Legen Sie eine Business Function an

>sfw2<
Integrata - SAP objektorientierte Programmierung 35

> <

> <

> <
Integrata - SAP objektorientierte Programmierung 36

> <

> <

Doppelklick auf die relevante Zeile

> <
> <
> x 3<

15. Steuern Sie den Badi als schaltbare Einheit

>Programmtest ohne Schalter<


Integrata - SAP objektorientierte Programmierung 37

> <

>umhngen des Repositoryobjektes<

> <

> <

> <

>Erneuter Programmtest< dann Schalter auf Stand-by<


Integrata - SAP objektorientierte Programmierung 38

><

>aktivieren<
>Testen der schaltbaren Einheit<
Integrata - SAP objektorientierte Programmierung 39

16. Arbeiten mit Erweiterungen in globalen Klassen


Beim Anlegen einer Methode pre/post/overwrite wird eine lokale Klasse mit Namen
lcl_<Erweiterungsname> fr die Erweiterung <Erweiterungsname> erzeugt.
Diese lokale Klasse wird an das Ende des Implementierungsabschnitts fr lokale Klassen in
der ursprnglichen Klasse angehngt (als eine Erweiterung der vordefinierten
Erweiterungsoption).
Sie knnen die Komponenten der ursprnglichen Klasse in lcl_<Erweiterungsname>
ber die Objektreferenz CORE_OBJECT ansprechen.
Die lokale Klasse lcl_<Erweiterungsname> kann drei Imterfaces implementieren:
IPR_<Erweiterungsname> fr pre-Methoden;
IPO_<Erweiterungsname> fr post-Methoden;
IOW_<Erweiterungsname> fr overwrite-Methoden;
Die Parameter der Methoden pre/post/overwrite entsprechen weitestgehend den
Parametern der ursprnglichen Methode

>dieses Beispiel umsetzen als globale Klasse<

> <

> <
Integrata - SAP objektorientierte Programmierung 40

><

- Klasse mit ZCL_count_ beginnen


- Zeile markieren

> <

>Lokales Objekt<

>aktivieren<
>enter<

>Testen<

im Programm anpassen

>Adressregistervariable anpassen<
>aktivieren<
>testen<
>zurck<
>ber die Navigation in den Class Builder einsteigen<
Integrata - SAP objektorientierte Programmierung 41

>DATA cnt TYPE REF TO zcl_count_00.< zcl_count_00 doppelt anklicken

> <

>lokales Objekt<
>enter<

auf die Set Methodenzeile klicken

> <

> <
Integrata - SAP objektorientierte Programmierung 42

> <

CLASS LCL_ZCL_COUNT_20 DEFINITION.


PUBLIC SECTION.
* Adressregistervariable obj auf lokale klasse
*
CLASS-DATA OBJ TYPE REF TO LCL_ZCL_COUNT_20.
* Adressregistervariable core_object auf basis
*
DATA CORE_OBJECT TYPE REF TO ZCL_COUNT_20 .
* Interface enthlt pre
*
INTERFACES IPR_ZCL_COUNT_20.
METHODS:
* verbindung pre und aktuelle instanz
*
CONSTRUCTOR IMPORTING CORE_OBJECT
TYPE REF TO ZCL_COUNT_20 OPTIONAL.
ENDCLASS.
CLASS LCL_ZCL_COUNT_20 IMPLEMENTATION.
METHOD CONSTRUCTOR.
ME->CORE_OBJECT = CORE_OBJECT.
ENDMETHOD.

METHOD IPR_ZCL_COUNT_20~SET.
*"---------------------------------------------------------------------*
*" Declaration of method - do not insert any comments here please!
*"
*"methods SET
*" importing
*" value(SET_VALUE) type I .
*"---------------------------------------------------------------------*
CORE_OBJECT->count = set_value.
ENDMETHOD.
ENDCLASS.

>prfen<
>sichern<
>zurck<
Integrata - SAP objektorientierte Programmierung 43

> <

>relevante Zeile auf Kommentar setzen<


>aktivieren<

> <

> <
> <

> <
Integrata - SAP objektorientierte Programmierung 44

> <

> <

> <

> <
Integrata - SAP objektorientierte Programmierung 45

17. Wiederholung der Grundlagen Teil 1


======================= Selektionspopup ==================
*---------------------------------------------------------------------*
* Global Selection Screen
*---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF SCREEN 100 AS WINDOW TITLE text-100.


PARAMETERS: button1 RADIOBUTTON GROUP grp,
button2 RADIOBUTTON GROUP grp,
button3 RADIOBUTTON GROUP grp,
button4 RADIOBUTTON GROUP grp.
SELECTION-SCREEN END OF SCREEN 100.
*---------------------------------------------------------------------*
* CLASS vessel DEFINITION
*---------------------------------------------------------------------*
* Superclass definition *
*---------------------------------------------------------------------*
CLASS vessel DEFINITION.
PUBLIC SECTION.
*
* Augenmerk : Constructor
* ========================
METHODS: constructor,
drive IMPORTING speed_up TYPE i,
*
* Augenmerk : Returning
* ========================
get_id RETURNING value(id1) TYPE i.
PROTECTED SECTION.
DATA: speed TYPE i,
max_speed TYPE i VALUE 100.
PRIVATE SECTION.
*
* Augenmerk : Class-Data
* ========================
CLASS-DATA object_count TYPE i.
DATA id TYPE i.
ENDCLASS.

*---------------------------------------------------------------------*
* CLASS vessel IMPLEMENTATION
*---------------------------------------------------------------------*
* Superclass implementation *
*---------------------------------------------------------------------*
CLASS vessel IMPLEMENTATION.
METHOD constructor.
object_count = object_count + 1.
id = object_count.
ENDMETHOD.
METHOD drive.
speed = speed + speed_up.
IF speed > max_speed.
speed = max_speed.
ENDIF.
write: / 'Speed is: ', speed.
ENDMETHOD.
METHOD get_id.
id1 = id.
Integrata - SAP objektorientierte Programmierung 46

ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS main DEFINITION
*---------------------------------------------------------------------*
* Main class definition *
*---------------------------------------------------------------------*
CLASS main DEFINITION.
PUBLIC SECTION.
*
* Augenmerk: Class Methods
*`=========================
CLASS-METHODS: start,
Objects.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS main IMPLEMENTATION
*---------------------------------------------------------------------*
* Main class implementation *
*---------------------------------------------------------------------*
CLASS main IMPLEMENTATION.

METHOD start.
CALL SELECTION-SCREEN 100 STARTING AT 10 3
ENDING AT 42 7.
IF sy-subrc NE 0.
EXIT.
ELSEIF button1 = 'X'.
CALL METHOD objects.
endif.
Endmethod.
METHOD objects.
DATA: vessel1 TYPE REF TO zcl_vessel_00,
vessel2 TYPE REF TO zcl_vessel_00.
DATA: vessel_id TYPE i.
CREATE OBJECT: vessel1,
vessel2.
*
* Augenmerk : Importparameter bergabe
* ====================================
CALL METHOD: vessel1->drive( 50 ),
vessel2->drive( 80 ).
*
* Augenmerk : Verwendung als Funktion
* ====================================
vessel_id = vessel1->get_id( ).
WRITE: / 'Vessel ID is', vessel_id.
vessel_id = vessel2->get_id( ).
WRITE: / 'Vessel ID is', vessel_id.
ENDMETHOD.
Endclass.
*---------------------------------------------------------------------*
* System event START-OF-SELECTION
*---------------------------------------------------------------------*
* Triggered by the ABAP runtime environment automatically *
*---------------------------------------------------------------------*

START-OF-SELECTION.
CALL METHOD main=>start.

======= Erluterungsteil
Integrata - SAP objektorientierte Programmierung 47

*
* Augenmerk : Constructor
* ========================
Jede Klasse hat eine vordefinierte Methode namens constructor. Der Instanzkonstruktor wird
fr jede Instanz einer Klasse genau einmal durch die Anweisung CREATE OBJECT direkt
nach ihrer Erzeugung aufgerufen.

*
* Augenmerk : Returning
* ========================
Statt der Zustze EXPORTING und CHANGING hat eine funktionale Methode einen
Zusatz RETURNING, der genau einen Formalparameter r als Rckgabewert definiert. Der
Rckgabewert muss mit VALUE per Wert bergeben werden.

*
* Augenmerk : Class-Data
* ========================
Die Anweisung CLASS-DATA kann nur im Deklarationsteil einer Klasse oder eines
Interfaces verwendet werden. Sie deklariert ein statisches Attribut attr, dessen Gltigkeit
nicht an Instanzen einer Klasse, sondern an die Klasse selbst gebunden ist. Alle Instanzen der
Klasse und ihrer Unterklassen greifen gemeinsam auf ein statisches Attribut zu.

*
* Augenmerk: Class Methods
*`=========================
Die Anweisung CLASS-METHODS deklariert eine statische Methode meth. Fr den Namen
meth gelten die Namenskonventionen. Statische Methoden knnen ber den
Klassenkomponenten-Selektor (=>) unabhngig von Objekten verwendet werden
Integrata - SAP objektorientierte Programmierung 48

18. Umsetzung der lokalen Klasse in eine Globale


>

<

> <

> <
Integrata - SAP objektorientierte Programmierung 49

> <

> <

> <

> <

> <

> <

Integration der globalen Klasse und Debugging mit Instanzenkontrolle


Integrata - SAP objektorientierte Programmierung 50

> < Unterschied Instanzenattribut / staisches Attribut erkennen

> < Unterschied der Sichtbarkeiten erkennen

> < Perspektiven testen


Integrata - SAP objektorientierte Programmierung 51

19. Transaktionscode zum Methodenaufruf zuordnen


>

<

>
<
Integrata - SAP objektorientierte Programmierung 52

> <

> <

> <

> <
Integrata - SAP objektorientierte Programmierung 53

20. Wiederholung der Grundlagen Vererbung Teil 2


Kopieren Sie Programm 1

> <

> <x2

> <

> < neue Zeile

=========== Codeblock integrieren

ELSEIF button2 = 'X'.


CALL METHOD inheritance.

> <
Integrata - SAP objektorientierte Programmierung 54

=========== Codeblock integrieren


METHOD inheritance.
DATA: ship TYPE REF TO zcl_ship_00.
CREATE OBJECT ship EXPORTING name1 = 'Titanic'.
CALL METHOD ship->drive( 10 ).
*
* Augenmerk : Verwendung als Interfacemethode
* ====================================
CALL METHOD ship->zif_status_00~write.
ENDMETHOD.

=========== Codeblock integrieren

*---------------------------------------------------------------------*
* INTERFACE status
*---------------------------------------------------------------------*
* Interface definition *
*---------------------------------------------------------------------*
INTERFACE status.
METHODS write.
ENDINTERFACE.

=========== Codeblock integrieren

*---------------------------------------------------------------------*
* CLASS ship DEFINITION
*---------------------------------------------------------------------*
* Subclass definition *
*---------------------------------------------------------------------*
CLASS ship DEFINITION INHERITING FROM vessel.
PUBLIC SECTION.
INTERFACES status.
DATA name TYPE string.
METHODS: constructor IMPORTING name1 TYPE string,
drive REDEFINITION.
EVENTS emergency_call.
ENDCLASS.

*---------------------------------------------------------------------*
* CLASS ship IMPLEMENTATION
*---------------------------------------------------------------------*
* Subclass implementation *
*---------------------------------------------------------------------*
CLASS ship IMPLEMENTATION.
METHOD constructor.
CALL METHOD super->constructor.
max_speed = 30.
name = name1.
ENDMETHOD.
METHOD status~write.
DATA id1.
id1 = get_id( ).
WRITE: / name, 'is vessel', id1,
'and has speed', speed.
ENDMETHOD.
METHOD drive.
speed = speed + speed_up.
IF speed > max_speed.
max_speed = 0.
speed = 0.
Integrata - SAP objektorientierte Programmierung 55

RAISE EVENT emergency_call.


ENDIF.
ENDMETHOD.
ENDCLASS.

21. Umsetzung der lokalen Klassen in Globale


>

<

Umsetzen des Programmes


Integrata - SAP objektorientierte Programmierung 56

22. Wiederholung der Grundlagen Interfaces Teil 3

> <

======== Codeblock integrieren

METHOD interfaces.
DATA: status_tab TYPE TABLE OF REF TO zif_status_00,
status TYPE REF TO zif_status_00.
DATA: ship TYPE REF TO zcl_ship_00,
station TYPE REF TO coast_guard.
CREATE OBJECT: ship EXPORTING name1 = 'Titanic'.
APPEND ship TO status_tab.
CREATE OBJECT station.
APPEND station TO status_tab.
LOOP AT status_tab INTO status.
CALL METHOD status->write.
ENDLOOP.
ENDMETHOD.

========== Codeblock integrieren

*---------------------------------------------------------------------*
* Event handler definition *
*---------------------------------------------------------------------*
CLASS coast_guard DEFINITION.
PUBLIC SECTION.
INTERFACES zif_status_00.
*
* Beim Auslsen des Ereignisses mit der Anweisung RAISE EVENT bekommt
* sender implizit die Referenz auf das auslsende Objekt zugewiesen.

METHODS receive FOR EVENT emergency_call OF zcl_ship_00 IMPORTING sender.


ALIASES write FOR zif_status_00~write.
PRIVATE SECTION.
DATA caller TYPE string.
ENDCLASS.

*---------------------------------------------------------------------*
* CLASS coast_guard IMPLEMENTATION
*---------------------------------------------------------------------*
* Event handler implementation *
*---------------------------------------------------------------------*
CLASS coast_guard IMPLEMENTATION.
METHOD write.
IF caller IS INITIAL.
WRITE: / 'Coast guard received no call'.
ELSE.
WRITE: / 'Coast guard received a call from', caller.
Integrata - SAP objektorientierte Programmierung 57

ENDIF.
ENDMETHOD.
METHOD receive.
caller = sender->name.
CALL METHOD write.
ENDMETHOD.
ENDCLASS..

Umsetzen des Programmes

23. Wiederholung der Grundlagen Interfaces Teil 4


========== Codeblock integrieren

METHOD events.
DATA: ship TYPE REF TO zcl_ship_00,
station TYPE REF TO zcl_coast_guard_00.
CREATE OBJECT: ship EXPORTING name1 = 'Titanic',
station.
SET HANDLER station->receive FOR ship.
DO 5 TIMES.
CALL METHOD ship->drive( 10 ).
ENDDO.
ENDMETHOD.

> <

> <

Umsetzen und Test


Integrata - SAP objektorientierte Programmierung 58

24. Abstrakte Klassen


*&---------------------------------------------------------------------*
*& Report Z_ABSTRAKTE_KLASSEN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Z_ABSTRAKTE_KLASSEN.
*
* Durch den Zusatz ABSTRACT wird eine abstrakte Klasse class definiert.
* Von einer abstrakten Klasse knnen keine Instanzen erzeugt werden.
* Um die Instanzkomponenten einer abstrakten Klasse zu verwenden,
* muss eine konkrete Unterklasse der Klasse instanziert werden.
* ======================================================================
CLASS c1 DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS m1.
PRIVATE SECTION.
DATA a1 TYPE string VALUE `Attribute A1 of class C1`.
ENDCLASS.

CLASS c1 IMPLEMENTATION.
METHOD m1.
WRITE / a1.
ENDMETHOD.
ENDCLASS.
*
* Durch den Zusatz FINAL wird eine finale Klasse class definiert.
* Von einer finalen Klasse knnen keine Unterklassen abgeleitet werden.
* Alle Methoden einer finalen Klasse sind implizit final und drfen nicht
* explizit als final deklariert werden.
* ========================================================================
CLASS c2 DEFINITION INHERITING FROM c1 FINAL.
ENDCLASS.

DATA oref TYPE REF TO c2.

START-OF-SELECTION.

CREATE OBJECT oref.


oref->m1( ).
Integrata - SAP objektorientierte Programmierung 59

25. Freunde
*&---------------------------------------------------------------------*
*& Report Z_FRIENDS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Z_FRIENDS.
*
* Mit dem Zusatz FRIENDS macht die Klasse class die Klassen class1 class2 .
..
* bzw. die Interfaces intf1 intf2 ... zu ihren Freunden
* Die Freunde einer Klasse haben unbeschrnkten Zugriff auf
* die geschtzten und privaten Komponenten der Klasse und knnen
* uneingeschrnkt Instanzen der Klasse erzeugen.
* =========================================================================
=====
INTERFACE i1.
...
ENDINTERFACE.

CLASS c1 DEFINITION CREATE PRIVATE FRIENDS i1.


PRIVATE SECTION.
DATA a1 TYPE c LENGTH 10 VALUE 'Class 1'.
ENDCLASS.

CLASS c2 DEFINITION.
PUBLIC SECTION.
INTERFACES i1.
METHODS m2.
ENDCLASS.

CLASS c2 IMPLEMENTATION.
METHOD m2.
DATA oref TYPE REF TO c1.
CREATE OBJECT oref.
WRITE oref->a1.
ENDMETHOD.
ENDCLASS.
data: p_c2 TYPE REF TO c2.
START-of-SELECTION.
CREATE OBJECT p_c2.
p_c2->m2( ).
Integrata - SAP objektorientierte Programmierung 60

26. Ausnahmeklassen in der Objektorientierung

><

>anlegen<
Integrata - SAP objektorientierte Programmierung 61

>sichern<
>lokales Objekt<

Betten Sie folgenden Codeblock ein

--------- Codeblock 1 -------------


CLASS counter DEFINITION.
PUBLIC SECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
increment,
get EXPORTING value(get_value) TYPE i.
PRIVATE SECTION.
DATA count TYPE i.
ENDCLASS.

CLASS counter IMPLEMENTATION.


METHOD set.
count = set_value.
ENDMETHOD.
METHOD increment.
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.

DATA number TYPE i VALUE 5.


DATA cnt TYPE REF TO counter.

START-OF-SELECTION.
Integrata - SAP objektorientierte Programmierung 62

Break <ihr Username>


CREATE OBJECT cnt.

CALL METHOD cnt->set EXPORTING set_value = number.

DO 3 TIMES.
CALL METHOD cnt->increment.
ENDDO.

CALL METHOD cnt->get IMPORTING get_value = number.

WRITE number.

Debuggen Sie ihr Programm

27. Legen Sie eine globale Klasse an

><
Integrata - SAP objektorientierte Programmierung 63

>Zeile markieren<
>Importieren<
>lokales Objekt<

>anzeigen<
Integrata - SAP objektorientierte Programmierung 64

>aktivieren<
>testen<

>Instanz<
Integrata - SAP objektorientierte Programmierung 65

>ausfhren<

>Ergebnis sichten<

Passen Sie ihr 1.Programm an


Integrata - SAP objektorientierte Programmierung 66

Ausnahme wenn beim addieren count > 10 ist

> <
>Doppelklick<

> <

> <

>

>Doppelklick auf die Ausnahme <

> <
Integrata - SAP objektorientierte Programmierung 67

> <

> <

> <

> < der Ausnahmeklasse , dann die Abwicklende

> <

> <
Integrata - SAP objektorientierte Programmierung 68

In der Abwickelnden

In der Ausnahmeklasse

> <

>

<

>aktivieren<
Integrata - SAP objektorientierte Programmierung 69

TRY .
add 1 to count.
if count > 10.
RAISE EXCEPTION TYPE zcx_wert_groesser_10a
exporting count = count.
endif.
CATCH zcx_wert_groesser_10a into oref.
text = oref->get_text( ).
write text.
cleanup.
count = 0.
ENDTRY.

><

><

> <
Integrata - SAP objektorientierte Programmierung 70

>

<

> <

>

<

>testen<
Integrata - SAP objektorientierte Programmierung 71

Im Programm integrieren

> <

> <
Integrata - SAP objektorientierte Programmierung 72

> <
Integrata - SAP objektorientierte Programmierung 73