Вы находитесь на странице: 1из 4

ERPGenie.

COM ABAP Tips and Tricks Database

Demo ABAP Objects program


Contributed 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.
http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 1 July, 2010, 09:57
ERPGenie.COM ABAP Tips and Tricks Database

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.
http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 1 July, 2010, 09:57
ERPGenie.COM ABAP Tips and Tricks Database

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.
http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 1 July, 2010, 09:57
ERPGenie.COM ABAP Tips and Tricks Database

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.

*---------------------------------------------------------------------*

http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 1 July, 2010, 09:57

Вам также может понравиться