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
ABAP Objects und was oft damit gleichgesetzt wird
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.
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.
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
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.
Kurse, die ABAP Objects behandeln
Häufige Fragen
Brauche ich Objektorientierung, wenn wir nur Reports schreiben?
Gibt es in ABAP Mehrfachvererbung?
Wie teste ich ABAP-Code automatisiert?
Deine Ansprechpartner
Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.
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.