ABAP Objects

Objektorientiertes ABAP für moderne Clean Core SAP Systeme

Konstruktoren

(C) Brandeis Consulting📁

Konstruktoren

Definition Wikipedia

Als Konstruktoren ... werden in der Programmierung spezielle Prozeduren oder Methoden bezeichnet, die beim Erzeugen ... von Objekten und Variablen aufgerufen werden. Konstruktoren können mit Parametern versehen werden ...

Konstruktoren in ABAP Objects

  • Ein Instanzkonstruktur heißt in ABAP Objects CONSTRUCTOR, wird als spezielle Methode deklariert und bei jedem CREATE OBJECT oder NEW <class>( ) automatisch aufgerufen
  • Eingabeparameter sind möglich, werden bei der Erzeugung mitgegeben und initialisieren bzw. konfigurieren so die neue Objektinstanz
  • Erbende Klassen können eigene CONSTRUCTOR-Methoden auch mit abweichenden Parametern definieren
  • Der Konstruktor der Super-Klasse wird mit super->constructor( ) aufgerufen
  • Zusätzlich gibt es im ABAP Objects den Klassenkonstruktor CLASS_CONSTRUCTOR. Dieser ist statisch und wird genau einmal je Klasse aufgerufen.
(C) Brandeis Consulting📁

Constructor

Definition

CLASS zcl_bc_aoo_##_die_enc DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    METHODS constructor
        IMPORTING
            iv_id type string
            iv_description type string optional.

  PROTECTED SECTION.
    data mv_id type string.
    data mv_desc type string.

  PRIVATE SECTION.
ENDCLASS.

Implementierung

  METHOD constructor.
    mv_id   = iv_id.
    mv_desc = cond #( when iv_description is NOT INITIAL
                      then iv_description
                      else |Würfel { mv_id }| ).
  ENDMETHOD.

Verwendung

DATA(lo_die) = NEW zcl_bc_aoo_##_die_enc( 
    iv_id = |{ sy-uname }-{ sy-index }| 
    iv_description = |Mein Würfel|
).

  • Ein CONSTRUCTOR ohne Parameter wird mit METHODS CONSTRUCTOR. definiert
(C) Brandeis Consulting📁

Constructor mit Aufruf der Super-Klasse und abweichender Signatur

Definition

CLASS zcl_bc_aoo_##_die_con DEFINITION
  PUBLIC
  CREATE PUBLIC
  INHERITING FROM ZCL_BC_AOO_##_DIE_INH.

  PUBLIC SECTION.
    METHODS constructor
      IMPORTING
        iv_id          TYPE string
        iv_face_count  type i DEFAULT 6.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

  • Aufruf der CONSTRUCTOR-Methode der Super-Klasse mit super->constructor( )
  • Beispiel für das Ändern der Signatur: Parameter IV_DESCRIPTION wird versteckt

Implementierung

METHOD constructor.
  DATA(lv_desc) = COND #( 
    WHEN iv_face_count = 6
    THEN ||
    ELSE |Sonderwürfel mit { iv_face_count } Seiten (ID: { iv_id })|
  ).

  super->constructor(
      iv_id           = iv_id
      iv_face_count   = iv_face_count
      iv_description  = lv_desc
    ).
ENDMETHOD.

Verwendung

  DATA(lo_die) = NEW zcl_bc_aoo_##_die_con(
      iv_id         = |CON-1|
      iv_face_count = 20
  ).
(C) Brandeis Consulting📁

Übung: "Konstruiert"

Überblick

Die Würfel-Klasse aus der Übung "Vererbt" wird für diese Übung nochmals vererbt. Damit erbt sie auch die bereits vorhandenen Anpassungen. Zusätzlich wird ein CONSTRUCTOR definiert, der uns die Konfiguration unseres Würfels bereits bei der Erzeugung erlaubt.

Lernziele

  • Klasse mit Vererbung von Super-Klasse üben
  • Definiton CONSTRUCTOR mit Parametern
  • Implementierung der CONSTRUCTOR-Methode mit Aufuf des Konstruktors der Super-Klasse(n)
  • Beispiel für Klassenkonstruktor kennenlernen
  • Navigation in Klassenhierarchien üben

Konstruiert

(C) Brandeis Consulting📁

Verschiedene Möglichkeiten der Objekterzeugung

Klasssisch

Ohne Parameter

DATA lo_die TYPE REF TO ZCL_DIE_CLASS.
CREATE OBJECT lo_die.

Mit Parameter

DATA lo_die TYPE REF TO ZCL_DIE_CLASS.
CREATE OBJECT lo_die 
    EXPORTING 
        iv_id         = |Classic-1|
        iv_face_count = 6.

Modern

Ohne Parameter

DATA(lo_die) = NEW ZCL_DIE_CLASS( ).

Mit Parameter

data(lo_die) = new ZCL_DIE_CLASS( 
        iv_id         = |Modern-1|
        iv_face_count = 6
).

Dynamisch

DATA lo_die TYPE REF TO ZCL_DIE_CLASS. " Alternative: TYPE REF TO OBJECT
DATA(lv_class) = |ZCL_DIE_CLASS|.
CREATE OBJECT lo_die TYPE (lv_class).
(C) Brandeis Consulting📁

Destruktoren

  • In anderen Programmiersprachen sind auch Destruktoren beim Zerstören einer Objektinstanz üblich, die ebenfalls automatisch aufgerufen werden
  • ABAP Objects kennt dieses Konzept nicht!
  • in den bekannten SAPGUI Kontrollen wie ALV Grid gibt es die Methode FREE, die aber nicht automatisch aufgerufen wird

  • Anregung:
    • eine destroy-Methode (ohne Parameter) anlegen
    • konsequent aufrufen, wenn die Objektinstanz nicht mehr benötigt wird
    • auch dann aufrufen, wenn in der Methode (noch) nichts implementiert wurde
    • aus Sicht der Objektorientierung kann das ein interessanter Zeitpunkt sein und über Vererbung einfach genutzt werden

Destructor

(C) Brandeis Consulting📁