Shared Top Border

Enterprise Resource
Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM ABAP Tips and Tricks Database

THE ultimate
ERP website

 

Forums | Vote for us |

Google    Other Search Options

Home arrow Sample Code arrow ABAP OO arrow Demo ABAP Objects program 4.0
Demo ABAP Objects program 4.0 PDF Print E-mail
User Rating: / 0
PoorBest 
Written by Anon.   
Sunday, 27 May 2007
************************************************************************
*& Report  DEMO_ABAP_OBJECTS_GENERAL                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&   Demo for ABAP Objects                                             *
*&                                                                     *
*&   This program includes                                             *
*&   CLASSES, OBJECTS, INTERFACES and EVENTS.                          *
*&   It should comprise the functionality of ABAP OO in Release 4.0A.  *
*&                                                                     *
*&   There are some classes C_BICYCLE, C_MOTORCYCLE and C_MOUNTAIN     *
*&   and an interface I_BIKE.                                          *
*&                                                                     *
*&   The instances (objects) of these classes are controlled by an     *
*&   interactive list and a selection screen.                          *
*&                                                                     *
************************************************************************

REPORT  demo_abap_objects_general.

INCLUDE <icon>.
TYPE-POOLS bikes.

************************************************************************
* Declaration part
************************************************************************

* Global fields

DATA: change_direction(1) TYPE c,
      gear_status TYPE i VALUE 1,
      change_result(1) TYPE c,
      ignition(1) TYPE c.

* Selection screen

SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW TITLE tit.
PARAMETERS: gear_hgh RADIOBUTTON GROUP rad,
            gear_low RADIOBUTTON GROUP rad.
SELECTION-SCREEN END OF SCREEN 500.

* Interfaces

INTERFACE i_bike.
  METHODS: drive,
           stop.
ENDINTERFACE.

* Class definitions

CLASS c_motorcycle DEFINITION.
  PUBLIC SECTION.
    INTERFACES i_bike.
    METHODS ignite.
  PRIVATE SECTION.
    DATA speed TYPE i.
ENDCLASS.

CLASS c_mountain DEFINITION.
  PUBLIC SECTION.
    METHODS: uphill   IMPORTING gradient TYPE i,
             downhill IMPORTING gradient TYPE i.
    EVENTS:  e_mountain EXPORTING value(speedchange) TYPE i.
ENDCLASS.

CLASS c_bicycle DEFINITION.
  PUBLIC SECTION.
    DATA color TYPE bikes_color.
    CLASS-DATA team TYPE bikes_team.
    INTERFACES i_bike.
    METHODS: set_gear,
             change_gear IMPORTING change_to TYPE c
                         EXPORTING gear TYPE i
                                   gear_change TYPE c,
             change_speed FOR EVENT e_mountain OF c_mountain
                          IMPORTING speedchange.
  PRIVATE SECTION.
    CONSTANTS: min_gear TYPE i VALUE 1,
               max_gear TYPE i VALUE 18.
    DATA: speed TYPE i,
          gear  TYPE  i VALUE 1.
    METHODS: gear_info IMPORTING change_flag TYPE c,
             output.
ENDCLASS.

* References to classes

DATA: mybike1     TYPE REF TO c_bicycle,
      mybike2     TYPE REF TO c_bicycle,
      mt_ventoux  TYPE REF TO c_mountain,
      mymoto      TYPE REF TO c_motorcycle.

* References to interfaces

DATA: bike_if TYPE REF TO i_bike,
      tab_bike_if TYPE TABLE OF REF TO i_bike.

************************************************************************
* Event processing blocks
************************************************************************

* Start-of-selection, creates objects and interactive list

