ABAP Objects Basics Tutorial
Aus MattWiki
Nachfolgender Artikel enhält die Programmcodes, die aus dem ABAP Objects Basic Guided Tutorial von SAP (https://archive.sap.com/documents/docs/DOC-10394) entstanden sind.
UML Klassendiagramm
Die in dem Tutorial entwickelten Klassen stellen sich in einem UML Klassendiagramm wie folgt dar:
Klassen
ZCL_VEHICLE_MO
*----------------------------------------------------------------------*
* CLASS ZCL_VEHICLE_MO DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class ZCL_VEHICLE_MO definition
public
create public .
public section.
interfaces ZIF_STATUS_MO .
aliases SHOW
for ZIF_STATUS_MO~SHOW .
methods CONSTRUCTOR .
methods SPEED_UP
importing
!STEP type I
raising
ZCX_OVERHEATING_MO .
methods STOP .
PROTECTED SECTION.
DATA speed TYPE i .
DATA max_speed TYPE i VALUE 50. "#EC NOTEXT . . . " .
PRIVATE SECTION.
DATA id TYPE i .
CLASS-DATA object_count TYPE i .
ENDCLASS.
CLASS ZCL_VEHICLE_MO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_VEHICLE_MO->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD constructor.
object_count = object_count + 1.
id = object_count.
ENDMETHOD. "CONSTRUCTOR
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_VEHICLE_MO->SPEED_UP
* +-------------------------------------------------------------------------------------------------+
* | [--->] STEP TYPE I
* | [!CX!] ZCX_OVERHEATING_MO
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD speed_up.
speed = speed + step.
IF speed > max_speed.
RAISE EXCEPTION TYPE zcx_overheating_mo.
ENDIF.
ENDMETHOD. "SPEED_UP
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_VEHICLE_MO->STOP
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD stop.
speed = 0.
ENDMETHOD. "stop
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_VEHICLE_MO->ZIF_STATUS_MO~SHOW
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD zif_status_mo~show.
DATA msg TYPE string.
msg = `Vehicle ` && |{ id }| &&
`, Speed = ` && |{ speed }| &&
`, Max-Speed = ` && |{ max_speed }| .
MESSAGE msg TYPE 'I'.
ENDMETHOD.
ENDCLASS.
ZCL_TRUCK_MO - erbt von ZCL_VEHICLE_MO
class ZCL_TRUCK_MO definition
public
inheriting from ZCL_VEHICLE_MO
final
create public .
public section.
methods CONSTRUCTOR .
methods SHOW
redefinition .
protected section.
private section.
ENDCLASS.
CLASS ZCL_TRUCK_MO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TRUCK_MO->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD constructor.
super->constructor( ).
max_speed = 100.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_TRUCK_MO->SHOW
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD show.
DATA msg TYPE string.
msg = `Truck ` &&
`, Speed = ` && |{ speed }| &&
`, Max Speed = ` && |{ max_speed }|.
MESSAGE msg TYPE 'I'.
ENDMETHOD. "show
ENDCLASS.
ZCL_SHIP_MO - Definiert Ereignis
class ZCL_SHIP_MO definition
public
inheriting from ZCL_VEHICLE_MO
final
create public .
public section.
data NAME type STRING .
events DAMAGED .
methods CONSTRUCTOR
importing
!NAME type STRING .
methods SHOW
redefinition .
methods SPEED_UP
redefinition .
protected section.
private section.
ENDCLASS.
CLASS ZCL_SHIP_MO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SHIP_MO->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] NAME TYPE STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD constructor.
super->constructor( ).
max_speed = 30.
me->name = name.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_SHIP_MO->SHOW
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD show.
*CALL METHOD SUPER->SHOW
* .
DATA msg TYPE string.
msg = me->name &&
`, Speed = ` && |{ speed }| &&
`, Max Speed = ` && |{ max_speed }|.
MESSAGE msg TYPE 'I'.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SHIP_MO->SPEED_UP
* +-------------------------------------------------------------------------------------------------+
* | [--->] STEP TYPE I
* | [!CX!] ZCX_OVERHEATING_MO
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD speed_up.
*CALL METHOD SUPER->SPEED_UP
* EXPORTING
* STEP =
* .
speed = speed + step.
IF speed > max_speed.
max_speed = 0.
CALL METHOD stop.
RAISE EVENT damaged.
ENDIF.
ENDMETHOD.
ENDCLASS.
ZCL_HELICOPTER_MO - Empfängt Ereignis
class ZCL_HELICOPTER_MO definition
public
final
create public .
public section.
interfaces ZIF_STATUS_MO .
aliases SHOW
for ZIF_STATUS_MO~SHOW .
methods RECEIVE
for event DAMAGED of ZCL_SHIP_MO
importing
!SENDER .
protected section.
private section.
ENDCLASS.
CLASS ZCL_HELICOPTER_MO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_HELICOPTER_MO->RECEIVE
* +-------------------------------------------------------------------------------------------------+
* | [--->] SENDER LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD receive.
DATA msg TYPE string.
msg = `Helicopter received call from ` && sender->name.
MESSAGE msg TYPE 'I'.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_HELICOPTER_MO->ZIF_STATUS_MO~SHOW
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD zif_status_mo~show.
DATA msg TYPE string.
msg = 'Helicopter, idle'.
MESSAGE msg TYPE 'I'.
ENDMETHOD.
ENDCLASS.
ZCX_OVERHEATING_MO
Ausnahmeklasse für TRY-CATCH-Kontrollstruktur.
ZCL_APPLICATION_MO - Startet und nutzt Klassen
METHOD start.
DATA: lr_status TYPE REF TO zif_status_mo,
lt_status LIKE TABLE OF lr_status,
lr_truck TYPE REF TO zcl_truck_mo,
lr_ship TYPE REF TO zcl_ship_mo,
lr_heli TYPE REF TO zcl_helicopter_mo.
CREATE OBJECT:
lr_truck,
lr_ship EXPORTING name = 'Titanic',
lr_heli.
APPEND:
lr_truck TO lt_status,
lr_ship TO lt_status,
lr_heli TO lt_status.
SET HANDLER lr_heli->receive FOR ALL INSTANCES.
TRY.
lr_truck->speed_up( 30 ).
lr_ship->speed_up( 10 ).
LOOP AT lt_status INTO lr_status.
lr_status->show( ).
ENDLOOP.
DO 5 TIMES.
lr_ship->speed_up( 10 ).
ENDDO.
DO 5 TIMES.
lr_truck->speed_up( 30 ).
lr_truck->show( ).
ENDDO.
CATCH zcx_overheating_mo.
MESSAGE 'Truck overheated' TYPE 'I'.
EXIT.
ENDTRY.
ENDMETHOD.
Interface ZIF_STATUS_MO
interface ZIF_STATUS_MO
public .
methods SHOW .
endinterface.