Vorwort
Maschinelle Computer können mit formal beschreibbaren Automatismen
Probleme selbständig lösen, wenn sie entsprechend eingestellt
(also programmiert) werden. Ein Computer kann so eigenständig
komplexe Berechnungen durchführen, Maschinen steuern und nicht zuletzt
Informationen austauschen, verwalten und auswerten. Um mit der Computertechnologie
großen Nutzen zu erzielen, braucht man:
-
eine möglichst leistungsfähige Maschine (Hardware),
die in der Lage ist, bestimmte Befehle auszuführen, die in Form eines
Programms ablaufen. Die Hardware eines Computers besteht aus allen physischen
Komponenten: ein Prozessor, der die Befehle eines Programms verarbeitet;
ein Speichermodul, das sich Werte merkt; ein Drucker, der Buchstaben und
Linien auf Papier darstellen kann; der Bildschirm, auf dem normalerweise
der Zustand und die Ausgaben der ausgeführten Programme dargestellt
werden; die Tastatur, mit der man dem Computer Anweisungen eingeben kann.
-
Programme, um ein gestelltes Problem zu lösen. Diese Programme, auch
als Software bezeichnet, sind eine komplexe Sequenz einzeln auszuführender
Befehle. Zum Beispiel könnte auf einem Computer ein Programm benutzt
werden, dessen Befehle, sobald sie ausgeführt wurden, den Anwender
mit einem netten Spruch auf dem Bildschirm begrüßen und auf
einen Tastendruck warten.
Zentrales Kriterium für nutzbringende Computer ist, ob seine Programme
sinnvoll einsetzbar sind.
Um die Programmierung sinnvoller Programme
möglichst effizient zu gestalten, gibt es mehrere, methodisch stark
unterschiedliche Ansätze: Hochsprachen, prozedurale Programmierung
oder objektorientierte (oo) Programmierung. Im Grunde kann man die
herkömmlichen Programmiersprachen in mehrere Stufen einteilen (sogenannte
XGL, X Generation Language)11:
-
1GL sind direkte binäre oder textuelle Maschinensprachen, die eine
eins zu eins Übersetzung der prozessorverständlichen Sprache
darstellen.
-
2GL sind ähnliche Assemblersprachen, in denen zusätzlich das
Konzept der Symbolik umgesetzt ist, damit Daten und Code durch logische
Namen unabhängig von ihrer jeweiligen physischen Adresse identifizierbar
sind.
-
3GL sind Hochsprachen, die eine Abstraktion der Hardwareebene von Assemblersprachen
bieten, um sowohl Code als auch Daten in einer menschenlesbaren, deskriptiven
Form durch Compilierprogamme dem Computer verständlich zu machen.
Ab der dritten Generation ist es mit Programmiersprachen möglich,
Programme plattformunabhängig und betriebssytemübergreifend einzusetzen.
-
4GL bezeichnet Anwendungen deren Verhalten interaktiv visuell erweitert
werden kann. So würde z.B. der Programmierpart von Access oder Power
Builder als eine 4GL bezeichnet werden.
-
5GL sind eigenständig intelligente Systeme, die - bei geeigneter Programmierung
- zu einer künstlichen, auf deduktiver Logik basierenden, intelligenten
Eigenleistung fähig sind14
ohne einen genau beschriebenen Lösungsalgorithmus zu benötigen.
Ein Beispiel hierfür wäre Prolog.
Die objektorientierte Programmierung ist eine weitere Abstraktionsstufe
der traditionellen, prozeduralen Programmierung bei Programmiersprachen
dritter Generation. Objektorientierte Programmiersprachen erweitern die
rein prozeduralen 3GL um die Möglichkeit, Code und Daten als Einheit
zu sehen und zu benennen. Dadurch ergibt sich ein zentrales Element der
objektorientierten Programmierung (OOP), das Objekt.
In dieser Arbeit soll nun das Konzept des strukturierten Aufbaus objektorientierter
Programme vorgestellt, diskutiert und daraufhin untersucht werden, ob Strategien
und Methoden für die konkrete Realisierung existieren. Dabei wird
dieser Ansatz hauptsächlich auf seine Anwendbarkeit und Nützlichkeit
in Problemlöseprozessen hin untersucht. Es wird überprüft,
inwieweit die Möglichkeiten der theoretischen Informatik in das OO-Konzept
umgesetzt wurden, um die Herstellung adäquater Software zu erleichtern
und zu reglementieren. Im folgenden soll in einem zweistufigen Prozeß
erst ein Theoriegebäude erstellt werden, welches die Grundlagen und
Methoden (Vorgehensweisen) der objektorientierten Programmierung vollständig
erläutert. Und dann wird ein komplexeres Beispielprojekt zur Verifikation,
rein auf dieser Theorie basierend, realisiert. Sollten sich während
der Umsetzung dieses Beispiels Unstimmigkeiten der Theorie ergeben, so
wird diese entsprechend angepaßt und signifikante Unterschiede zwischen
der Theorie der Informatik und der Praxis der Softwareentwicklung entsprechend
gekennzeichnet.
Rationalisierung der Softwareentwicklung
Programme auf eine effiziente und rationelle Methode zu schreiben wird
in Zukunft eine immer größere Bedeutung in der Wirtschaft gewinnen.
Firmen, die Software auf eine resourcensparende und schnelle Weise produzieren,
verschaffen sich gegenüber anderen Firmen einen deutlichen Wettbewerbsvorteil,
der in der aktuellen Wirtschaftssituation mit den vielen emporsprießenden
Programmpaketalternativen (wie Navigator und Internet Explorer) der ausschlaggebende
Faktor sein kann. Ein Softwarehaus, welches die Produktion systematisieren,
sogar weitgehend automatisieren kann, und zudem noch schon entwickelte
Programmteile anderer Software weiterverwenden kann (genannt Reusability),
wird zu einem günstigeren Preis produzieren können. Brauchbare
Software mit niedrigen Preisen hat, wenn sie konsequent und schnell weiterentwickelt
und ausgebaut (Extendability) wird meist eine größere
Marktchance. Und der weitverbreitete, wirtschaftspolitische Faktor, auf
welchen Betriebssystemen Programme laufen, kann durch eine entsprechend
gute Modularität der Software ausgeglichen werden (Genericity),
so daß nur minimale Änderungen nötig sind, um ein Programm
auf andere Betriebssysteme umzuschreiben.
Um Software wirtschaftlich zu entwickeln, kann die in dieser Arbeit
vorgestellte objektorientierte Programmierung dienen. Besondere Vorzüge
hat die OOP, wenn dafür Entwicklungsmethoden existieren, die die Programmierung
beschleunigen oder die Planung erleichtern. Diese Arbeit widmet sich im
folgenden den vorhandenen Möglichkeiten der theoretischen Informatik,
die Softwareentwicklung mit neuen Möglichkeiten zu rationalisieren.
Markierungen in dieser Arbeit:
In dieser Arbeit werden durchgängig kleine Symbole verwendet um bestimmte
Sachverhalte visuell deutlich zu machen. Diese Symbole markieren jeweils
einen bestimmten Abschnitt, weisen auf etwas wichtiges hin, oder warnen
vor unklaren aber gängigen Fachbegriffen. Auch besondere eigene Zusätze,
die der Verständlichkeit halber übergangslos einer übernommenen
Theorie beigefügt sind, sind speziell als solche gekennzeichnet.
visuelle Markierungen im Text
Symbol |
implizierte Bedeutung für den markierten Kontext |
 |
