ABAP Objects Basics Tutorial: Unterschied zwischen den Versionen
Aus Matts Wiki
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung  | 
				Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung  | 
				||
| Zeile 6: | Zeile 6: | ||
== Klassen ==  | |||
==   | |||
<syntaxhighlight lang="abap">  | <syntaxhighlight lang="abap">  | ||
| Zeile 150: | Zeile 149: | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
=== ZCL_SHIP_MO -   | === ZCL_SHIP_MO - Definiert Ereignis ===  | ||
<syntaxhighlight lang="abap">  | <syntaxhighlight lang="abap">  | ||
| Zeile 234: | Zeile 233: | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
=== ZCL_HELICOPTER_MO - Empfängt Ereignis ===  | |||
<syntaxhighlight lang="abap">  | |||
class ZCL_HELICOPTER_MO definition  | |||
  public  | |||
  final  | |||
  create public .  | |||
public section.  | |||
  interfaces ZIF_STATUS_MO .  | |||
  aliases SHOW  | |||
    for ZIF_STATUS_MO~SHOW .  | |||
  methods RECEIVE  | |||
    for event DAMAGED of ZCL_SHIP_MO  | |||
    importing  | |||
      !SENDER .  | |||
protected section.  | |||
private section.  | |||
ENDCLASS.  | |||
CLASS ZCL_HELICOPTER_MO IMPLEMENTATION.  | |||
* <SIGNATURE>---------------------------------------------------------------------------------------+  | |||
* | Instance Public Method ZCL_HELICOPTER_MO->RECEIVE  | |||
* +-------------------------------------------------------------------------------------------------+  | |||
* | [--->] SENDER                         LIKE  | |||
* +--------------------------------------------------------------------------------------</SIGNATURE>  | |||
METHOD receive.  | |||
  DATA msg TYPE string.  | |||
  msg = `Helicopter received call from ` && sender->name.  | |||
  MESSAGE msg TYPE 'I'.  | |||
ENDMETHOD.  | |||
* <SIGNATURE>---------------------------------------------------------------------------------------+  | |||
* | Instance Public Method ZCL_HELICOPTER_MO->ZIF_STATUS_MO~SHOW  | |||
* +-------------------------------------------------------------------------------------------------+  | |||
* +--------------------------------------------------------------------------------------</SIGNATURE>  | |||
METHOD zif_status_mo~show.  | |||
  DATA msg TYPE string.  | |||
  msg = 'Helicopter, idle'.  | |||
  MESSAGE msg TYPE 'I'.  | |||
ENDMETHOD.  | |||
ENDCLASS.  | |||
</syntaxhighlight>  | |||
=== ZCX_OVERHEATING_MO ===  | |||
Ausnahmeklasse für TRY-CATCH-Kontrollstruktur.  | |||
=== ZCL_APPLICATION_MO - Startet und nutzt Klassen ===  | |||
<syntaxhighlight lang="abap">  | <syntaxhighlight lang="abap">  | ||
| Zeile 279: | Zeile 333: | ||
   ENDTRY.  |    ENDTRY.  | ||
ENDMETHOD.  | ENDMETHOD.  | ||
</syntaxhighlight>  | |||
== Interface ZIF_STATUS_MO ==  | |||
<syntaxhighlight lang="abap">  | |||
interface ZIF_STATUS_MO  | |||
  public .  | |||
  methods SHOW .  | |||
endinterface.  | |||
</syntaxhighlight>  | </syntaxhighlight>  | ||
[[Category:ABAP]]  | [[Category:ABAP]]  | ||
Version vom 11. April 2018, 10:34 Uhr
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:
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_TRUCK_MO - erbt von ZCL_VEHICLE_MO
class ZCL_TRUCK_MO definition
  public
  inheriting from ZCL_VEHICLE_MO
  final
  create public .
public section.
  methods CONSTRUCTOR .
  methods SHOW
    redefinition .
protected section.
private section.
ENDCLASS.
CLASS ZCL_TRUCK_MO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TRUCK_MO->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD constructor.
  super->constructor( ).
  max_speed = 100.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_TRUCK_MO->SHOW
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD show.
    DATA msg TYPE string.
    msg = `Truck ` &&
          `, Speed = ` && |{ speed }| &&
          `, Max Speed = ` && |{ max_speed }|.
    MESSAGE msg TYPE 'I'.
  ENDMETHOD.                    "show
ENDCLASS.
ZCL_SHIP_MO - Definiert Ereignis
class ZCL_SHIP_MO definition
  public
  inheriting from ZCL_VEHICLE_MO
  final
  create public .
public section.
  data NAME type STRING .
  events DAMAGED .
  methods CONSTRUCTOR
    importing
      !NAME type STRING .
  methods SHOW
    redefinition .
  methods SPEED_UP
    redefinition .
protected section.
private section.
ENDCLASS.
CLASS ZCL_SHIP_MO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SHIP_MO->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] NAME                           TYPE        STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD constructor.
  super->constructor( ).
  max_speed = 30.
  me->name = name.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_SHIP_MO->SHOW
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD show.
*CALL METHOD SUPER->SHOW
*    .
  DATA msg TYPE string.
  msg = me->name &&
        `, Speed = ` && |{ speed }| &&
        `, Max Speed = ` && |{ max_speed }|.
  MESSAGE msg TYPE 'I'.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SHIP_MO->SPEED_UP
* +-------------------------------------------------------------------------------------------------+
* | [--->] STEP                           TYPE        I
* | [!CX!] ZCX_OVERHEATING_MO
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD speed_up.
*CALL METHOD SUPER->SPEED_UP
*  EXPORTING
*    STEP   =
*    .
  speed = speed + step.
  IF speed > max_speed.
    max_speed = 0.
    CALL METHOD stop.
    RAISE EVENT damaged.
  ENDIF.
ENDMETHOD.
ENDCLASS.
ZCL_HELICOPTER_MO - Empfängt Ereignis
class ZCL_HELICOPTER_MO definition
  public
  final
  create public .
public section.
  interfaces ZIF_STATUS_MO .
  aliases SHOW
    for ZIF_STATUS_MO~SHOW .
  methods RECEIVE
    for event DAMAGED of ZCL_SHIP_MO
    importing
      !SENDER .
protected section.
private section.
ENDCLASS.
CLASS ZCL_HELICOPTER_MO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_HELICOPTER_MO->RECEIVE
* +-------------------------------------------------------------------------------------------------+
* | [--->] SENDER                         LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD receive.
  DATA msg TYPE string.
  msg = `Helicopter received call from ` && sender->name.
  MESSAGE msg TYPE 'I'.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_HELICOPTER_MO->ZIF_STATUS_MO~SHOW
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD zif_status_mo~show.
  DATA msg TYPE string.
  msg = 'Helicopter, idle'.
  MESSAGE msg TYPE 'I'.
ENDMETHOD.
ENDCLASS.
ZCX_OVERHEATING_MO
Ausnahmeklasse für TRY-CATCH-Kontrollstruktur.
ZCL_APPLICATION_MO - Startet und nutzt Klassen
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.
Interface ZIF_STATUS_MO
interface ZIF_STATUS_MO
  public .
  methods SHOW .
endinterface.
