View
243
Download
8
Category
Preview:
Citation preview
Willkommen zur Schulung
ABAP/OO
Programmierung
Wekum G m b H
Mannheim 2018©
2
Themen
1. Arten der Programmierung
2. Vorteile der OO-Programmierung
3. Begriffe der OO-Programmierung
4. ABAP-Entwicklungsumgebungen
5. ABAP-Spracheigenschaften
6. ABAP/OO-Anweisungen
7. ABAP/OO-Vererbung
Lernziele
Die Schulungsteilnehmer lernen die wichtigsten ABAP/OO-Anweisungen und deren Anwendung am Beispiel eines
Taschenrechners kennen. Voraussetzung für das Verständnis der Lerninhalte sind Grundkenntnisse der prozeduralen
ABAP-Programmierung oder ein vergleichbares Praxiswissen. Ein weiteres Lernziel besteht in der Handhabung von
Suchhilfen und Schlüsselwortdokumenten, um die Teilnehmer nach der Schulung auf ein eigenständiges Arbeiten vorzubereiten. Die Ausführungen werden durch praktische Programmierübungen ergänzt, die am Ende der Schulung
dazu befähigen, umfangreiche ABAP/OO Quelltexte zu verstehen und größere Programmeinheiten selbständig zu
bearbeiten.
Arbeitsumfeld
Alle Vorführungen und Übungen werden im Schulungssystem des Kunden unter einem vorgegebenen Mandanten abgewickelt. Dort muss jeder Teilnehmer einen Transportauftrag ohne Zielsystem oder ein Projekt anlegen, in dem die eigenen Übungen abgelegt werden. Um die einzelnen Entwicklungsobjekte nach Beendigung der Schulung leichter zu
finden, muss jedes Objekt mit dem Kundenpräfix Y oder Z beginnen, gefolgt von einem eindeutigen Teilnehmerkürzel
<XX> und dem eigentlichen Namen des Entwicklungsobjekts, jeweils getrennt durch einen Unterstrich. Außerdem
müssen alle von den Teilnehmern angelegten Entwicklungsobjekte einem Paket oder Projekt zugeordnet werden, das
ebenfalls mit dem Präfix Y oder Z beginnen muss.
Übungen
Die einzelnen Themen werden durch praktische Programmierübungen vertieft, die jeder Teilnehmer selbstständig oder in Gruppen durchführen kann. Im Mittelpunkt steht die Programmierung eines einfachen Taschenrechners, dessen
Rahmen ausschließlich durch ABAP/OO-Anweisungen zu gestaltet ist.
3
Arten der Programmierung
Laut ISO ist eine Programmiersprache eine formale Sprache zur Notation von Rechnerprogrammen. Sie wird bestimmt
durch ihre Grammatik, mit der die Syntax der verfügbaren Terme festgelegt wird, und ihre Semantik, aus der die Bedeutung der Anweisungen hervorgeht, die aus den einzelnen Termen gebildet wurden. Ein Programm besteht aus einer Liste von Anweisungen, die auf einem Speichermedium verfügbar ist und der Ausführung von Vorgängen auf
einem Rechner (PC) dienen. Ein Vorgang beschreibt einen Ablauf, bei dem ein System verschiedene Zustände erlebt.
Unterschieden werden Compiler- und Interpreter-Sprachen:
1. Compiler übersetzen den gesamten in einer Programmiersprache erstellten Quelltext in ein direkt ausführbares Maschinenprogramm. Erst wenn das Programm komplett und fehlerfrei übersetzt wurde, kann es vom Benutzer ausgeführt werden. Dadurch benötigt das Programm weniger Ausführungszeit und Speicherplatz, muss allerdings bei jeder Umwandlung in seiner Gesamtheit übersetzt werden, was zu einer aufwendigeren Fehlersuche führt. Zu
den Compilersprachen gehören zum Beispiel C oder FORTRAN.
2. Interpreter sind Übersetzungsprogramme, die jeweils eine einzelne Befehlszeile des Quelltextes in einen Zwischencode übersetzen, der zur Laufzeit zeilenweise ausgeführt wird. Die Fehlersuche wird dadurch stark vereinfacht, weil eine einzelne Befehlszeile sofort getestet werden kann. Allerdings erhöhen sich Laufzeit und erforderlicher Speicherplatz, weil das Quellprogramm größer als das Maschinenprogramm ist und bei jeder Ausführung erneut analysiert werden muss, was besonders bei Schleifen viel Zeit kostet. Die bekanntesten
Interpreter-Sprachen sind im Augenblick Java, Visual Basic, C# und ABAP.
Letztlich werden die Quelltexte beider Programmarten von Assemblern in ein maschinell ausführbares Programm gewandelt, das auf der jeweiligen Plattform - zum Beispiel Windows oder Unix - direkt ausgeführt werden kann. Dieser Maschinencode besteht aus Binärfolgen, die für Menschen jedoch schwer lesbar sind, weshalb jedes Betriebssystem einen Satz an Mnemonics anbietet, der diese Binärfolgen aus Gründen der besseren Lesbarkeit als Kürzel verschalt,
zum Beispiel ADD oder MVC, ähnlich den ABAP-Kontrollblöcken.
Bei höheren Programmiersprachen wird außerdem zwischen prozeduralen und objektorientierten Ausführungen unterschieden. Erstere enthielten ursprünglich nur eine lineare Liste von Anweisungen, die schrittweise abgearbeitet wurde. Erst später wurden die Prozedursprachen um Funktionsaufrufe mit abgegrenzten Aufgaben erweitert, weshalb auch öfters der Begriff der funktionalen Programmierung verwendet wird. Dagegen fasst die objektorientierte Programmierung ihre Daten und Funktionen in Objekten zusammen, die von außen nicht beeinflusst werden können.
Die bekanntesten Prozedursprachen sind C, COBOL oder FORTRAN, während Java, C# oder C++ und ABAP Objects
bekannte Vertreter der Objektorientierung sind. All genannten Sprachen erfüllen die Vorgaben der strukturierten Programmierung, die eine Aufteilung in Funktionen auf Programmebene vorsieht Diese bestehen wiederum aus genau drei Kontrollstrukturen, nämlich der Folge samt Verzweigung und Wiederholung.
Vorteile der OO-Programmierung
Im Gegensatz zur prozeduralen Programmierung verlagert die objektorientierte Programmierung die Modellierung verstärkt vom Lösungs- in den Problembereich: Bei der Programmentwicklung liegt der Blickpunkt vor allem auf der Bestimmung der tatsächlich benötigten Objekte mit ihren Eigenschaften und Fähigkeiten. Auf diese Weise wird eine vorzeitige Festlegung verpflichtender Einzelheiten verhindert, so dass die Entwicklung umfangreicher Programme im ersten Stadium auf grundlegende Probleme und Zusammenhänge beschränkt wird. Durch diesen Ansatz werden Entscheidungen über den Entwurf oder die Implementierung eines Programmes erst dann getroffen, wenn alle Vorgaben und Einzelheiten vollständig festgelegt sind. Neben diesem grundlegenden Ansatz bietet die objektorientierte Programmierung weitere Vorteile wie:
Abbildung der Realität durch Objekte mit Eigenschaften und Funktionen
Kapselung von Objekten in Klassen unter Einschränkung der Sichtbarkeit von Objekten
Wiederverwendung durch Nutzung von Objekten anderer Klassen oder durch Vererbung
Schaffung neuer Klassen und Aufbau von Klassenhierarchien durch Vererbung
Vielgestaltigkeit durch unterschiedliches Verhalten bei gleichem Schnittstellenaufruf
Gleichzeitige Existenz von Bezeichnern mit mehreren Ausprägungen durch Überladen
Schnittstellenstandard für sprachübergreifende Anwendungen
Begriffe wie Kapselung oder Wiederverwendung werden auch von anderen Programmiersprachen beansprucht und
erfüllt. So wird ein C-Programmierer mit Recht bemerken, dass zum Beispiel der gesamte Unix-Kern seit Jahrzehnten
durch zusätzliche C-Funktionen ergänzt wird, die sehr wohl in ihrer Funktionalität gekapselt und daher jederzeit für
weitere Versionen nutzbar sind. Während die prozedurale Programmierung in dieser Hinsicht jedoch die Disziplin des
Ausführenden erfordert, bietet die OO-Programmierung nicht nur die technischen Hilfsmittel für derartige Forderungen
an, sondern erzwingt sie oftmals. So können zum Beispiel Variable, deren globale Sichtbarkeit unerwünscht ist, eben genau auf die Sichtbarkeit einer ausgewählten Klasse beschränkt werden. Das schließt allerdings nicht aus, dass selbst mit diesen Mitteln durchaus chaotisch verfahren werden kann.
4
Eine gänzlich neue Technik ist allerdings die Vererbung von Eigenschaften und Funktionalitäten, die in prozeduralen
Sprachen nicht vorhanden ist. Während ABAP/OO diese Möglichkeit jedoch wie Java oder C# auf die Einfachvererbung
beschränkt, bieten Sprachen wie C++ oder Eiffel und Perl zusätzlich die Möglichkeit der Mehrfachvererbung an, also
die Übernahme von Attributen und Methoden aus mehreren Klassen. Das hat in der Vergangenheit eher verwirrt, gerade
bei Übernahme von gleichnamigen Methoden oder gleichartigen Schnittstellen. Allerdings verfügt auch ABAP/OO durch
das FRIENDS-Konzept über die Möglichkeit, auf private Komponenten anderer Klassen zuzugreifen.
Durch den Bezug auf Bestandteile (Objekte) und Zustände (Methoden) des täglichen Lebens versucht der OO-Ansatz,
sein Programmiermodell auf die reale Welt und deren Ausprägung zu beziehen und möglichst genau abzubilden. Darin
liegt die große Stärke der OO-Vorgaben, nämlich abstrakte und komplexe Programmiertechniken durch diesen Bezug
einfacher vorstellbar und damit leichter anwendbar zu machen. Dass letztlich auch dieser Ansatz nicht immer einfach ist, liegt in der Natur der Aufgaben, die von einer realen Welt gestellt werden.
Begriffe der OO-Programmierung
Ein Objekt stellt die gemeinsame Beschreibung von Daten und Verarbeitungen innerhalb eines Kontexts dar, das sich auf ein Objekt der realen Welt bezieht.
Eine Klasse beinhaltet die Beschreibung von Objekten einer logisch zusammenhängenden Art, die Klasse mit den Mitteln einer Programmiersprache einmalig beschrieben wird.
Eine Instanz ist ein einzelnes, zur Laufzeit existierendes Exemplar einer Klasse. Während eine Klasse ihre Objekte allgemein beschreibt, ist eine Instanz die konkrete Ausprägung dieser Beschreibung
Ein Attribut beschreibt die Eigenschaft eines Objektes der Klasse, zum Beispiel die Länge einer Strecke. Unterschieden werden Instanz-Attribute, die ein einzelnes Exemplar der Klasse repräsentieren, während statische Attribute die Eigenschaften der Klasse selbst beschreiben, zum Beispiel die Anzahl ihrer Methoden.
Eine Methode ist eine Funktion, die jede Instanz der Klasse ausführen kann. Während die Attribute einer Instanz die Eigenschaften einer Klasse beschreiben, beschreiben Methoden deren Verhalten. Eine statische Methode ist eine Funktion, die von der Klasse selbst ausgeführt werden kann.
Ein Konstruktor ist eine besondere Methode, die zur Laufzeit genau einmal durchlaufen wird, sobald der erste Zugriff
auf die Klasse erfolgt. Der Konstruktor einer Instanz beginnt mit der Anweisung METHOD constructor, der statische
Konstruktor mit der Anweisung METHOD class_constructor.
Ein Ereignis ist ein Zustand, der von einer Instanz oder Klasse ausgelöst wird, worauf andere Klassen durch Aufruf einer eigenen Methode reagieren können, die als Event Handler bezeichnet wird.
Die Möglichkeit, Attribute oder Methoden einer Klasse zu verbergen, wird als Sichtbarkeit bezeichnet. Damit kann der Zugriff anderer Klassen teilweise oder vollständig verhindert werden.
Bei der Kapselung geht ABAP/OO im Gegensatz zu C++ oder Java eigene Wege, indem ein Deklarations- und ein
Implementationsteil unterschieden werden. Während der Deklarationsteil den Benutzer über den Zweck der Klasse aufklärt, sollte der Quelltext der Methoden und Ereignisbehandlung im Implementationsteil eher verborgen bleiben.
Interfaces dienen in Programmiersprachen mit einfacher Vererbung dazu, die Vorteile der Mehrfachvererbung zu nutzen, ohne deren Risiken einzugehen. Klassen können Interfaces deklarieren und dann über diese angesprochen werden, wobei auch andere Klassen dasselbe Interface verwenden können.
Polymorphie entsteht, wenn Klassen die gleiche Funktionalität mit unterschiedlichen Methoden umsetzen, indem die Methode der Oberklasse in der Unterklasse mit demselben Namen und derselben Schnittstelle deklariert, aber unterschiedlich implementiert wird.
UML (Unified Modeling Language) ist eine grafische Beschreibungssprache für Strukturen und Abläufe, die in der
objektorientierten Programmierung zur Modellierung verwendet wird und durch ISO 19505 normiert wurde.
Von einer Singleton-Klasse wird gesprochen, wenn nur ein einziges Objekt zu einer Klasse existieren darf, zum Beispiel ein zentrales Protokollobjekt, das alle Ausgaben in eine Datei schreibt.
Eine Factory-Klasse ist ein objektbasiertes Erzeugungsmuster, das Schnittstellen bereitstellt, um verwandte oder voneinander abhängige Objekte zu erzeugen, ohne ihre konkreten Klassen zu verwenden. Eine derartige Klasse wird vorzugsweise eingesetzt, wenn bestimmte Objekte in einem Programm ohne großen Aufwand ausgetauscht werden sollen. Dafür wird eine abstrakte Klasse erstellt, die ein oder mehrere weitere abstrakte Klassen erzeugen kann. Die Methoden zum Erzeugen der abstrakten Produkte bleiben dabei auch abstrakt, werden also nicht ausprogrammiert. Von diesen abstrakten Klassen erben anschließend konkrete Implementierungen der Factory-Klasse.
5
Eine abstrakte Klasse bezeichnet in der OO-Programmierung eine Klasse, die mindestens eine abstrakte Methode
enthält. Eine abstrakte Methode besteht nur aus einer formalen Schnittstelle, die als Signatur bezeichnet wird, deren Funktionsweise aber noch programmiert und implementiert werden muss. Als Basisklassen in einer Klassenhierarchie können abstrakte Klassen grundlegende Eigenschaften ihrer Unterklassen festlegen, ohne diese bereits umzusetzen.. Leitet eine Klasse von einer abstrakten Klasse ab, müssen alle vererbten abstrakten Methoden überschrieben und implementiert werden, damit die erbende Klasse selbst nicht abstrakt ist.
Dagegen sind Interfaces rein abstrakte Klassen, die ausschließlich Methoden in ihrer Signatur festlegen und in unterschiedlichen Klassen implementiert werden können.
ABAP-Entwicklungsumgebungen
Mittels Transaktion SE80 können die einzelnen Entwicklungsobjekte einer ABAP-Anwendung bearbeitet werden, neben
dem eigentlichen Quelltext zum Beispiel Datenobjekte oder Oberflächen. Nach Auswahl eines Entwicklungsobjektes
mit der linken Maustaste und einem anschließendem Doppelklick oder Auslösen der Funktionstaste F2 wird in die
jeweilige Arbeitsumgebung des ausgewählten Objektes verzweigt. Dieser Vorgang heißt Vorwärtsnavigation, die
Umkehrung mittels Funktionstaste F3 Rückwärtsnavigation. Die Arbeitsumgebung der einzelnen Entwicklungsobjekte
kann aber auch direkt über ein Transaktionskürzel aufgerufen werden, zum Beispiel:
RZ11 Profilparameter
SE09 Transport Organizer
SE11 Dictionary
SE16 Tabellenanzeige
SE24 Class Builder
SE30 Laufzeitanalyse
SE37 Function Builder
SE38 Editor
SE41 Menu Painter
SE51 Screen Painter
SE61 Dokumentenbearbeitung
SE63 Dokumentenübersetzung
SE80 Entwicklungsumgebung
SE91 Nachrichten
SE93 Transaktionskürzel
SM12 Sperreinträge
SM59 Verbindungen
ST05 Datenbankprotokoll
ST22 Laufzeitfehler
Auch Eclipse mit seinen mächtigen Funktionen kann als Entwicklungsumgebung genutzt werden, was eine ablauffähige
Java Laufzeitumgebung auf dem Rechner erfordert. Damit kann die aktuelle Eclipse-Version samt aller ABAP-Plugins
aus dem Netz geladen werden. Unabhängig von der Entwicklungsumgebung muss aber im GUI der SAP-Class Builder
benutzt werden, sobald die Funktionen einer Klasse von mehreren Anwendern genutzt werden, um lokale Datenobjekte
in globale Entwicklungsobjekte umzuwandeln, die von allen Benutzern eines SAP-Systems verwendet werden können.
Zwecks Kommunikation mit einem Anwender werden im Rahmen der ABAP-Programmierung derzeit vier Möglichkeiten
der Gestaltung einer Benutzeroberfläche (GUI) angeboten:
1. Selektionsbild mit Ausgabeliste
2. Benutzerdialoge mit R/3-Dynpro
3. Benutzerdialoge mit Web-Dynpro
4. Ext. Dialog mit Remote-Aufrufen
ABAP-Spracheigenschaften
ABAP wurde von der SAP AG ursprünglich als Skriptsprache entwickelt, um ausgewählte Daten mit wenig Aufwand in
Listen darzustellen, woher auch der erste Namen Allgemeiner Berichts Aufbereitungs Prozessor stammt. Im Zuge der Internationalisierung erfolgte 1990 die Umbenennung in Advanced Business Application Programming, um dem erheblich erweiterten Funktionsumfang für die kommerzielle Verarbeitung von Massendaten gerecht zu werden. Für
diese Art der Anwendung bietet die ABAP-Programmierung besondere Datentypen und Anweisungen an, die in anderen
Programmiersprachen eher als Bibliotheksfunktionen verfügbar sind.
6
ABAP ist eine proprietäre Sprache und damit nicht offen zugänglich wie zum Beispiel C. Sie gestattet wie C++ eine
prozedurale Programmierung, die im seit 1995 um den OO-Ansatz erweitert wurde. Ihr Vorteil gegenüber elementaren
Programmiersprachen besteht vor allem in den folgenden Punkten:
In die Sprache integrierter Datenbankzugriffe via Open SQL
In die Laufzeitumgebung integrierte Optimierung von Datenbankzugriffen über Puffertechniken
In die Laufzeitumgebung integriertes Transaktionskonzept für gleichzeitige zentrale Datenzugriffe
Interne Tabellen für die dynamische Bearbeitung tabellarischer Massendaten im Arbeitsspeicher
In die Sprache integrierte Schnittstelle zu anderen Programmierumgebungen via RFC oder web-Dienst
In die Sprache integrierte Schnittstelle zu XML oder externen Netzdiensten
Alle SAP-Anwendungen wie Financials oder Logistics und die gesamte Entwicklungsumgebung sind bis auf wenige
Ausnahmen ebenfalls in ABAP programmiert, während die Sprache selbst in ANSI C verfasst wurde, womit eine große
Unabhängigkeit von Plattformen gewährleistet ist. Die ABAP-Programmierung wird durch eine umfangreiche
Entwicklungsumgebung unterstützt, die eine gleichzeitige Bearbeitung großer Projekte durch eine Vielzahl an
Entwicklern ermöglicht. Je nach Kundeninstallation kann Eclipse mit den SAP-Plugins oder die Transaktion SE80 als
ABAP-Entwicklungsumgebung eingesetzt werden. Auch bei der Gestaltung von Oberflächen besteht in Abhängigkeit
von der Kundeninstallation die Möglichkeit, die herkömmliche SAP/GUI-Technik durch SAPUI5 für HTML-Anwendungen
zu ersetzen. Schließlich enthalten die ABAP-Entwicklungsumgebungen umfangreiche Beispiele und Hilfen, die im Netz
unter http://help.sap.com abgerufen werden kann.
ABAP/OO-Anweisungen
CLASS .. DEFINITION Definition einer Klasse in ABAP/OO
CLASS .. IMPLEMENTATION Implementierung einer Klasse in ABAP/OO
ENDCLASS Abschluss einer Klassendefinition
ABSTRACT Definition einer abstrakten Klasse, die nicht instanziiert werden kann
FINAL Definition einer Klasse, die nicht beerbt werden darf
DEFFERED Bekanntgabe einer Klasse vor ihrer Definition
FRIENDS Zugriffsmöglichkeit anderer Klassen auf die privaten Komponenten der Klasse
CREATE OBJECT Erzeugen einer Instanz zur Laufzeit
PUBLIC SECTION Vollständige Sichtbarkeit der Klassenkomponenten für andere Klassen
PROTECTED SECTION Sichtbarkeit der Komponenten nur innerhalb der Klasse und Unterklassen
PRIVATE SECTION Sichtbarkeit der Komponenten nur innerhalb der eigenen Klasse
METHODS Deklaration einer Methode im Definitionsteil einer Klasse
METHOD .. ENDMETHOD Ausprogrammierung einer Methode im Implementationsteil einer Klasse
METHOD .. REDEFINITION Überschreibung einer geerbten Methode der Oberklasse
EVENTS Deklaration eines Ereignisses im Definitionsteil einer Klasse
SET HANDLER Registrierung eines Ereignisses im Ausführungsteil eines Programmes
METHODS .. FOR EVENT Deklarierung einer Methode zur Behandlung eines Ereignisses
CLASS-DATA Deklaration eines statischen Attributes ohne Instanzbezug
CLASS-METHODS Deklaration einer statischen Methode ohne Instanzbezug
CLASS-EVENTS Deklaration eines statischen Ereignisses ohne Instanzbezug
INHERITING FROM Vererbung der Attribute und Methoden einer Oberklasse
SUPER Zugriff in einer redefinierten Methode auf dieselbe Methode der Oberklasse
ME Synonym für die aktuelle Instanz
CALL METHOD Aufruf einer statischen Methode oder einer Instanzmethode
INTERFACE Deklaration eines Interfaces
ENDINTERFACE Abschluss einer Interface-Definition
Einzelheiten zu einer Anweisung können in der ABAP-Entwicklungsumgebung angezeigt werden, wenn das betreffende
Schlüsselwort selektiert und danach die Funktionstaste F1 ausgelöst wird. Die Gesamtheit der ABAP-Hilfe wird aktiv,
wenn in der Oberfläche die Funktion Hilfe zu mittels Einfachklick auf die Ikone Information gewählt wird. Hier werden
nach Ankreuzen des Feldes SAP-Bibliothek alle Dokumente zur ABAP-Entwicklungsumgebung in einer Baumstruktur
angeboten, außerdem folgende Zusammenfassungen:
1. ABAP-Glossar
2. ABAP-Schlagworte
3. ABAP-Übersicht
4. ABAP-Neuheiten
7
ABAP/OO-Vererbung
Neben Datenkapselung und Polymorphie ist die Vererbung eine der wichtigsten Eigenschaften der objektorientierten Programmierung. Sie gestattet, die Eigenschaften bereits vorhandener Klassen zu übernehmen, wenn eine neue Klasse erzeugt wird. Vererbung heißt, dass zum Beispiel eine Klasse B die Eigenschaften der Klasse A übernimmt, also aller Attribute und Methoden.
Vererbung dient der Deklaration von Klassen unter Nutzung bereits vorhandener Klassen. Durch diese Übernahme wird die Wiederverwendung von Software unterstützt, was stark zu deren Zuverlässigkeit beiträgt. Die Wiederverwendung, die zu umfangreichen Klassenhierarchien führen kann, setzt allerdings eine große Allgemeingültigkeit der beerbten Klassen voraus, wie das nachfolgende Beispiel zum Thema Polymorphie zeigt:
REPORT z_jj_hund NO STANDARD PAGE HEADING.
* Deklarationen
CLASS cl_dackel DEFINITION.
PUBLIC SECTION.
METHODS bellen.
ENDCLASS.
CLASS cl_dackel IMPLEMENTATION.
METHOD bellen.
WRITE / 'wau'.
ENDMETHOD.
ENDCLASS.
CLASS cl_pudel DEFINITION INHERITING FROM cl_dackel.
PUBLIC SECTION.
METHODS bellen REDEFINITION.
ENDCLASS.
CLASS cl_pudel IMPLEMENTATION.
METHOD bellen.
WRITE / 'wuff'.
super->bellen( ). "Oberklasse
ENDMETHOD.
ENDCLASS.
DATA dackel TYPE REF TO cl_dackel.
DATA pudel TYPE REF TO cl_pudel.
* Ausführung
START-OF-SELECTION.
CREATE OBJECT dackel.
CREATE OBJECT pudel.
dackel->bellen( ). "Ausgabe wau
dackel = pudel.
dackel->bellen( ). "Ausgabe wuff
Falls noch nicht geschehen, ist nach der Einführung von ABAP/OO eine Umstellung aller Kundendaten auf Unicode
sinnvoll, weil die Erweiterung des Zeichensatzes einen internationalen Datenaustausch ohne Datenverluste ermöglicht. Dazu genügt die Installation eines zentralen Systems, das die Geschäftsprozesse der gesamten Welt abbildet.
Zudem können alle Spracherweiterungen verwendet werden, die im Rahmen von Unicode eingeführt wurden, womit
die Lesbarkeit und Eindeutigkeit eines Quelltextes erhöht wird. Die Lesbarkeit und Eindeutigkeit von Programmen wird
aber vor allem durch die umfangreiche Unicode-Prüfung stark verbessert, weil damit Anweisungen aufgedeckt
werden, die bisher zwar syntaktisch korrekt, aber semantisch falsch waren. Dies betrifft besonders Daten, deren Typ nicht eindeutig erkennbar ist, zum Beispiel nach der Zuweisung einer mehrstufigen Datenstruktur in ein zeichenartiges
Feld. Insofern ist die Einführung der Unicode-Prüfung auch für Anwender lohnend, die ihre Software-Qualität steigern
wollen, ohne selbst Unicode in ihren Anwendungsdaten zu verwenden.
8
Unicode
1. Codes 2. Systeme 3. Prüfprogramm 4. Anweisungen 5. Umstellbeispiele 6. Dokumentation 7. Anmeldungen
1. Codes
Buchstaben, Ziffern und Sonderzeichen werden in Rechnern durch Zahlen im Binärformat {0,1} dargestellt, für deren Verschlüsselung bisher folgende Codes verwendet wurden:
a. ASCII (American Standard Code for Information Interchange) verschlüsselt ursprünglich jedes Zeichen durch 7 Bit.
Damit lassen sich höchstens 27 = 128 Zeichen darstellen, denen die Kombinationen [0000000, 1111111] zugeordnet werden.
b. EBCDI (Extended Binary Coded Decimal Interchange) verschlüsselt jedes Zeichen durch 1 Byte = 8 Bit, womit genau
28 = 256 Zeichen in Form der Kombinationen [00000000, 11111111] abgebildet werden können.
c. Doublebyte-Zeichensätze, die vereinzelt für asiatische Schriften benutzt werden, benötigen 1-2 Bytes je Zeichen. Damit können 216 = 65536 Kombinationen gebildet werden, wobei in der Regel nur 10000 - 15000 Zeichen belegt sind.
Aufbauend auf diesen Standards bieten Hersteller von Betriebssystemen wie zum Beispiel Microsoft oder Apple eigene Zeichensatztabellen in Form von Codepages an, die je nach Anforderung oder Sprache besondere
Zuordnungen enthalten. So verschlüsselt zum Beispiel die Codepage 850, die für das Betriebssystem MS-DOS
entwickelt wurde, den Buchstaben M als 4D16 = (0100 1101)2
Mit diesen Zeichensätzen kann jede Sprache einzeln abgedeckt werden. Schwierigkeiten treten jedoch auf, wenn Texte in einem zentralen System aus verschiedenen Zeichensätzen gemischt oder Daten zwischen Systemen mit abweichenden Zeichensätzen ausgetauscht werden, was zu völlig unbestimmten Zuständen führen kann. Aus diesem Grund wurde mit Unicode eine weltweite Verschlüsselung gemäß ISO/IEC 10646 eingeführt, die alle
Zeichen dieser Welt umfasst und in der Regel aus 2 Bytes besteht. Mit dieser Darstellung werden folgende Vorteile erzielt:
Mit Unicode können alle SAP-Anwender ein zentrales System installieren, das die Geschäftsprozesse der gesamten
Erde abdeckt.
Auch Firmen mit verteilten Systemen wünschen in der Regel, dass weltweite Konzerndaten verdichtet aufbereitet
werden, was ohne Unicode nur bedingt möglich ist.
Unter Unicode können gleichzeitig die Zeichen mehrere Sprachen auf einem einzigen lokalen Rechner dargestellt
werden.
Unicode ist Grundvoraussetzung für einen internationalen Datenaustausch ohne Datenverluste. Zur Darstellung
von Dokumenten im Internet wird verstärkt XML als mögliches Format verwendet.
Alle Betriebssysteme, die Unicode unterstützen, erfordern zwecks Adressierung der zu verarbeitenden Daten eine Ausrichtung auf festgelegte Anfangsadressen, die bei zeichenartigen Datenobjekten je nach Unicode immer auf einer durch 2 oder 4 teilbaren Zahl beginnen müssen. Dazu kommen numerische Datenobjekte wie Integer oder Float, die je nach Betriebssystem eine durch 4 oder 8 teilbare Speicheradresse erfordern. Diese Voraussetzungen führen dazu, dass Strukturen mit unterschiedlichen Datentypen meistens Speicherlücken (Alignment A) aufweisen.
Während bisher das Zielfeld unter Berücksichtigung des Endians (MSB/LSB) Byte für Byte von links nach rechts mit
den Inhalten des Quellfeldes gefüllt wurde, verhindern unter Unicode Speicherlücken und Zeichenbereiche ein derartiges Vorgehen. Vielmehr können nur noch typgleiche Strukturbereiche, so genannte Fragmente F, ohne Datenverluste zugewiesen werden. Andernfalls würde riskiert, Nutzdaten mit Speicherlücken oder Speicherlücken
mit Nutzdaten zu überschreiben. In der Programmiersprache ABAP können folgende Datentypen zu Fragmenten
zusammengeschlossen und gleichartig behandelt werden:
Binär x, xstring
Zeichenartig c, n, d, t, string
Numerisch i, p, f
9
struc s {
hex a[1];
char b[2]; Java
char c[6];
int d;
};
ASCII
Unicode
| F1 | F2 | F3 | F4 | F5 |
BEGIN OF s,
a TYPE x LENGTH 1,
b TYPE c LENGTH 2, ABAP
c TYPE c LENGTH 6,
d TYPE i,
END OF s.
Systeme
Ein Unicode-Programm ist ein Quelltext, der alle Anforderungen einer Unicode -Prüfung erfüllt und ausführt. Im Fall
von Programmiersprachen wie ABAP oder Java ist dazu ein C-Kernel erforderlich, der den Unicode -Zeichensatz
interpretieren kann. Ein solches Programm liefert in einem Nicht-Unicode-System dieselben Ergebnisse wie in einem
Unicode -System. Damit die Unicode-Prüfung in einer ABAP-Umgebung aber überhaupt wirksam wird, muss zunächst
das Unicode-Kennzeichen in den Eigenschaften folgender Entwicklungsobjekte gesetzt werden:
Programme
Klassen
Funktionsgruppen
Internet Services
c b d
c d A b
a
a A
10
Die Unicode-Prüfung wird auch in einem Nicht-Unicode-System ausgeführt, sobald dieses Kennzeichen gesetzt ist.
Hier ist zudem möglich, alle Spracherweiterungen zu verwenden, die im Rahmen von Unicode eingeführt wurden,
womit die Lesbarkeit und Eindeutigkeit eines Quelltextes erhöht wird. Das Laufzeitverhalten und die Ergebnisse eines
Programms mit Unicode-Kennzeichen können aber nur in einem System mit Unicode-Kernel vollständig überprüft
werden, obwohl ein solches Programm auch in einem Nicht-Unicode-System ablauffähig ist. Umgekehrt kann ein
Programm ohne Unicode -Kennzeichen jedoch nur in einem Nicht-Unicode-System ausgeführt werden.
Prüfprogramm
Eine Liste alle Entwicklungsobjekte, die in einem Unicode-System einen Fehler auslösen würden, kann durch Aufruf
der Transaktion UCCHECK ausgegeben werden. Hier sind verschiedene Auswahlkriterien möglich, zum Beispiel die
Suche über Namen oder Pakete.
Ein Programm wird bereits als fehlerhaft angezeigt, wenn das Unicode-Kennzeichen in dessen Eigenschaften fehlt,
obwohl der Quelltext sonst korrekt ist. Es ist zu beachten, dass allein die statische Syntaxprüfung im Standard dieser Transaktion aktiv ist, während die dynamische Prüfung explizit eingeschaltet werden muss. Doch auch nach einer dynamische Prüfung wird empfohlen, das umgestellte Programm nochmals auf kritische Anweisungen zu prüfen, weil
bestimmte Aufrufe wie zum Beispiel CALL oder CREATE gerade in Verbindung mit Feldsymbolen und Datenreferenzen
von dieser Prüfung nicht vollständig erkannt und erst zur Laufzeit in ihrer ganzen Auswirkung offensichtlich werden.
Diese Vorgaben zwingen SAP-Kunden dazu, ihre Eigenentwicklungen zuerst in den Testsystemen anzupassen und
von eventuellen Syntaxfehlern zu befreien, die nach dem Setzen des Unicode-Kennzeichens auftreten. Sobald alle
Eigenentwicklungen angepasst und die Umstellungen mit Erfolg getestet wurden, können diese in das Produktivsystem transportiert werden.
11
Zudem sollte stets eine Kopie des Produktivsystems mit einem Unicode-Kernel vorhanden sein, das im Zweifelsfall
zur Überprüfung des Laufzeitverhaltens genutzt werden kann. Da dieses System aber nicht zur Transportlandschaft gehört, muss hierfür entweder ein Quertransport beantragt oder die Änderung mittels Entwicklungsschlüssel im System
selbst durchgeführt werden. Von SAP wird angegeben, dass nach der Umstellung auf Unicode ein erhöhter
Speicherbedarf für Prozessor und Datenbank entsteht, der im Vergleich zu einem Nicht-Unicode-System etwa 70 Prozent ausmacht.
Es ist selbstverständlich, dass auch alle vom C-Kernel verwendeten Komponenten wie Betriebssystem oder Datenbank
sämtliche Unicode-Anforderungen unterstützen müssen. Außerdem sei bereits an dieser Stelle darauf hingewiesen,
dass der Datenaustausch zwischen einem Unicode-Programm und einer externen Schnittstelle nur dann funktioniert,
wenn auch das Partnerprogramm den Unicode-Zeichensatz versteht und Daten in diesem Format liefert.
Trifft diese Voraussetzung nicht zu, müssen die Daten der externen Schnittstelle im ABAP-Partnerprogramm in den
Unicode-Zeichensatz konvertiert werden, zum Beispiel mittels Verwendung derjenigen Methoden, die in den Klassen
CL_ABAP_CONV* für unterschiedliche Anforderungen angeboten werden. Umgekehrt müssen Daten, die an die externe
Schnittstelle gesendet werden, vor dem Senden umgewandelt werden, zum Beispiel in das UTF8-Format. Eine derartige
Umwandlung kann allerdings mit Datenverlusten verbunden sein, weil ein gewandeltes Zeichen möglicherweise keine
Entsprechung hat. Prinzipiell gilt aber, dass ein Unicode-Programm immer mit einem Nicht-Unicode-Programm Daten
austauschen kann, während der umgekehrte Fall nicht möglich ist.
Anweisungen
Nachfolgend sind alle ABAP-Anweisungen in alphabetischer Reihenfolge verzeichnet, deren Verwendung unter
Unicode zusätzlichen Einschränkungen unterliegt. Außerdem enthält diese Liste neue Sprachelemente und Zusätze,
die nur in Unicode-Programmen sinnvoll sind.
ADD .. ACCORDING/GIVING/RANGE
APPEND itab
ASSIGN+x(y)
ASSIGN .. RANGE/INCREMENT
CA/CN/CO/CS/NA/NS
CLEAR .. WITH
CONCATENATE
CONDENSE
CONVERT TEXT
CREATE DATA
DELETE .. FROM/TABLE
DESCRIBE .. IN BYTE/CHARACTER MODE
DO .. VARYING .. RANGE
EXPORT/IMPORT .. CODEPAGE HINT
FETCH dbtab .. INTO/INTO TABLE/APPENDING
FORM .. STRUCTURE
GET/SET PARAMETER
IF struc
INCLUDE TYPE/STRUCTURE .. RENAMING
INSERT .. FROM/TABLE
INSERT itab
INSERT REPORT .. UNICODE ENABLING
LOOP AT itab
MODIFY .. FROM/TABLE
MODIFY itab .. WHERE
MOVE+x(y)
MOVE-CORRESPONDING
OPEN DATASET .. IN .. MODE ENCODING/REPLACEMENT
OVERLAY
PERFORM+x(y)
READ TABLE itab
REFRESH itab FROM TABLE dbtab
REPLACE
12
SEARCH
SELECT dbtab .. INTO/INTO TABLE/APPENDING
SET/GET BIT ..
SHIFT
SPLIT
STRLEN/CHARLEN/NUMOFCHAR()
TRANSLATE .. TO/USING/CODEPAGE
WRITE .. TO
WHILE .. VARY .. RANGE
Die Neugestaltung der ABAP-Sprachelemente wurde unter Unicode durch zusätzlich Klassen abgerundet, deren
Attribute und Methoden entweder einzelne Anweisungen ganz ersetzen oder Hilfen liefern, um bestimmte Befehle überhaupt ausführen zu können, zum Beispiel:
CL_ABAP_CHAR_UTILITIES
CL_ABAP_CONV*
CL_ABAP_MATH
CL_GUI_FRONTEND_SERCICES
Dokumentation
Eine ausführliche Beschreibung zum Thema Unicode ist in der ABAP-Dokumentation verfügbar, wenn nach Aufruf
der ABAP-Entwicklungsumgebung zum Beispiel mittels Transaktionen SE80 die Funktion Hilfe zu aufgerufen und dort
der Suchbegriff Unicode als Volltextsuche gestartet wird. Danach erscheint ein Fenster, das alle Kapitel und
Anweisungen zeigt, die im Rahmen von Unicode verändert oder eingeführt wurden. Außerdem sind im weltweiten
Netz weitere Beispiele und Informationen zum Thema ABAP-Unicode verfügbar.
Recommended