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:
Zu entwickelnde 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_APPLICATION_MO
Diese Klasse enhält die Methode START und führt die übrigen Klassen aus.
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.