Objektorientierte Programmierung

Smalltalk: Große Vorsätze wurden nicht verwirklicht

30.03.1990

Objektorientierung ist in, doch nur wenige DV-Freaks kennen sich mit den Prinzipien objektorientierter Programmierung wirklich aus. Günther Thoma* klärt in seinem Beitrag die zentralen Begriffe und gibt einen Überblick über die historische Entwicklung.

Das objektorientierte Entwikkeln wird in der Literatur als neue Denkweise und Methode für das Programmieren von Computern dargestellt. Es hat seine Ursprünge in der Simulationstheorie und wurde erstmals in der 60er Jahren durch die Programmiersprache "Simula" verwirklicht.

In den 70er Jahren wurde bei Xerox ein Projekt ins Leben gerufen, in dem eine Programmierumgebung für die erwarteten Rechner der 80er Jahre entwikkelt werden sollte. Man war überzeugt davon, daß eine neue Rechnergeneration für Anwender aller Altersstufen interessant werden könnte. Computer der Größe eines Notizbuches sollten seinem Besitzer alle Wünsche "im Universum des Wissens" erfüllen können.

Das Kommunikationsmedium wurde "Smalltalk" genannt. Herbert Stoyan hat in seinem Werk "Programmiermethoden der Künstlichen Intelligenz" die wichtigsten Kriterien genannt. Smalltalk sollte folgende Eigenschaften haben:

- einfacher und aussagekräftiger als Logo

- besser als die beste derzeit verfügbare Programmiersprache

- so neutral wie möglich bezüglich aller vorstellbaren Simulationen

Die Erprobung der Sprache sollte mit Anwendern aller Altersstufen (4 bis 60 Jahre) durchgeführt werden. Hierfür dachte man an die Entwicklung von Musik- und Computer-Animationsprogrammen sowie an die Simulation physikalischer Systeme und an andere Anwendungen.

Die Gestaltung der Programmiersprache sollte sehr bildhaft sein (grafische Symbole) undneuesten lernpsychologischen Erkenntnissen genügen. Die hochgesteckten Ziele von damals werden aber von den heutigen Smalltalk-Systemen kaum erfüllt, denn Hardware-Restriktionen und Effizienzanforderungen professioneller Software-Systeme erlaubten nur zum Teil die Realisierung des ursprünglich vorgesehenen Konzeptes.

Smalltalk ist heute der bekannteste Vertreter der objektorientierten Programmiersprachen und verwirklicht dieses Konzept am durchgängigsten.

Was kann man sich nun unter einer objektorientierten Sprache vorstellen? Die historischenSchilderungen zeigen, daß es sich um ein völlig neues Verarbeitungsmodell handeln muß. Herbert Stoyan bietet folgende Definition an:

"Objektorientierte Programmierung beruht auf der Vorstellung, es mit einer Gemeinschaft (einem System) kommunizierender Objekte zu tun zu haben. Dies ist ein deutlicher Unterschied zur von Neumann'schen Maschine, in der ein Arbeitsspeicher gegeben ist, der Programme und Datenelemente aufnimmt. "

Das Ziel beim objektorientierten Programmieren ist eine möglichst natürliche Nachbildung der Realität durch Objekte, die miteinander kommunizieren. Wesentlich ist dabei, daß Objekte während der Programmausführung neu erzeugt oder entfernt werden können-auf diese Weise kann auch ein dynamisches System simuliert werden.

Grundsätzlich kann nicht jedes Objekt mit jedem kommunizieren. Außerdem können Objekte, beziehungsweise ganze Objektgemeinschaften in anderen Objekten enthalten sein (siehe Abbildung). Herbert Stoyan nennt für die "Architektur von Objekten" folgende Prinzipien:

1. Ein System (Maschine) wird durch eine Menge von Objekten, die mit Hilfe von Nachrichten kommunizieren, konstituiert.

2. Objekte können neu gebildet werden.

3. Objekte können ausscheiden, beziehungsweise unreferenzierbar werden.

4. Ein Objekt kann Nachrichten nur an Objekte senden, die es kennt - andernfalls muß es um Vermittlung ersuchen.

5. Außer den Nachrichten, die als Objekte aufgefaßt werden, können keine Objekte versendet werden. Der Platz und die Größe der Objekte spielt keine Rolle.

6. Nachrichten, die zwischen zwei Objekten A und B ausgetauscht werden, sind völlig unabhängig vom Nachrichtenaustausch zwischen zwei Objekten C und D.

7. Vorgänge innerhalb der Objekte sind voneinander unabhängig. Eine Synchronisation ist nicht erforderlich.

Das Objekt, hier ein zentraler Begriff, ist als ein Paket von Informationen und Vorschriften zu deren Manipulation zu verstehen. Daten treten also niemals isoliert auf, sondern stets zusammen mit den Prozessen, welche die Daten manipulieren können. Ein verwandtes Konzept hierzu ist das des abstrakten Datenmoduls, das aus der Diskussion über Software-Engineering hervorgegangen ist.

Objektorientiertes Programmieren bedeutet zunächst einmal eine Klassifizierung der bei einer Problemstellung auftretenden Objekte. Gleichartige Objekte sind durch eine gemeinsame Beschreibung, der Klassenbeschreibung (Klasse), gekennzeichnet.

Dabei werden nicht nur die Datenstrukturen beschrieben, sondern auch die Operationen, die auf Objekte dieser Klasse anzuwenden sind. Eine Klasse kann somit auch als Definition der Schnittstellen ihrer Objekte verstanden werden. Wird die Beschreibung einer Klasse in einer anderen Klasse verwendet, spricht man von einer Unterklasse.

Objekte haben einen inneren Zustand, der durch das Empfangen von Nachrichten verändert werden kann. Der neue Zustand kann seinerseits wieder das Senden einer Nachricht an ein Objekt auslösen. Das, was sich innerhalb eines Objektes abspielen kann, läßt sich nach Stoyan unter den Prinzipien der "lokalen Sicht" auflisten:

1. Ein Objekt kann aktiv oder passiv sein.

2. Ein aktives Objekt kann senden, empfangen und verarbeiten.

3. Das Verarbeiten einer Nachricht kann erst erfolgen, nachdem empfangen worden ist. Die Vorschrift zur Nachrichtenverarbeitung wird "Methode" genannt.

4. Eine Methode ist eine Folge von Anweisungen zum Senden von Nachrichten. Diese Folge kann ähnlich strukturiert sein, wie Programme für eine Von-Neumann-Maschine.

5. Eine besondere Art von Anweisungen ist die Benennung von Objekten mit einem Namen. Diese Anweisung muß zwar nicht, kann aber als spezielle Form des Nachrichtensendens aufgefaßt werden.

6. Wenn ein Objekt eine Antwort auf eine Nachricht erwartet, tritt es in einen Wartezustand über, der möglicherweise sämtliche Aktivitäten des Objektes betrifft.

Ob objektorientierte Sprachen den prozeduralen oder nicht-prozeduralen Sprachen zugeordnet werden sollen, kann nicht eindeutig entschieden werden. Oft wird das objektorientierte Programmieren mit einer Entwurfsmethode gleichgesetzt und nicht als ein eigenständiger Programmierstil verstanden.

Neben Smalltalk gibt es auch andere objektorientierte Umgebungen, die auf einer bereits existierenden Programmiersprache wie LISP oder C aufbauen. So ist in jüngerer Zeit eine objektorientierte Erweiterung der prozeduralen Programmiersprache C unter dem Namen C++ bekannt geworden, und es zeichnet sich eine rasche Verbreitung auch im industriellen Umfeld ab.