Langsam werden unsere Beispielprogramme umfangreicher – da wird es Zeit, etwas Ordnung in deren Struktur zu bringen. Dies können Sie mit verschiedenen Methoden der Modularisierung erreichen.
13 Modularisierung von Programmen 

Klar gegliederte Pakete mit abgegrenzter Aufgabenstellung – das Ideal des Baukastenprinzips. Wenn Sie in Ihren Programmen komplexe Lösungen in gekapselte kleine Komponenten zerlegen, werden Sie die hohe Transparenz und die leichte Änderbarkeit schnell zu schätzen wissen. In ABAP heißt das Mittel zum Zweck Modularisierung – und in diesem Kapitel lernen Sie wichtige Modularisierungstechniken kennen.
Zunächst eine kleine, aber nicht unwichtige Vorbemerkung: Die Strukturierung einer Lösung findet im Kopf statt, nicht im Quellcode. Der Quellcode bildet die Lösung nur ab – ob sie gut strukturiert ist oder nicht. Die Werkzeuge einer Entwicklungsumgebung sind kein Ersatz für ein gutes Lösungskonzept, und eine schlechte Lösung bleibt eine schlechte Lösung, auch wenn sie die feinsten Modularisierungstechniken nutzt und auf einem Superrechner schneller läuft.
[+] Erst konzipieren, dann programmieren
Vor der ersten Zeile Quellcode sollten Sie deshalb immer erst Ihr Programm konzipieren, strukturieren, die erforderlichen Recherchen durchführen und den Lösungsentwurf prüfen – und erst danach beginnen, den Quellcode im Editor zu schreiben.
13.1 Überblick 

SAP stellt eine Reihe von Techniken für die Modularisierung zur Verfügung. Durch die Verwendung globaler und lokaler ABAP-Klassen können Sie moderne Modularisierungs- und Kapselungstechniken nutzen und neben einer klaren Strukturierung Ihrer Programme auch wiederverwendbare Einheiten schaffen.
Funktionsgruppen bilden ähnliche wiederverwendbare Einheiten. Sie weisen zwar nicht alle Vorteile globaler Klassen auf, sind aber weit verbreitet sowie einfach zu erstellen und zu verwenden.
Ebenso ist jeder ABAP-Report von Haus aus durch seine Verarbeitungsblöcke modular strukturiert. Die Laufzeitumgebung ruft Verarbeitungsblöcke, d. h. Ereignisse wie START-OF-SELECTION oder Dialogmodule wie den Selektionsbildschirm, eigenständig auf.
Schließlich besteht im ABAP-Quellcode die Möglichkeit, weitere Modularisierungstechniken zu nutzen. Für den Einstieg in ABAP sind hier vorerst zwei Arten besonders nützlich:
-
Modularisierung des Quellcodes
Die Modularisierung des Quellcodes in verschiedene, separat pflegbare Quelltexte kann die Übersichtlichkeit großer Programme erhöhen und das gleichzeitige Bearbeiten durch mehrere Entwickler erleichtern. In den Modulen steht ABAP-Quellcode, der bei der Programmgenerierung so integriert wird, als ob er im Hauptprogramm stünde.Diese Modularisierungstechnik wird beispielsweise von Funktionsgruppen genutzt: Die Funktionsgruppe, das Rahmenprogramm, bindet eine Reihe von Include-Programmen ein, die die eigentlichen Funktionsbausteine, Unterprogramme und auch globale Datendefinitionen enthalten.
-
Prozeduren
Prozeduren sind aufrufbare Einheiten und besitzen Schnittstellen für die Datenübergabe zum rufenden Programm. Sie können auch eigene, lokale Datendeklarationen enthalten. Für den Einstieg in ABAP sind vorerst folgende Prozeduren wichtig:-
Methoden
Methoden sind Prozeduren innerhalb von (globalen oder lokalen) Klassen. Sie dienen überwiegend der programminternen Modularisierung von Aufgaben, z. B. dass ein bestimmter Verarbeitungsblock in einer Schleife ausgeführt werden soll. Um die Schleife übersichtlich zu halten und die dafür benötigten lokalen Variablen von den globalen Variablen ihrer Klasse zu isolieren, wird der Verarbeitungsblock in ein eigenes Unterprogramm gelegt. Für Methoden können Sie die Sichtbarkeit definieren. Damit legen Sie fest, ob die Methode nur innerhalb der jeweiligen Klasse oder auch von anderen Aufrufern verwendet werden darf. -
Unterprogramme
Was Methoden für Klassen sind, sind Unterprogramme für Programme. Sie sind explizit aufrufbare Prozeduren, weisen jedoch gegenüber Methoden einige Schwächen auf: Die Schnittstellendefinition ist weniger genau und die Sichtbarkeit kann nicht festgelegt werden. Daher können Unterprogramme nur innerhalb des jeweiligen Hauptprogramms aufgerufen werden, um eine Funktionalität für andere Programme anzubieten. -
Funktionsbausteine
Im Unterschied zu den eher programmspezifischen Unterprogrammen sind Funktionsbausteine für häufig wiederkehrende, allgemeine Aufgaben gedacht. Beispielsweise wäre es denkbar, dass aus verschiedenen Programmen heraus die Druckausgabe als PDF-Datei und nicht als SAP-Liste erfolgen soll. Um diese Umwandlung aus verschiedenen Programmen heraus möglichst einfach einzubauen, gibt es einen zentralen Funktionsbaustein, der diese Aufgabe übernimmt. Dieser Funktionsbaustein muss im Programm nur aufgerufen und die Datenschnittstelle mit Daten versorgt werden. Den Rest, d. h. die Umwandlung selbst, übernimmt der Funktionsbaustein.
SAP liefert im Standard viele Funktionsbausteine mit aus, die nach Bedarf in kundeneigenen Programmen verwendet werden können. Außerdem existiert für die Verwaltung von Funktionsbausteinen ein eigenes Werkzeug (siehe Abschnitt 13.3.2, »Funktionsbausteine«).
-
[ ! ] Nicht für Wiederverwendung
Auch wenn es verlockend erscheinen mag: Verwenden Sie die Technik der Modularisierung mit Include-Programmen in der Regel nicht, um mehrfach verwendbare Quelltext-Einheiten zu schaffen! Wird ein Include-Programm in mehreren Rahmenprogrammen verwendet, leidet die Wartbarkeit sowohl des Include-Programms als auch der Rahmenprogramme: Es wird sehr schwierig, Änderungen am Include-Programm durchzuführen, ohne die Rahmenprogramme zu beschädigen. Wenn Sie eine Funktion so programmieren möchten, dass sie mehrfach verwendbar ist, nutzen Sie lieber globale Klassen.
[+] Historisch gewachsen
Historisch gesehen, sind Funktionsbausteine und Funktionsgruppen die Vorgänger der ABAP-Klassen. Sie erfüllen eine ähnliche Funktion, ohne jedoch die Merkmale der Objektorientierung zu besitzen. Ob Sie in Ihrem Arbeitsumfeld in Zukunft eher auf Funktionsbausteine oder eher auf Klassen stoßen werden, hängt davon ab, wie alt die jeweilige SAP-Anwendung ist und ob sie in den letzten Jahren einer Renovierung unterzogen wurde. In jüngeren Anwendungen findet man fast ausschließlich Klassen, und Funktionsbausteine werden nur in begründeten Einzelfällen verwendet. In älteren, nicht kürzlich überholten Anwendungen ist es umgekehrt.
Im Folgenden werden wir all diese Modularisierungstechniken genauer unter die Lupe nehmen.