# ABAP

ABAP, kurz für „Advanced Business Application Programming“, ist eine proprietäre, multiparadigmatische Programmiersprache, die objektorientierte, imperative und funktionale Elemente hat. Die ABAP-Sprache wird Bytecode interpretiert und Garbage collected.
ABAP wird von der Softwarefirma SAP SE für die Programmierung kommerzieller Anwendungen im SAP-Umfeld entwickelt.
Die Programmiersprache ist ein Bestandteil der ABAP-Plattform. Die Programmiersprache ABAP sollte dabei nicht mit der ABAP-Plattform als Basis-Technologie gleichgesetzt werden.
ABAP dient hauptsächlich dazu, Business-Applikationen für SAPs on-premises und Cloud ERP-Lösungen sowie, basierend auf dem Platform-as-a-Service (PaaS), SAP BTP ABAP Environment zu entwickeln.
In dem seit 2001 veröffentlichten TIOBE-Index liegt ABAP aktuell auf Platz 42.
Eingeführt wurde die ABAP-Programmiersprache in den 1980er Jahren. Der Sprachumfang ist nicht standardisiert und wird stetig weiterentwickelt, s. dazu auch die Evolution der Sprache. Als aktuelle Weiterentwicklung seien hier das ABAP RESTful Application Programming Model (RAP) sowie ABAP Cloud zu nennen.

## Evolution der Sprache

Die Evolution der ABAP-Sprache ist ausführlich in einem SAP Community Blog-Post beschrieben.
Größere Stationen waren:
* In den 1970er Jahren war ABAP eine Assembler-Makrosammlung, die für die Selektion und Listaufbereitung im RFM-System, später auch R/1 genannt.
* In den 1980er Jahren wurden die ABAP/4-Syntax, der ABAP/4-Generierer und der ABAP-Prozessor für das SAP R/2-System eingeführt. Damit konnten Reports ereignisgesteuert definiert und sofort ausgeführt werden. Weiterhin wurde die Sprache erweitert und damit auch die Entwicklung von Dialogtransaktionen (Dynpros) ermöglicht. Mit dem ABAP/4 Editor, Data Dictionary, Screen Painter und ABAP/4 Debugger entstand eine erste Entwicklungsumgebung.
* In den 1990er Jahren wurden strukturierte Datentypen für das SAP R/3-System eingeführt. ABAP/4 wird mit der Einführung von ABAP Objects zu einer objektorientierten Programmiersprache erweitert. Der Open SQL Sprachumfang wird kontinuierlich erweitert. Die Entwicklungsumgebung wird mit hierarchischen Objektlisten, Navigation, Verwendungsnachweis und graphischem Screen Painter erweitert.
* Mit SAP NetWeaver 7.40 wurden u. a. ABAP Core Data Services, ABAP Channels, AMDP und Zugriff auf SAP HANA Tabellenausdrücke eingeführt.
* Mit SAP S/4HANA wurde von Open SQL auf ABAP SQL umgestellt
* Mit dem SAP BTP ABAP Environment (auch Steampunk genannt) wurden klare Leitplanken in die ABAP-Sprache eingezogen, um Cloud-Readiness zu gewährleisten (s. dazu auch Kapitel Sprachversionen und Sprachumfang).

## Eigenschaften