START-OF-SELECTION.

  c_bicycle=>team = 'Fuzzy Wheels'.

  CREATE OBJECT mybike1.
  mybike1->color = 'Blue'.
  CREATE OBJECT mybike2.
  mybike2->color = 'Red'.

  CREATE OBJECT: mt_ventoux,
                 mymoto.

  SET HANDLER: mybike1->change_speed FOR mt_ventoux,
               mybike2->change_speed FOR mt_ventoux.

  bike_if = mybike1.
  APPEND bike_if TO tab_bike_if.
  bike_if = mybike2.
  APPEND bike_if TO tab_bike_if.
  bike_if = mymoto.
  APPEND bike_if TO tab_bike_if.

  WRITE c_bicycle=>team.

  SKIP TO LINE 5. POSITION 5.
  WRITE: mybike1->color, 'bike, gear is', (2) gear_status.
  FORMAT HOTSPOT ON.
  SKIP TO LINE 7. POSITION 10.
  WRITE: 'Change gear!' COLOR 4.
  SKIP TO LINE 8.POSITION 10.
  WRITE 'Drive!' COLOR 5.
  SKIP TO LINE 9. POSITION 10.
  WRITE 'Stop!' COLOR 6.
  FORMAT HOTSPOT OFF.

  SKIP TO LINE 11. POSITION 5.
  WRITE: mybike2->color, 'bike, gear is', (2) gear_status.
  FORMAT HOTSPOT ON.
  SKIP TO LINE 13. POSITION 10.
  WRITE: 'Change gear!' COLOR 4.
  SKIP TO LINE 14. POSITION 10.
  WRITE 'Drive!' COLOR 5.
  SKIP TO LINE 15. POSITION 10.
  WRITE 'Stop!' COLOR 6.
  FORMAT HOTSPOT OFF.

  SKIP TO LINE 17. POSITION 25.
  WRITE: icon_overview AS ICON,
         'Mountain!' COLOR 2, 40 icon_sort_up AS ICON HOTSPOT,
                              45 icon_sort_down AS ICON HOTSPOT.

  SKIP TO LINE 19. POSITION 5.
  WRITE 'Motorcycle'.
  SKIP TO LINE 21. POSITION 10.
  WRITE: 'Ignition ' HOTSPOT COLOR 3, ignition AS CHECKBOX INPUT OFF.
  SKIP TO LINE 22. POSITION 10.
  WRITE 'Drive!' HOTSPOT COLOR 5.
  SKIP TO LINE 23. POSITION 10.
  WRITE 'Stop!' HOTSPOT COLOR 6.

  SKIP TO LINE 25. POSITION 25.
  WRITE: icon_breakpoint AS ICON HOTSPOT, 'Stop all!' HOTSPOT COLOR 2.

* At line-selection, reacts to user interaction and calls methods

AT LINE-SELECTION.
  CASE sy-curow.
    WHEN 7.
      change_result = 'N'.
      CALL METHOD: mybike1->set_gear,
                   mybike1->change_gear
                            EXPORTING change_to = change_direction
                            IMPORTING gear = gear_status
                                      gear_change = change_result.
      IF change_result = 'Y'.
        READ LINE 5. MODIFY LINE 5 FIELD VALUE gear_status.
      ENDIF.
    WHEN 8.
      CALL METHOD mybike1->i_bike~drive.
    WHEN 9.
      CALL METHOD mybike1->i_bike~stop.
    WHEN 13.
      change_result = 'N'.
      CALL METHOD: mybike2->set_gear,
                   mybike2->change_gear
                            EXPORTING change_to = change_direction
                            IMPORTING gear = gear_status
                                      gear_change = change_result.
      IF change_result = 'Y'.
        READ LINE 11. MODIFY LINE 11 FIELD VALUE gear_status.
      ENDIF.
    WHEN 14.
      CALL METHOD mybike2->i_bike~drive.
    WHEN 15.
      CALL METHOD mybike2->i_bike~stop.
    WHEN 17.
      IF sy-cucol = 41.
        CALL METHOD mt_ventoux->uphill EXPORTING gradient = 2.
      ELSEIF sy-cucol = 46.
        CALL METHOD mt_ventoux->downhill EXPORTING gradient = 3.
      ENDIF.
    WHEN 21.
      CALL METHOD mymoto->ignite.
    WHEN 22.
      CALL METHOD mymoto->i_bike~drive.
    WHEN 23.
      CALL METHOD mymoto->i_bike~stop.
    WHEN 25.
      LOOP AT tab_bike_if INTO bike_if.
        CALL METHOD bike_if->stop.
      ENDLOOP.
  ENDCASE.

* At selection-screen, reacts to user interaction on selection screen

AT SELECTION-SCREEN.
  IF gear_hgh = 'X'.
    change_direction = '+'.
  ELSEIF gear_low = 'X'.
    change_direction = '-'.
  ELSE.
    change_direction = ' '.
  ENDIF.

