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: 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:

  1. 1GL sind direkte binäre oder textuelle Maschinensprachen, die eine eins zu eins Übersetzung der prozessorverständlichen Sprache darstellen.
  2. 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.
  3. 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.
  4. 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.
  5. 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
(Beispiel) Es handelt sich um ein Beispiel, das einen allgemeingültigen Sachverhalt erklärt.
(Definition) Eine wichtige, allgemeingültige Definition eines Fachbegriffs folgt.
(Ergänzung) Zum besseren Verständnis werden eigene Zusätze und Ergänzungen im Kontext genannt und nicht separat aufgeführt.
(Widerspruch) Ein in der Fachsprache gebräuchlicher Begriff steht im Widerspruch zur Theorie oder ist zweideutig.
(Zitat) 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:

(Definition) 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.

(Beispiel)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.

(Beispiel)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(Ergänzung)
IDL-Standard Namen gebräuchliche Synonyme
Klasse Objekt (Widerspruch)
Objekt Instanz, Exemplar
Feld Attribut (Widerspruch) 
Attribut Datenfeld, Datum(Widerspruch)
Operation (Member-)Funktion, Methode(Widerspruch), Aktion, Routine oder Prozedur (Widerspruch)
Parameter Argument