Erste Schritte
Grundlegende Methoden und Konzepte anwenden
Mit lokalen Klassen arbeiten
Daten aus der Datenbank lesen
Mit strukturierten Datenobjekten arbeiten
Mit komplexen internen Tabellen arbeiten
Datenbankänderungen mit Business Objects implementieren
Das ABAP-RESTful-Anwendungsprogrammiermodell beschreiben

Eine lokale Klasse definieren

Objective

After completing this lesson, you will be able to definieren Sie eine lokale Klasse innerhalb einer globalen Klasse.

Lokale Klassen

Lokale und globale Klassen

Klassen in ABAP können entweder lokal oder global sein.

Globale Klassen werden zentral gespeichert sind in einem eigenen Repository-Objekt enthalten, dem so genannten Class-Pool. Eine globale Klasse kann als Hauptprogramm dienen. Globale Klassen können auch Logik enthalten, die von anderen ABAP-Programmen, einschließlich anderer globaler Klassen, wiederverwendet werden kann.

Lokale Klassen werden als Teil eines ABAP-Programms, z.B. einer globalen Klasse, definiert. Sie können sie nur in dem Programm oder der Klasse verwenden, in dem bzw. der sie definiert sind. Lokale Klassen eignen sich für Entitäten oder Funktionen, die Sie nur in einem einzigen Programm benötigen.

Die ABAP-Syntax lokaler und globaler Klassen ist fast identisch. In diesem Kurs arbeiten Sie mit lokalen Klassen in Ihrer globalen Klasse. Die globale Klasse mit der Methode „if_oo_adt_classrun~main" dient nur als eine Art Hauptprogramm.

Lokale Klassen in globalen Klassen

Wie in der nachstehenden Abbildung dargestellt, liegt der Fokus beim Öffnen einer globalen Klasse in ADT zuerst auf der Registerkarte „///Globale Klasse". Hier finden Sie den Quelltext der globalen Klasse selbst. Um den Quelltext lokaler Klassen anzuzeigen oder einzugeben, müssen Sie zur Registerkarte „///Lokale Typen" navigieren.

ADT stellt eine Quelltextvorlage für die lokale Klasse bereit. Um diese Vorlage zu verwenden, gehen Sie wie folgt vor:

  1. Geben Sie im ABAP-Editor lcl ein, und drücken Sie Strg + Leertaste.
  2. Wählen Sie in der angezeigten Liste ///lcl - Lokale Klasse, und drücken Sie die Eingabetaste.
  3. Passen Sie den Namen der neuen lokalen Klasse an.

Für die Klassen in diesem Kurs müssen Sie den Zusatz „///create private" aus der Anweisung CLASS … DEFINITION entfernen.

Anlegen einer lokalen Klasse in einer globalen Klasse

Attribute

Quelltext einer Klasse in ABAP

In ABAP besteht der Quelltext einer Klasse aus zwei Teilen – der Definition und der Implementierung. Der Definitionsteil einer Klasse ist in bis zu drei Bereiche unterteilt, die Sichtbarkeitsbereiche der Klasse.

Definition
Der Definitionsteil einer Klasse enthält die Definition und die Deklaration aller Elemente in der Klasse, d.h. die Typen, die Konstanten, die Attribute und die Methoden. Er beginnt mit CLASS <class_name> DEFINITION. und endet mit ENDCLASS.
Implementierung
Der Implementierungsteil einer Klasse enthält den ausführbaren Code der Klasse, d.h. die Implementierung ihrer Methoden. Er beginnt mit CLASS <class_name> IMPLEMENTATION. und endet mit ENDCLASS. Der Implementierungsteil einer Klasse ist optional. Er wird obligatorisch, sobald die Klassendefinition ausführbare Methoden enthält.
Sichtbarkeitsbereiche

Jeder Sichtbarkeitsbereich einer Klasse beginnt mit einer der Anweisungen PUBLIC SECTION, PROTECTED SECTION, PRIVATE SECTION und endet implizit mit Beginn des nächsten Bereichs. Der letzte Bereich endet mit der Anweisung ENDCLASS. Alle Deklarationen einer Klasse müssen sich in einem der Bereiche befinden. Mit anderen Worten: Zwischen dem Beginn der Klassendefinition und dem Beginn des ersten Abschnitts sind keine Deklarationen erlaubt.

Der Bereich, in dem sich eine Deklaration befindet, definiert die Sichtbarkeit des deklarierten Elements der Klasse.

Die drei Sichtbarkeitsbereiche einer Klasse sind optional. Wenn Sie einen bestimmten Bereich nicht benötigen, müssen Sie ihn auch nicht deklarieren. Wenn eine Klassendefinition jedoch aus mehreren Bereichen besteht, müssen diese die Reihenfolge PUBLIC SECTION – PROTECTED SECTION – PRIVATE SECTION beachten.

