PARAMETERS:p_speed TYPE i.
CLASS speed DEFINITION.
PUBLIC SECTION.
METHODS get_speed.
EVENTS raise_emergency EXPORTING value(excess) TYPE i.
PRIVATE SECTION.
DATA: excess TYPE i,
speed_limit TYPE i VALUE '100'.
ENDCLASS.
CLASS speed IMPLEMENTATION.
METHOD get_speed.
excess = speed_limit - p_speed.
IF ( p_speed > speed_limit ).
RAISE EVENT raise_emergency EXPORTING excess = excess.
ELSE.
WRITE:'Normal Speed'.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS handler DEFINITION.
PUBLIC SECTION.
METHODS handle_excess_speed
FOR EVENT raise_emergency OF speed
IMPORTING excess.
ENDCLASS.
CLASS handler IMPLEMENTATION.
METHOD handle_excess_speed.
WRITE: / 'Emergency'.
ENDMETHOD.
ENDCLASS.
DATA: r1 TYPE REF TO speed,
h1 TYPE REF TO handler.
START-OF-SELECTION.
CREATE OBJECT: r1, h1.
SET HANDLER h1->handle_excess_speed FOR ALL INSTANCES.
CALL METHOD r1->get_speed.
CLASS speed DEFINITION.
PUBLIC SECTION.
METHODS get_speed.
EVENTS raise_emergency EXPORTING value(excess) TYPE i.
PRIVATE SECTION.
DATA: excess TYPE i,
speed_limit TYPE i VALUE '100'.
ENDCLASS.
CLASS speed IMPLEMENTATION.
METHOD get_speed.
excess = speed_limit - p_speed.
IF ( p_speed > speed_limit ).
RAISE EVENT raise_emergency EXPORTING excess = excess.
ELSE.
WRITE:'Normal Speed'.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS handler DEFINITION.
PUBLIC SECTION.
METHODS handle_excess_speed
FOR EVENT raise_emergency OF speed
IMPORTING excess.
ENDCLASS.
CLASS handler IMPLEMENTATION.
METHOD handle_excess_speed.
WRITE: / 'Emergency'.
ENDMETHOD.
ENDCLASS.
DATA: r1 TYPE REF TO speed,
h1 TYPE REF TO handler.
START-OF-SELECTION.
CREATE OBJECT: r1, h1.
SET HANDLER h1->handle_excess_speed FOR ALL INSTANCES.
CALL METHOD r1->get_speed.