************************************************************************
* Routines
***********************************************************************

* Class implementations

CLASS c_motorcycle IMPLEMENTATION.

  METHOD ignite.
    READ LINE 21 INDEX 0 FIELD VALUE ignition.
    IF ignition = ' '.
      ignition = 'X'.
      MODIFY LINE 21 INDEX 0 FIELD VALUE ignition.
    ELSEIF ignition = 'X'.
      ignition = ' '.
      speed = 0.
      MODIFY LINE 21 INDEX 0 FIELD VALUE ignition.
    ENDIF.
  ENDMETHOD.

  METHOD i_bike~drive.
    IF ignition = 'X'.
      speed = speed + 100.
      MESSAGE s159(at) WITH 'Motorcyle speed is' speed.
    ELSEIF ignition = ' '.
      MESSAGE e159(at) WITH 'Not possibble, ignition is off!'.
    ENDIF.
  ENDMETHOD.

  METHOD i_bike~stop.
    ignition = ' '.
    READ LINE 21 INDEX 0.
    MODIFY LINE 21 INDEX 0 FIELD VALUE ignition.
    IF speed <> 0.
      speed = 0.
      MESSAGE i159(at) WITH 'Motorcycle stopped, ignition is off!'.
    ENDIF.
  ENDMETHOD.

ENDCLASS.

CLASS c_mountain IMPLEMENTATION.

  METHOD uphill.
    DATA change TYPE i.
    change = -2 * gradient.
    RAISE EVENT e_mountain EXPORTING speedchange = change.
  ENDMETHOD.

  METHOD downhill.
    DATA change TYPE i.
    change = gradient.
    RAISE EVENT e_mountain EXPORTING speedchange = change.
  ENDMETHOD.

ENDCLASS.


CLASS c_bicycle IMPLEMENTATION.

  METHOD i_bike~drive.
    speed = speed  + gear * 10.
    CALL METHOD output.
  ENDMETHOD.

  METHOD i_bike~stop.
    IF speed <> 0.
      speed = 0.
      MESSAGE i159(at) WITH team color 'bike has stopped!'.
    ENDIF.
  ENDMETHOD.

  METHOD output.
    MESSAGE s159(at) WITH team color 'bike has speed ' speed.
  ENDMETHOD.

  METHOD set_gear.
    CONCATENATE 'Gear change for' color 'bike of team ' team
                INTO tit SEPARATED BY space.
    CALL SELECTION-SCREEN 500 STARTING AT 30 5.
  ENDMETHOD.

  METHOD change_gear.
    gear = me->gear.
    IF change_to = '+'.
      IF gear = max_gear.
        gear_change = 'N'.
      ELSE.
        gear = gear + 1.
        gear_change = 'Y'.
      ENDIF.
    ELSEIF change_to = '-'.
      IF gear = min_gear.
        gear_change = 'N'.
      ELSE.
        gear = gear - 1.
        gear_change = 'Y'.
      ENDIF.
    ELSE.
      gear_change = 'N'.
    ENDIF.
    me->gear = gear.
    CALL METHOD gear_info EXPORTING change_flag = gear_change.
  ENDMETHOD.

  METHOD gear_info.
    IF change_flag = 'Y'.
      MESSAGE s159(at) WITH 'Gear changed to' gear.
    ELSEIF change_flag = 'N'.
      MESSAGE s159(at) WITH 'No gear change, gear is' gear.
    ENDIF.
  ENDMETHOD.

  METHOD change_speed.
    speed = speed + speedchange.
    MESSAGE i159(at) WITH team color 'bike has mountain-speed ' speed.
  ENDMETHOD.

ENDCLASS.

Related Items:

 
< Prev   Next >

Google Search

Google Ads

Shared Bottom Border

Contact Us | Polls | Add URL | Contribute | Privacy | Terms | Feedback

Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job
Financials Consultant | Consultant Review | Gallia Consulting | Supply Chain Project | SAP Financials Forum
GenieHoldings.COM, Inc. | Genie Press | WorkflowGenie | ESAGenie | ERPTopSites | ABAP Tips and Tricks | SAP Solutions Database

EDIGenie | Searching Survivor