Home Sample Code ABAP OO Demo ABAP Objects program
|
|
|
|
Demo ABAP Objects program |
|
|
|
|
Written by Anon.
|
|
Sunday, 27 May 2007 |
REPORT demo_abap_objects.
*---------------------------------------------------------------------* * 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.
*---------------------------------------------------------------------* * INTERFACE status *---------------------------------------------------------------------* * Interface definition * *---------------------------------------------------------------------* INTERFACE status. METHODS write. ENDINTERFACE.
*---------------------------------------------------------------------* * CLASS vessel DEFINITION *---------------------------------------------------------------------* * Superclass definition * *---------------------------------------------------------------------* CLASS vessel DEFINITION. PUBLIC SECTION. METHODS: constructor, drive IMPORTING speed_up TYPE i, get_id RETURNING value(id) TYPE i. PROTECTED SECTION. DATA: speed TYPE i, max_speed TYPE i VALUE 100. PRIVATE SECTION. 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. ENDMETHOD. METHOD get_id. id = me->id. ENDMETHOD. ENDCLASS.
*---------------------------------------------------------------------* * CLASS ship DEFINITION *---------------------------------------------------------------------* * Subclass definition * *---------------------------------------------------------------------* CLASS ship DEFINITION INHERITING FROM vessel. PUBLIC SECTION. INTERFACES status. DATA name TYPE string READ-ONLY. METHODS: constructor IMPORTING name 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. me->name = name. ENDMETHOD. METHOD status~write. DATA id. id = me->get_id( ). WRITE: / name, 'is vessel', id, 'and has speed', speed. ENDMETHOD. METHOD drive. speed = speed + speed_up. IF speed > max_speed. max_speed = 0. speed = 0. RAISE EVENT emergency_call. ENDIF. ENDMETHOD. ENDCLASS.
*---------------------------------------------------------------------* * CLASS coast_guard DEFINITION *---------------------------------------------------------------------* * Event handler definition * *---------------------------------------------------------------------* CLASS coast_guard DEFINITION. PUBLIC SECTION. INTERFACES status. METHODS receive FOR EVENT emergency_call OF ship IMPORTING sender. ALIASES write FOR status~write. PRIVATE SECTION. DATA caller TYPE string. ENDCLASS.
*---------------------------------------------------------------------* * CLASS coast_guard IMPLEMENTATION *---------------------------------------------------------------------* * Event handler implementation * *---------------------------------------------------------------------* CLASS coast_guard IMPLEMENTATION. METHOD status~write. IF caller IS INITIAL. WRITE: / 'Coast guard received no call'. ELSE. WRITE: / 'Coast guard received a call from', caller. ENDIF. ENDMETHOD. METHOD receive. caller = sender->name. CALL METHOD write. ENDMETHOD. ENDCLASS.
*---------------------------------------------------------------------* * CLASS main DEFINITION *---------------------------------------------------------------------* * Main class definition * *---------------------------------------------------------------------* CLASS main DEFINITION. PUBLIC SECTION. CLASS-METHODS: start, objects, inheritance, interfaces, events. 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. ELSEIF button2 = 'X'. CALL METHOD inheritance. ELSEIF button3 = 'X'. CALL METHOD interfaces. ELSEIF button4 = 'X'. CALL METHOD events. ENDIF. ENDMETHOD.
METHOD objects. DATA: vessel1 TYPE REF TO vessel, vessel2 TYPE REF TO vessel. DATA: vessel_id TYPE i. CREATE OBJECT: vessel1 TYPE vessel, vessel2 TYPE vessel. CALL METHOD: vessel1->drive( 50 ), vessel2->drive( 80 ). vessel_id = vessel1->get_id( ). WRITE: / 'Vessel ID is', vessel_id. vessel_id = vessel2->get_id( ). WRITE: / 'Vessel ID is', vessel_id. ENDMETHOD.
METHOD inheritance. DATA: vessel TYPE REF TO vessel, ship TYPE REF TO ship. CREATE OBJECT ship TYPE ship EXPORTING name = 'Titanic'. CALL METHOD ship->drive( 20 ). MOVE ship TO vessel. CALL METHOD vessel->drive( 10 ). CALL METHOD ship->status~write. ENDMETHOD.
METHOD interfaces. DATA: status_tab TYPE TABLE OF REF TO status, status TYPE REF TO status. DATA: ship TYPE REF TO ship, station TYPE REF TO coast_guard. CREATE OBJECT: ship EXPORTING name = '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.
METHOD events. DATA: ship TYPE REF TO ship, station TYPE REF TO coast_guard. CREATE OBJECT: ship EXPORTING name = 'Titanic', station. SET HANDLER station->receive FOR ship. DO 5 TIMES. CALL METHOD ship->drive( 10 ). ENDDO. ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------* * System event START-OF-SELECTION *---------------------------------------------------------------------* * Triggered by the ABAP runtime environment automatically * *---------------------------------------------------------------------*
START-OF-SELECTION. CALL METHOD main=>start.
*---------------------------------------------------------------------*
Related Items:
|
|
|
|