Es handelt sich um ein Beispiel, das einen allgemeingültigen
Sachverhalt erklärt. |
 |
Eine wichtige, allgemeingültige Definition eines Fachbegriffs
folgt. |
 |
Zum besseren Verständnis werden eigene Zusätze und Ergänzungen
im Kontext genannt und nicht separat aufgeführt. |
 |
Ein in der Fachsprache gebräuchlicher Begriff steht im Widerspruch
zur Theorie oder ist zweideutig. |
 |
Markiert ein Zitat. |
Elemente der objektorientierten Programmierung (OOP)
Die Terminologie der OOP variiert beträchtlich. Jede Programmiersprache,
d.h. jedes Konzept computerverständlicher Befehlskonstrukte, bezeichnet
die Schlüsselelemente der OOP anders. Und eine direkte Übersetzung
oder Einigung ist deshalb schwierig, weil häufig die gleichen Begriffe
in unterschiedlichen Programmiersprachen für ganz andere Sachverhalte
stehen, oder manchmal gar nicht alle Elemente umgesetzt sind. Eine allgemeine
und sprachunabhängige Begrifflichkeit ist der Interface Description
Language IDL zu entnehmen. Diese Notation versucht durch Standardisierung
eine Kommunikation und einen Funktionsaustausch zwischen den diversen Programmiersprachen
und zwischen mehreren verteilten Rechnern einheitlich zu gewährleisten.
Die IDL ist eine sogenannte Meta-Programmiersprache, d.h. mit ihr wird
nicht die eigentliche Funktionalität eines Programms beschrieben,
sondern nur die Schnittstellen zur Zusammenarbeit mehrerer Programmteile.
Die Terminologie dieser Sprache1 scheint
als Grundlage für eine allgemeine Definition der OO-Elemente geeignet:
Eine Klasse ist eine inhaltslose
Form, die eine Vorlage für die Art des Inhalts zu erstellender Objekte
definiert. Eine Klasse ist dadurch charakterisiert, daß sie sowohl
(Daten-)Struktur als auch ein bestimmtes Verhalten (Funktionen) vereint.
Man sagt eine Klasse kapselt Daten und Funktion. Deshalb nennt man
sie auch einen Abstrakten Datentyp. Ein Objekt
ist der Inhalt zu einer bestimmten Form, es wird während der Ausführung
eines Programms anhand der Klassenschablone erstellt. Auch ein Objekt kapselt
Daten und Funktion, aber nur die Klasse beschreibt die gemeinsamen Eigenschaften
mehrerer Objekte gleicher Art.
Den enthaltenen Datenelementen eines Objekts können Werte zugewiesen
werden, und mit diesen Werten können die zugehörigen Operationen
durchgeführt werden. Eine Klassendefinition beschreibt, welche Art
Elemente alle Objekte ihres Typs enthalten. Jede Klasse enthält ein
oder mehrere Felder von
einer der beiden Arten:
-
Attribute:
-
Attribute haben einen bestimmten Wertetyp und einen Namen.
In einem Attribut eines Objekts einer Klassenvorlage kann zu jedem Zeitpunkt
genau ein spezieller Wert gespeichert werden.
Zum Beispiel
kann eine Klasse als Feld das Attribut mit dem Namen "Nummer" und dem Datentyp
"natürliche Zahl" der Größe 1 byte "octet" enthalten. Existiert
ein Objekt dieser Klasse, dann kann diesem Attribut "Nummer" eines Objekts
beispielsweise "5" zugewiesen werden.
-
Operationen:
-
Operationen beschreiben die Handlungen, die mit einem Objekt der Klasse
durchgeführt werden können. Auch Operationen haben einen Namen
und sie können bei ihrem Abschluß Ergebniswerte zurückliefern,
die, wie Attribute, einen Wertetyp haben. Zusätzlich können
Operationen bei ihrem Aufruf Parameter übernehmen um ihren
Algorithmus bei jeder Verwendung zu konfigurieren. Parameter haben wiederum
einen Namen und einen Wertetyp.
Zum Beispiel
kann eine Klasse die Operation "berechneGröße" mit einem Parameter
Alter enthalten, die, wird sie ausgeführt, die durchschnittliche Größe
eines Objekts der Klasse mit dem angegebenen Alter berechnet.
gebräuchliche Synonyme der Standardbegriffe
Synonyme zum IDL-Standard
IDL-Standard Namen |
gebräuchliche Synonyme |
Klasse |
Objekt  |
Objekt |
Instanz, Exemplar |
Feld |
Attribut |
Attribut |
Datenfeld, Datum |
Operation |
(Member-)Funktion, Methode ,
Aktion, Routine oder Prozedur  |
Parameter |
Argument |