ABAP ist eine multiparadigmatische Programmiersprache, die objektorientierte, imperative und funktionale Elemente hat. Die ABAP-Sprache wird Bytecode interpretiert und Garbage collected.
Sie ist insbesondere für die Entwicklung, den Betrieb und die Wartung betriebswirtschaftlicher Anwendungen konzipiert.
Die Objektorientierung in ABAP basiert auf Klassen und Interfaces. In ABAP gibt es keine Mehrfachvererbung. Wie in C++ werden Definition und Implementierung der Klassen getrennt. Zusätzlich gibt es ein in die Sprache integriertes Ereigniskonzept.
Als Eigenschaften sind zu nennen:
* ABAP unterstützt eine auf Unterprogrammen und Funktionsbausteinen basierende prozedurale Programmierung. Die objektorientierten und die prozeduralen Programmiermodelle sind interoperabel.
* In neueren Sprachvarianten werden auch Elemente der funktionalen Programmierung, wie zum Beispiel List Comprehension, unterstützt.
* Interne Tabellen als Bestandteil der Sprache, d. h. tabellenartige Variablen mit Spalten und Schlüsseldefinitionen, auf denen im Hauptspeicher mit einer eigenen Syntax oder mit SQL operiert werden kann.
* In die Sprache eingebetteter Datenbankzugriff durch ABAP SQL (früher Open SQL).
* Exception Handling
* Berechtigungswesen
* ABAP Unit Testframework

## Sprachversionen und Sprachumfang

ABAP hat keine eigene Versionierung, sondern folgt der jeweiligen ABAP Platform Version. Zusätzlich kann man zwischen ABAP for Cloud Development, ABAP for Key User und Standard ABAP Sprachumfang unterscheiden. In den aktuellen Cloud-Produkten BTP ABAP Environment sowie in SAP S/4HANA Cloud public edition Cloud-Produkten stehen nur freigegebene SAP APIs zur Verfügung, die Cloudfähigkeit und Upgrade-Stabilität gewährleisten.
ABAP ist abwärtskompatibel, wodurch häufig eine hohe Komplexität und ein großer Sprachumfang im Legacy Coding existiert. Es gibt obsolete Sprachelemente, von deren Verwendung abgeraten wird.
In SAP S/4HANA sowie SAP S/4HANA private Cloud steht der volle ABAP-Sprachumfang (Standard ABAP) zur Verfügung. Um die Transformation der diversen on-premise Installationen sowie aus der SAP S/4HANA private Cloud zu unterstützen, ist es für ABAP-Entwickler über die ABAP-Development-Tools möglich, den Sprachumfang auf den ABAP for Cloud Sprachumfang einzuschränken und somit nur für den Cloud-Kontext freigegebene Sprachelemente und APIs zu verwenden.
Beispiel
Sowohl SAP S/4HANA Cloud 2302, als auch SAP BTP ABAP Environment 2302 beinhalten den ABAP for Cloud Sprachumfang 2302.

## Syntax

Syntax und Semantik von ABAP sind in der ABAP Sprachdokumentation der SAP SE dokumentiert. Die Syntax der Sprache ist der natürlichen Sprache angelehnt. Einzelne Anweisungen werden mit einem Punkt abgeschlossen. ABAP unterscheidet nicht zwischen Groß- und Kleinschreibung.
Die folgenden ABAP-Programme zeigen sowohl die imperative, als auch die objektorientiert Syntax eines „Hello World!“ Beispiels:
Imperative Syntax
Objektorientierte Syntax

## Entwicklungsmodell

Das vorherrschende Entwicklungsmodell in aktueller ABAP-Entwicklung ist das ABAP RESTful Application Programming Model (RAP).
Die Evolution des ABAP-Programmiermodells ist ausführlich in einem SAP-Community-Blog-Post beschrieben.
Ältere ABAP-Entwicklungsmodelle sind:
* Dynpros (Dialog Transaktionen)
* Web Dynpros
* BSP (Business Server Pages)

## Programmierumgebung

Das Besondere an der Programmierung in ABAP ist, dass die Entwickler keine Textdateien auf ihrem Rechner editieren und dann auf einen Versionskontrollserver hochladen, sondern alle direkt auf dem ABAP-Server programmieren.
Es stehen zwei Entwicklungsumgebungen für die ABAP-Entwicklung zur Verfügung: die ABAP Development Tools, welche auf der Open-Source-Software Eclipse basieren, und die ABAP Workbench, welche in das SAP-GUI integriert ist.

### ABAP Development Tools