Definitionsteil einer Klasse

Das folgende Video zeigt die verschiedenen Arten von Komponenten, die Sie in einer Klasse definieren können. Sie können all diese Komponenten in einem beliebigen Sichtbarkeitsbereich der Klasse definieren.

Beispiel: Attribute der Klasse Flugverbindung

Jetzt soll das UML-Modell in ABAP implementiert werden, und zwar als Erstes die Attribute der Verbindungsklasse. Sie deklarieren das Attribut dann mit der Anweisung DATA im entsprechenden Sichtbarkeitsbereich.

Das Attribut „conn_counter" ist unterstrichen, d.h., es handelt sich um ein statisches Attribut. Statische Attribute deklarieren Sie mit der Anweisung CLASS-DATA. Die Syntax der Anweisung CLASS-DATA entspricht der der Anweisung DATA.

Notiz

Wir beginnen hier mit öffentlichen Attributen. Wenn wir später im Kurs über Kapselung sprechen, wandeln wir sie in private Attribute um.

Eine lokale Klasse definieren

In dieser Übung definieren Sie eine lokale Klasse innerhalb einer globalen Klasse.

Vorlage:

  • keine

Lösung:

  • /LRN/CL_S4D400_CLS_LOCAL_CLASS (globale Klasse)

Aufgabe 1: Globale Klasse anlegen

Legen Sie in Ihrem eigenen Paket eine neue ABAP-Klasse an.

Schritte

  1. Legen Sie eine neue globale Klasse an, die das Interface IF_OO_ADT_CLASSRUN implementiert (Namensvorschlag: ZCL_##_LOCAL_CLASS, wobei ## für Ihre Gruppennummer steht).

    1. Wählen Sie FileNewABAP Class.

    2. Geben Sie den Namen Ihres Pakets in das Feld Package ein. Geben Sie im Feld Name den Namen ZCL_##_LOCAL_CLASS ein, wobei ## für Ihre Gruppennummer steht. Geben Sie eine Beschreibung ein.

    3. Wählen Sie im Gruppenrahmen Interfaces die Option Add.

    4. Geben Sie IF_OO_ADT_CLASSRUN ein. Wenn das Interface in der Trefferliste angezeigt wird, fügen Sie es mit Doppelklick zur Klassendefinition hinzu.

    5. Wählen Sie Next.

    6. Wählen Sie Ihren Transportauftrag aus, und wählen Sie Finish.

Aufgabe 2: Eine lokale Klasse definieren

Definieren Sie eine lokale Klasse lcl_connection, und deklarieren Sie einige öffentliche Attribute.

Schritte

  1. Legen Sie innerhalb der globalen Klasse eine neue lokale Klasse lcl_connection an. Verwenden Sie die Quelltextvervollständigung, um den Code zu generieren. Stellen Sie jedoch sicher, dass Sie den Zusatz create private aus dem generierten Code entfernen.

    1. Wechseln Sie zur Registerkarte ///Lokale Typen.

    2. Geben Sie lcl in den Editor ein, und drücken Sie Strg + Leertaste.

    3. Doppelklicken Sie im Dialogfenster auf lcl - class.

    4. Solange noch ein Rahmen um lcl in der Zeile class lcl definition create private. angezeigt wird, vervollständigen Sie den Namen der Klasse zu lcl_connection.

    5. Löschen Sie die Wörter create private am Ende der Quelltextzeile class lcl_connection definition..

  2. Deklarieren Sie in der lokalen Klasse lcl_connection die folgenden öffentlichen Attribute:

    Attribute

    AttributnameUmfangDatentyp
    carrier_idInstanz/DMO/CARRIER_ID
    connection_idInstanz/DMO/CONNECTION_ID
    conn_counterstatischI
    1. Fügen Sie nach der Zeile PUBLIC SECTION. und vor der Zeile PROTECTED SECTION. folgenden Code hinzu:

      Code Snippet
      123456
      DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. CLASS-DATA conn_counter TYPE i.
  3. Aktivieren Sie die Klasse.

    Notiz

    Da die Methode if_oo_adt_classrun~main keinen ausführbaren Code enthält, gibt es an dieser Stelle noch nichts zu testen oder debuggen.
    1. Drücken Sie Strg + F3, um die Klasse zu aktivieren.

    2. Vergleichen Sie Ihren Quelltext auf der Registerkarte ///Local Types mit dem folgenden Auszug aus der Musterlösung:

      Code Snippet
      1234567891011121314151617181920212223
      *"* use this source file for the definition and implementation of *"* local helper classes, interface definitions and type *"* declarations CLASS lcl_connection DEFINITION. PUBLIC SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. CLASS-DATA conn_counter TYPE i. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS lcl_connection IMPLEMENTATION. ENDCLASS.