Objektorientierung in ABAP

Was ist ABAP Objects?

objektorientiertes ABAP

ABAP Objects ist die objektorientierte Erweiterung von ABAP mit Klassen, Interfaces, Vererbung und Ereignissen. Es ist keine eigene Sprache, sondern derselbe Sprachkern mit strengeren Regeln, in dem heute praktisch die gesamte Neuentwicklung stattfindet.

Neue Anforderungen im SAP-System werden heute in Klassen umgesetzt, während der Bestand aus Reports und Funktionsbausteinen daneben weiterläuft und trotzdem gepflegt werden will.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Gehört zu
Der Sprache ABAP, keine eigene Sprache
Bausteine
Klassen, Interfaces, Vererbung, Ereignisse
Typisch bei
Neuentwicklung, RAP, Unit-Tests
Verwechselt mit
Funktionsbausteinen in einer Klassenhülle

Die Bausteine

Eine Klasse bündelt Daten und die Methoden, die damit arbeiten, und trennt über die Sichtbarkeiten public, protected und private, was von außen nutzbar ist. Global angelegte Klassen stehen dem ganzen System zur Verfügung, lokale Klassen leben nur in einem Programm, was für Hilfsklassen und Tests genau richtig ist.

ABAP kennt nur einfache Vererbung, eine Klasse hat also höchstens eine Oberklasse. Mehrere Rollen bildest du stattdessen über Interfaces ab, von denen eine Klasse beliebig viele umsetzen kann. Dazu kommen Ereignisse, mit denen ein Objekt etwas bekannt gibt, ohne die Empfänger zu kennen, und Konstruktoren für den Aufbau eines Objekts und für die einmalige Initialisierung einer Klasse.

Fehler werden über Ausnahmeklassen behandelt. Statt nach jedem Aufruf sy-subrc abzufragen, fängst du mit TRY und CATCH das ab, was schiefgehen kann, und bekommst mit der Ausnahme ein Objekt, das die Umstände des Fehlers mitbringt.

Warum die Syntax strenger ist

Innerhalb von Klassen sind alte Sprachkonstrukte gesperrt, etwa Tabellen mit Kopfzeile oder die Anweisung TABLES. Das wirkt zunächst wie eine Schikane, verhindert aber genau die Konstruktionen, bei denen versteckter globaler Zustand entsteht und man beim Lesen nicht mehr sieht, welche Daten eine Anweisung eigentlich anfasst.

Der zweite Grund ist Testbarkeit. ABAP Unit braucht etwas, das sich isoliert aufrufen lässt, und das ist eine Klasse mit klaren Übergabeparametern. Wenn Abhängigkeiten über Interfaces hereinkommen, kannst du sie im Test durch eine Attrappe ersetzen und die Logik ohne Datenbank und ohne Dialog prüfen.

Der häufigste Fehler: Klassen als Ablage für Funktionen

Sehr verbreitet ist die Z-Klasse, die aus zwanzig statischen Methoden besteht und nie ein Objekt erzeugt. Das ist eine Funktionsgruppe in neuer Verpackung, und die Vorteile der Objektorientierung entfallen dabei fast alle, weil sich statische Methoden im Test nicht austauschen lassen.

Der zweite Fehler ist ein zu großer öffentlicher Teil. Wenn alle Attribute public sind, kann jeder Aufrufer den Zustand eines Objekts von außen verbiegen, und die Klasse kann ihre eigenen Regeln nicht mehr garantieren. Halte den öffentlichen Teil klein und gib nach außen Methoden statt Attribute.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Nicht verwechseln

ABAP Objects und was oft damit gleichgesetzt wird

ABAP Objects gegen Funktionsbausteine

Funktionsbausteine sind prozedural, liegen in Funktionsgruppen mit gemeinsamem globalem Zustand und lassen sich als RFC-Schnittstelle nach außen freigeben. Klassen bieten das nicht direkt, für einen Fernaufruf brauchst du weiterhin einen Funktionsbaustein als Hülle.

ABAP Objects gegen Prozedurales ABAP

Reports mit Unterprogrammen über FORM und PERFORM gelten als überholt. Solcher Code funktioniert weiter, aber neue Objekte sollten in Klassen entstehen, schon weil viele neuere Schnittstellen ausschließlich als Klassen angeboten werden.

ABAP Objects gegen RAP

Das RESTful Application Programming Model beschreibt Geschäftsobjekte über CDS und Behavior Definitions. ABAP Objects verschwindet damit nicht, sondern bleibt die Sprache, in der die Verhaltensimplementierung geschrieben wird.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
In der Praxis

Eine Klasse voller statischer Methoden ist ein Funktionsbaustein mit anderem Namen

Das häufigste Muster in gewachsenen Systemen: Es gibt eine Klasse mit lauter statischen Methoden, ohne Instanz und ohne Zustand. Objektorientiert daran ist allein die Syntax. Der Nutzen entsteht erst, wenn du Abhängigkeiten von außen hineinreichst, denn dann lässt sich der Code einzeln prüfen.

Genau daran hängt der praktische Gewinn, nämlich an den Unit-Tests. Solange eine Methode selbst entscheidet, welche Tabelle sie liest, brauchst du für jeden Testlauf die passenden Daten im System. Wird die Datenbeschaffung dagegen über ein Interface hereingereicht, kannst du sie im Test durch eine Attrappe ersetzen und die Logik für sich allein prüfen.

Die strengere Syntax ist keine Schikane, sondern der Grund, warum älterer Code schwer zu übernehmen ist. In Klassen sind veraltete Anweisungen gesperrt, und ein Teil der stillschweigenden Typumwandlungen, den der klassische Prüfmodus durchgehen lässt, führt hier zu einem Fehler. Bestandscode lässt sich deshalb selten unverändert hineinkopieren, und genau diese Umstellung ist der eigentliche Aufwand beim Wechsel.

ABAP Objects lernen

Wie du bestehenden prozeduralen Code Schritt für Schritt in testbare Klassen überführst, üben die Trainings zur objektorientierten SAP Entwicklung an eigenen Beispielen.

Häufige Fragen

Brauche ich Objektorientierung, wenn wir nur Reports schreiben?
Sobald ein Report länger lebt und getestet werden soll, ja. Dazu kommt, dass die neueren Werkzeuge nur noch als Klassen angeboten werden, etwa das SALV-Modell für die ALV-Ausgabe. Die alten REUSE-Bausteine gelten als überholt und lassen sich aus einer globalen Klasse ohnehin nicht aufrufen, weil sie Unterprogramme als Callback erwarten. Ohne Klassen kommst du in der Praxis kaum noch aus.
Gibt es in ABAP Mehrfachvererbung?
Nein, eine Klasse kann nur von einer Oberklasse erben. Mehrere Verhaltensverträge bildest du über Interfaces ab, davon darf eine Klasse beliebig viele umsetzen.
Wie teste ich ABAP-Code automatisiert?
Mit ABAP Unit. Die Tests werden als lokale Testklassen zum Programm oder zur globalen Klasse geschrieben und laufen im System selbst. Damit sie etwas taugen, müssen Abhängigkeiten wie Datenbankzugriffe hinter Interfaces liegen und im Test ersetzbar sein.
Persönlich für dich da

Deine Ansprechpartner

Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.

Norbert Jansen

Norbert Jansen

Beratung & Inhouse

Plant Inhouse-Trainings, die an euren eigenen Daten und Abläufen ansetzen.

ABAP Objects im Kurs statt im Lexikon

Nachschlagen bringt dich bis zum Verstehen. Anwenden lernst du an echten Aufgaben.