[ABAP] Beispiel für Implementation einer lokalen Klasse

CLASS cl_one DEFINITION.
* Public-Deklarationen, global inner- und außerhalb des Objektes sichtbar
  PUBLIC SECTION.
    DATA: pu_val3 TYPE i.        " dyn. Variable, nur zur Obj-Laufzeit verfügbar

    CLASS-DATA: txt TYPE string. " statische Public-Variable
    CLASS-DATA: int TYPE i.      " statische Public-Variable

* statische Methode, hat keinen Zugriff auf pu_val3
    CLASS-METHODS: function_one
      IMPORTING
                i_txt          TYPE string
      RETURNING VALUE(ret_val) TYPE string. " wenn RETURNING VALUE, dann kein EXPORTING oder CHANGING möglich

* statische Methode, hat keinen Zugriff auf pu_val3
    CLASS-METHODS: function_two
      IMPORTING
                i_txt          TYPE string
                i_val          TYPE i
      RETURNING VALUE(ret_val) TYPE string. " wenn RETURNING VALUE, dann kein EXPORTING oder CHANGING möglich

* dynamische Methode, hat Zugriff auf pu_val3
    METHODS: function_three
      IMPORTING
                i_val1         TYPE i DEFAULT 10 " Default-Wert, falls Parameter nicht gesetzt
                i_val2         TYPE i DEFAULT 20 " Default-Wert, falls Parameter nicht gesetzt
      RETURNING VALUE(ret_val) TYPE i.           " wenn RETURNING VALUE, dann kein EXPORTING oder CHANGING möglich

* dynamische Methode, einfaches Exceptionhandling
    METHODS: function_four
      IMPORTING
                i_val1         TYPE i
      RETURNING VALUE(ret_val) TYPE i
      RAISING   cx_sy_arithmetic_error.

    METHODS: constructor.
* Private-Deklarationen, nur innerhalb der Klasse sichtbar
  PRIVATE SECTION.
    DATA: pr_val3 TYPE i.
ENDCLASS.

CLASS cl_one IMPLEMENTATION.
* Constructor der Klasse
  METHOD constructor.
    me->pr_val3 = 100.
  ENDMETHOD.
* Funktion mit einem Übergabeparameter
  method function_one.
    DATA: s TYPE string VALUE 'Return: '.
    ret_val = |{ s } { i_txt }|.
  ENDMETHOD.

* Funktion mit zwei Übergabeparametern
  METHOD function_two.
    ret_val = |{ i_txt } { i_val }|.
  ENDMETHOD.

* Funktion mit zwei Übergabeparametern und DEFAULT-Werten
* Verwendung des me-> Operators für den Zugriff auf Attribute der Klasse
  METHOD function_three.
    ret_val = ( me->pu_val3 + me->pr_val3 ) * ( i_val1 + i_val2 ).
  ENDMETHOD.

* Funktion mit einem Übergabeparameter
* löst bei DIV0 -> cx_sy_arithmetic_error aus
  METHOD function_four.
    ret_val = 100 / i_val1.
  ENDMETHOD.
ENDCLASS.

INITIALIZATION.
  cl_one=>int = 1.
  cl_one=>txt = |Test.|.

START-OF-SELECTION.
* statische Objektaufrufe
  WRITE: / cl_one=>int.
  WRITE: / cl_one=>txt.

  WRITE: / cl_one=>function_one( |Input.| ).

  WRITE: / cl_one=>function_two( i_txt = |Input2:|
                                 i_val = 1 ).

* dynamische Objektaufrufe
  DATA(o_cl_one) = NEW cl_one( ).
  o_cl_one->pu_val3 = 10.
  WRITE: / o_cl_one->function_three( ).
  WRITE: / o_cl_one->function_three( i_val1 = 1
                                     i_val2 = 2 ).

* Exception abfangen
  TRY.
      WRITE: / o_cl_one->function_four( 0 ). " Division durch 0 auslösen
    CATCH cx_root INTO DATA(e_text).
      WRITE: / e_text->get_text( ).
  ENDTRY.