Die ABAP Development Tools (ADT) sind die Standard-IDE für ABAP-Entwicklung. ABAP Development Tools / ADT sind in der Online-Dokumentation der SAP SE dokumentiert.
Seit 2012 wird mit ABAP Development Tools (ADT) eine auf die Open Source Eclipse-basierende Entwicklungsumgebung für ABAP bereitgestellt. ADT wird dabei in allen Produktvarianten, in denen ABAP entwickelt werden kann, unterstützt. Es ist auch möglich, Visual Studio Code (VS Code) für die ABAP Entwicklung zu verwenden. Es stehen dazu mehrere Plugins zur Verfügung. Der Funktionsumfang ist aber im Vergleich zu den ABAP Development Tools (ADT) noch eingeschränkt.
Einen ausführlichen Überblick und Einstieg in die Nutzung der ABAP Development Tools bietet der „ADT Leitfaden“ der Deutschsprachigen SAP Anwendergruppe (DSAG).

### ABAP Workbench / SAP GUI

Anfang der 1990er Jahre wurde die im SAP GUI integrierte ABAP Workbench (Transaktion SE80) für die Entwicklung in ABAP eingeführt.
Die ABAP Workbench (SE80) lieferte folgende wesentliche Verbesserungen:
* Hierarchische Darstellung aller Objektlisten (ABAP Pakete, ABAP Programme, ABAP Klassen etc.)
* Durchgängige Navigationsunterstützung zur Definitionsstelle, mit der Möglichkeit, Objekte direkt anlegen zu können
* Verwendungsnachweis zu allen Verwendungsstellen eines Objekts
Eine Besonderheit in der ABAP-Workbench ist die sogenannte „Vorwärtsnavigation“.
Beispiele
* Ein Doppelklick auf einen Tabellennamen oder Datentyp führt zur Definition der Datenbanktabelle im ABAP-Dictionary.
* Ein Doppelklick auf einen Funktions-, Methoden- oder Klassennamen führt dorthin.
* Ein Doppelklick auf einen Variablennamen führt zur Definition der Variable.
Falls das verwendete Objekt noch nicht existiert, kann es so auch angelegt werden.

## Herausforderungen und Umgang mit Legacy ABAP Coding

Die Vielzahl der möglichen ABAP-Anweisungen und ihrer Varianten sowie nicht reservierte Schlüsselwörter führen allgemein zu einem schwerer verständlichen Quellcode als in anderen gängigen Programmiersprachen. Die vorhandene Vielfalt der ABAP-Anweisungen resultiert aus der Abwärtskompatibilität.
Der Vorteil ist, dass die bisherigen Entwicklungen und Kundenanpassungen funktionsfähig bleiben und deren Verhalten sich nicht ändert. Für ABAP-Entwickler bedeutet dies, dass sowohl die alten als auch die neuen Sprachelemente erlernt werden müssen.
Mit Einführung von ABAP Objects in den 1990er Jahren wurde der in Klassen verfügbare Sprachumfang eingeschränkt, was zu einer Vereinfachung und Verbesserung des vorhandenen Legacy Coding geführt hat.
Mit der Einführung von ABAP Cloud im Jahre 2022 wurde der Sprachumfang erneut angepasst, so dass auch hier eine Vereinfachung und Renovierung des vorhandenen Legacy Coding erfolgen kann.
Es gibt verschiedene Werkzeuge, die Entwickler dabei unterstützen, Legacy Coding an neuere Programmierrichtlinien auszurichten, aktuelle Sprachelemente zu verwenden sowie Legacy Coding auf den Cloud-Umstieg vorzubereiten:
* Clean Code in ABAP
* Quick Fixes
* ATC (ABAP Test Cockpit) Checks
* Custom Code Migration
* ABAP Cloud Programmierrichtlinien
Alle gelisteten Werkzeuge sind Teil der ABAP Development Tools Entwicklungsumgebung.