ABAP Objects ist die objektorientierte Erweiterung der Programmiersprache ABAP des SAP®-R/3®-Systems. Die vorliegende Ausarbeitung soll jedoch keine tiefe Einführung in die objektorientierte Programmierung im Allgemeinen sein. Ebenso wenig konnten alle Aspekte der objektorientierten Programmierung in das Referat aufgenommen werden. Der Fokus liegt vielmehr auf den Konstrukten und Konzepten der Objektorientierung, welche in ABAP Objects implementiert sind. Nichtsdestotrotz wird am Anfang kurz auf die wesentlichen Elemente und Konzepte einer objektorientierten Programmiersprache eingegangen.
In den darauffolgenden Kapiteln wird erläutert, wie sich diese Konzepte mit ABAP Objects umsetzen lassen und welcher Elemente sich ABAP Objects bedient, auch im Vergleich bzw. Abgrenzung zu anderen objektorientierten Programmiersprachen. Auf die konkrete Umsetzung mit den zur Verfügung stehenden Sprachkonzepten wurde großen Wert gelegt und dies an geeigneten Stellen mit Syntax- und Programmbeispielen veranschaulicht. Hierbei soll zu erkennen sein, dass Anweisungen und Konstrukte der klassischen APAP-Programmiersprache hier durchaus ihre Verwendung finden. Auf das wesentliche Konzept der Vererbung wird in einem eigenen Kapitel eingegangen.
Zum Schluss wurden einige Übungsaufgaben entworfen, die der Einübung der vorgestellten Sachverhalte dienen sollen. Die Lösung und Ausarbeitung sollte mittels dem vorliegenden Dokument und der Online-Hilfe des SAP-Systems möglich sein. Musterlösungen sind als letztes Kapitel angehangen.
Inhalt
1 Einleitung
2 Definition Objektorientierung
3 Klassen
3.1 Klassendefinition
3.2 Sichtbarkeitsbereiche
3.3 Komponenten einer Klasse
4 Objekte und Objektreferenzen
4.1 Erzeugen und Referenzieren von Objekten
4.2 Zugriff auf Objektkomponenten
4.3 Mehrfachinstanzierung
4.4 Löschen von Objekten
5 Definition und Aufruf von Methoden
5.1 Konstruktoren
5.2 Parameterschnittstellen
5.3 Methodenaufrufe
5.4 Funktionale Methoden
6 Vererbung
6.1 Syntax für Unterklassen
6.2 Methodenredefinition
6.3 Abstrakte Klassen und Methoden
6.4 Finale Klassen und Methoden
7 Zusammenfassung und Ausblick
8 Anhang
8.1 Übungsaufgaben
8.2 Listingverzeichnis
8.3 Quellenangaben
9 Musterlösungen zu den Übungsaufgaben
9.1 Aufgabe 1
9.2 Aufgabe 2
1 Einleitung
ABAP Objects ist die objektorientierte Erweiterung der Programmiersprache ABAP des SAP®-R/3®-Systems. Das vorliegende Referat soll jedoch keine tiefe Einführung in die objektorientierte Programmierung im Allgemeinen sein. Ebenso wenig konnten alle Aspekte der objektorientierten Programmierung in das Referat aufgenommen werden. Der Fokus liegt vielmehr auf den Konstrukten und Konzepten der Objektorientierung, welche in ABAP Objects implementiert sind. Nichtsdestotrotz wird am Anfang kurz auf die wesentlichen Elemente und Konzepte einer objektorientierten Programmiersprache eingegangen.
In den darauffolgenden Kapiteln wird erläutert, wie sich diese Konzepte mit ABAP Objects umsetzen lassen und welcher Elemente sich ABAP Objects bedient, auch im Vergleich bzw. Abgrenzung zu anderen objektorientierten Programmiersprachen. Auf die konkrete Umsetzung mit den zur Verfügung stehenden Sprachkonzepten wurde großen Wert gelegt und dies an geeigneten Stellen mit Syntax- und Programmbeispielen veranschaulicht. Hierbei soll zu erkennen sein, dass Anweisungen und Konstrukte der klassischen APAP- Programmiersprache hier durchaus ihre Verwendung finden. Auf das wesentliche Konzept der Vererbung wird in einem eigenen Kapitel eingegangen.
Zum Schluss wurden einige Übungsaufgaben entworfen, die der Einübung der vorgestellten Sachverhalte dienen sollen. Die Lösung und Ausarbeitung sollte mittels dem vorliegenden Dokument und der Online-Hilfe des SAP-Systems möglich sein. Musterlösungen sind als letztes Kapitel angehangen.
2 Definition Objektorientierung
Wie durch die Bezeichnung "objektorientiert" bereits nahe gelegt wird, steht bei der objektorientierten Programmierung der Objektbegriff im Mittelpunkt. In der objektorientierten Software-Entwicklung ist ein Objekt ein individuelles Exemplar von Dingen (z. B. Auto), Personen (z. B. Mitarbeiter) oder Begriffen der realen Welt (z. B. Bestellung). Weitere Beispiele für betriebswirtschaftliche Objekte, wie sie auch im SAP-System existieren, sind Kunde, Material, Rechnung, etc. Ein Objekt zeichnet sich dadurch aus, dass es einen bestimmten Zustand bzw. Eigenschaften (Attribute) besitzt und durch ein bestimmtes Verhalten bzw. eine Menge von Funktionen/Operationen (Methoden) gekennnzeichnet wird.
Bei der objektorientierten Programmierung geht es darum, Realweltobjekte mit ihren Attributen und Methoden möglichst naturgetreu in Programmkonstrukte abzubilden und Programmabläufe so zu gestalten, wie sie auch in der realen Welt stattfinden würden. Hierzu werden die Attribute und Methoden, die zu einem bestimmten Objekt gehören, zusammengefasst. Eine Änderung oder Abfrage des Zustands eines Objekts (also der Belegung seiner Attribute und Verbindungen) sollte nur über seine Methoden möglich und nach außen nicht sichtbar sein (information hiding). Dadurch wird gewährleistet, dass sich das Objekt immer in einem konsistenten Zustand befindet. Verbindungen zwischen Objekten werden Assoziationen genannt. Jedes Objekt besitzt eine eindeutige Objektidentität. Wenn zwei Objekte gleiche Attributwerte besitzen, aber unterschiedliche Identitäten haben, spricht man von Objektgleichheit.
Weitere Merkmale einer objektorientierten Programmiersprache:
- Abstraktion:
Bedeutet die Fähigkeit, Abläufe der Realwelt (z. B. betriebswirtschaftlicher oder technischer Art) möglichst naturgetreu in der Programmiersprache wiederzugeben. Hierzu werden Realweltprobleme in Klassen (siehe Kapitel 3)
modelliert und während der Ausführung eines Programms in Objekten abgebildet.
- Kapselung:
Details der Implementierung werden hinter wohl definierten und dokumentierten Schnittstellen verborgen. Sie sorgen dafür, dass die abstrakte Darstellung eines Objekts nur gemäß seiner Spezifikation genutzt wird.
- Vererbung:
Neue Abstraktionen, also Klassen (siehe Kapitel 3), werden aus bereits bestehenden abgeleitet. Sie erben alle Attribute und Methoden ihrer übergeordneten Klasse und können diese erweitern und spezialisieren. Hierdurch entsteht eine Klassenhierarchie. Abgeleitete oder speziellere Klassen werden als Unterklassen bezeichnet, generellere Klassen als Oberklassen.
- Polymorphie:
Unterschiedliche Objekte können die gleiche Schnittstelle nach außen präsentieren. Ein Verwender muss nur die Schnittstelle kennen und kann über diese auf Objekte verschiedener Klassen zugreifen, ohne deren Details zu kennen. Dies kann entweder erreicht werden, indem vererbte Methoden redefiniert (überschrieben) werden (siehe Kapitel 6.2) oder durch die Verwendung von Interfaces (nicht Bestandteil dieses Referats).
3 Klassen
Grundlage einer jeden objektorientierten Programmiersprache sind die Klassen. Eine Klasse spezifiziert die Gemeinsamkeiten einer Menge von Objekten mit denselben Eigenschaften (Attributen), demselben Verhalten (Methoden) und denselben Beziehungen (Assoziationen und/oder Vererbungen, siehe Kapitel 6). Eine Klasse ist somit die Vorlage oder Schablone eines Objekts, also ein Objekttyp. Auf der Grundlage einer Klasse können verschiedene Objekte erzeugt werden mit jeweils unterschiedlich oder gleich ausgeprägten Attributen. Ein Objekt wird als Instanz einer Klasse bezeichnet.
Im SAP-System wird unterschieden zwischen lokalen und globalen Klassen. Lokale Klassen werden innerhalb eines beliebigen ABAP-Programms definiert und sind auch nur dort sichtbar. Globale Klassen (nicht Bestandteil dieses Referats) werden mit dem Werkzeug Class Builder der ABAP Workbench in der Klassenbibliothek angelegt und sind in jedem ABAP-Programm sichtbar.
3.1 Klassendefinition
In ABAP Objects werden Klassen durch die Anweisungen CLASS und ENDCLASS definiert. Hierbei besteht eine Klassendefinition immer aus zwei Teilen: einem Deklarationsteil und einem Implementierungsteil. Der Deklarationsteil enthält eine Beschreibung aller Komponenten der Klasse (Attribute, Methoden und/oder Ereignisse (letztere nicht Bestandteil dieses Referats)). Im Implementierungsteil einer Klasse werden die einzelnen Methoden implementiert. Folgendes Listing zeigt das Grundgerüst einer Klasse:
CLASS classname DEFINITION.
...
ENDCLASS.
CLASS classname IMPLEMENTATION.
...
ENDCLASS.
3.2 Sichtbarkeitsbereiche
Wie in anderen objektorientierten Programmiersprachen auch, müssen die verschiedenen Komponenten des Deklarationsteils (siehe Kapitel 3.1) Sichtbarkeitsbereichen zugeordnet werden. ABAP Objects kennt folgende drei:
- PUBLIC:
Alle im öffentlichen Abschnitt deklarierten Komponenten sind für alle Verwender, sowie in den Methoden aller Erben (Unterklassen) und der Klasse selbst ansprechbar. Die öffentlichen Komponenten stellen die Schnittstelle der Klasse zu jedem Verwender dar.
- PROTECTED:
Alle im geschützten Abschnitt deklarierten Komponenten sind in den Methoden aller Erben und der Klasse selbst ansprechbar. Die geschützten Komponenten stellen eine spezielle Schnittstelle der Klasse für ihre Unterklassen dar.
- PRIVATE:
Alle im privaten Abschnitt deklarierten Komponenten sind nur in den Methoden der Klasse selbst ansprechbar und auch nicht für die Erben sichtbar. Die privaten Komponenten stellen somit keine Schnittstelle zu den Verwendern der Klasse dar.
Die drei Sichtbarkeitsbereiche sind die Grundlage für die wichtige Objekteigenschaft der Kapselung in ABAP Objects. Bei der Definition einer Klasse sollte darauf geachtet werden, so wenig Komponenten wie möglich im öffentlichen Abschnitt zu deklarieren und diese öffentlichen Komponenten sorgfältig zu entwerfen. Für globale Klassen dürfen sie nach einer Freigabe der Klasse nicht mehr geändert werden.
Ferner sollten änderbare öffentliche Attribute gänzlich vermieden werden. Stattdessen sollten zur Änderung von Attributen entsprechende Methoden
eingesetzt werden, damit der Zustand des Objektes vollständig gekapselt und konsistent ist. Folgendes Listing zeigt die Syntax des Deklarationsteils:
CLASS classname DEFINITION. PUBLIC SECTION.
...
PROTECTED SECTION.
...
PRIVATE SECTION.
...
ENDCLASS.
3.3 Komponenten einer Klasse
Komponenten einer Klasse sind, wie bereits erwähnt, Attribute, Methoden und Ereignisse. Hierbei wird unterschieden zwischen Instanzkomponenten und statischen Komponenten, welche neben der Sichtbarkeit (siehe Kapitel 3.2) auch für die Lebensdauer der einzelnen Komponenten verantwortlich sind. Instanzkomponenten sind in jedem Objekt einer Klasse (also in jeder Instanz) unabhängig voneinander vorhanden. Statische Komponenten hingegen sind nur einmal pro Klasse vorhanden, das heißt alle Objekte einer Klasse teilen sich dieselben statischen Komponenten. Änderungen eines statischen Attributs beispielsweise sind somit in allen Objekten der Klasse gleichermaßen sichtbar. Zudem können die statischen Komponenten verwendet werden, ohne eine Instanz der Klasse erzeugt zu haben.
- Attribute:
Attribute sind die Datenobjekte einer Klasse. Ihre Ausprägung spiegelt den Zustand eines Objektes wider. Mittels der Anweisung DATA werden Instanzattribute in der gewohnten Art und Weise deklariert. Zur Deklaration eines statischen Attributs wird die Anweisung CLASS-DATA verwendet. Konstanten können mit der Anweisung CONSTANTS deklariert werden. Da sie zur Laufzeit nicht veränderbar sind, sind sie instanzunabhängig und mit statischen Attributen vergleichbar. Beispiel einer Attributdeklaration:
CLASS attributes DEFINITION. PRIVATE SECTION.
DATA object_value TYPE i.
CLASS-DATA object_count TYPE i.
CONSTANTS pi TYPE f VALUE '3.14159265'.
ENDCLASS.
Mittels der Anweisung READ-ONLY kann bei den beiden DATA-Anweisungen bewirkt werden, dass Attribute zwar von außen lesbar sind, aber nur durch Methoden der Klasse verändert werden können. Hierdurch können unter Umständen sogenannte "get-Methoden" überflüssig werden. Mit Hilfe der Anweisung TYPES lassen sich wie gewohnt eigene Typen definieren.
- Methoden:
Methoden kennzeichnen das Verhalten einer Klasse. Sie sind Prozeduren, die nur innerhalb einer Klasse verwendet werden können, und besitzen eine Parameterschnittstelle, in der lokale Daten deklariert werden können. Auch hierbei gibt es eine Unterscheidung in Instanzmethoden und statische Methoden. Instanzmethoden können auf alle Attribute und Ereignisse der eigenen Klasse zugreifen, statische Methoden nur auf statische Attribute und statische Ereignisse. Um Instanzmethoden verwenden zu können, muss erst ein Objekt der Klasse erzeugt werden, wohingegen statische Methoden unabhängig von Objekten verwendet werden können.
Methoden werden im Deklarationsteil der Klasse bekannt gemacht und gleichzeitig die Parameterschnittstellen definiert. Instanzmethoden werden mit der Anweisung METHODS deklariert, statische Methoden mit der Anweisung CLASS-METHODS. Im Folgenden die grobe Syntax:
{ METHODS | CLASS-METHODS } meth
IMPORTING... { VALUE( i ) | i} TYPE type ... EXPORTING... { VALUE( e ) | e} TYPE type ... CHANGING... { VALUE( c ) | i} TYPE type ... EXCEPTIONS...
Zwischen den Anweisungen METHOD und ENDMETHOD wird die Methode im Implementierungsteil der Klasse implementiert, sowohl für Instanzmethoden, als auch für statische Methoden. Die METHOD-Anweisung hat keine weiteren Zusätze, die Parameterschnittstellendefinition entfällt also im Implementierungsteil. Zur Veranschaulichung ein erstes Beispiel (Listing 1a):
Abbildung in dieser Leseprobe nicht enthalten
In obigem Programmbeispiel sind einige Dinge enthalten, die erst im nächsten Kapitel vorgestellt werden, z. B. wie Objekte und Objektreferenzen erzeugt werden (siehe Kapitel 4). Auch Parameterschnittstellen, Methodenaufrufe und Konstruktoren werden erst weiter unten näher beschrieben (siehe Kapitel 5). Es soll hier lediglich ein erster Eindruck vermittelt werden. Eine Erweitung des Programms erfolgt ebenfalls im fünften Kapitel. Dort werden auch die speziellen Methoden constructor und class-constructor erläutert.
Bereits zu erwähnen sei, dass beim Methodenaufruf die gleichen Optionen für Parameterübergaben existieren, wie bei der Methodendeklaration (IMPORTING, EXPORTING, etc.). Wie bereits in Listing 1a zu erkennen ist, müssen die IMPORTING- und EXPORTING-Parameter miteinander korrespondieren, das heißt EXPORTING-Parameter beim Methodenaufruf dienen der Methode selbst bei der Ausführung als IMPORTING-Parameter und umgekehrt. CHANGING-Parameter sind beides gleichzeitig.
- Ereignisse:
Ereignisse bilden die dritte Art möglicher Komponenten von Klassen. Da eine eingehendere Behandlung den Rahmen dieses Referats sprengen würde, sei nur kurz erwähnt, dass Ereignisse in ABAP Objects es Objekten einer Klasse ermöglichen (ähnlich wie in anderen Programmiersprachen, z. B. Java, auch), eine Änderung ihres Zustandes zu veröffentlichen. Andere Objekte können dann auf die Zustandsänderung reagieren.
[...]
-
-
-
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X.