fit 2002 > Programmiersprachentypen > Entstehungskontext > objektorientierte Sprachen

Überblick


Imperativen Programmiersprachen haftete immer der Makel an, dass globale Variablen in jedem Teil des Programms inspiziert und überschrieben werden konnten. Große Programme wurden auf diese Weise sehr leicht unübersichtlich, wenn keine Disziplin im Zugriff auf diese Variablen herrschte. Dieses Problem wurde 1970 von David Parnas aufgegriffen und er empfahl die Verwendung von sogenannten Schnittstellen als Ausweg. Die Idee war, jede Variable in ein Modul einzukapseln und es sollte ausschließlich über spezielle Operationen, wie Prozeduren oder Funktionen darauf zugegriffen werden können. Anderen Modulen sollte zwar der Zugriff auf die Variablen ermöglicht werden, dies sollte aber nur über den Aufruf der Operationen möglich sein, welche die Schnittstelle des Moduls zu anderen Modulen bilden.

Dieses Prinzip des eingeschränkten Zugriffs auf Daten nannte man Kapselung. Das Prinzip der Datenkapselung lässt sich im Prinzip mit allen imperativen Programmiersprachen. Die Gültigkeitsregeln verhindern jedoch nicht, dass ein Programmierer bei der Programmerstellung ein Objekt auf ein Modul falsch zugreifen lässt. Es war also eine gewisse Selbstdisziplin der Programmierer von Nöten um solche falschen Zugriffe zu vermeiden. Die Entwicklung von speziellen Programmiersprachen, welche die objektorientierten Prinzipien von vornherein als Entwicklungskonzept verwirklichten war naheliegend.

Die erste Sprache, die objektorientierte Prinzipien verwendete war Simula. Obwohl die Sprache einen eher geringen Verbreitungsgrad besaß hatte sie zweifellos einen gewissen Einfluss auf ihre Nachfolger. Eine erste Version von Simula wurde 1962 in Oslo von Ole-Johan Dahl und Kristen Nygaard entwickelt. Die Idee war, eine Sprache zu entwickeln, welche sowohl zur Systembeschreibung (für den Anwender) als auch als Systemvorschrift (als Computerprogramm durch den Compiler) dienen konnte. 1966 führten sie in ihre Sprache Objekte mit Record-Eigenschaften ein. Schließlich wurde Simula 67 entwickelt, welches schon die meisten objektorientierten Konzepte beinhaltete, wie Objekte und Klassen mit Verständigung über Messages oder die Vererbung.

Allerdings sprach zu dieser Zeit noch niemand von Objektorientierung. Anfang der 70er Jahre wurde schließlich die erste objektorientierte Programmiersprache entworfen, die auch breite Akzeptanz fand. Die Sprache hieß Smalltalk und wurde in Xerox PARC unter der Leitung von Alan Kay entwickelt. Diese führten ein Graphical User Interface und interaktive Programmausführung ein. Allerdings wurde diese Sprache nicht standardisiert, wodurch heute eine Menge von Dialekten dieser Sprache existieren. Smalltalk wurde Interpretiert und nicht kompiliert, wodurch man Methoden und Klassen zu Laufzeit hinzufügen konnte. Da es die erste Programmiersprache war, die Objektorientierung als solche verwendete, prägte sie viele Begriffe die auch noch heute im allgemeinen Gebrauch sind. Eiffel wurde 1985 von Bertrand Meyer entwickelt. Die Absicht von Eiffel war, die Produktivität und die Softwarequalität zu erhöhen und Programme schreiben zu können, die ein Maximum an Komplexität, Transparenz und Stabilität zuließen.

In den 80er Jahren wurden auch die Prinzipien von Object-oriented design, object-oriented requirements analysis, objectoriented domain analysis und object-oriented database management systems entwickelt. Das Verständnis und der Gebrauch der Objektorientierten Programmierung verbesserten sich und so verhielt es sich auch mit dem object-oriented software engeneering im Allgemeinen. Ein großer Wunsch der Programmiergemeinde war es, bereits vorhandenen Code aus einer nicht-objektorientierten Programmiersprache in eine neue objektorientierte Programmiersprache zu übernehmen. 1972 entwickelte Dennis Richie bei den Bell Laboratories die Programmiersprache C. Diese entwickelte sich schnell zu einer sehr beliebten Sprache, da sie vielseitig und leicht portierbar war und einen sehr effizienten Maschinencode lieferte. Der Hauptgrund für die große Verbreitung war jedoch die Tatsache, dass Unix hauptsächlich in C geschrieben worden war. Dies war eine gute Grundlage um eine objektorientierte Programmiersprache daraus zu entwickeln und so entwarf Bjarne Stroustrup 1983 beim AT&T Bell Laboratories Computing Science Research Centre eine Programmiersprache die er als "C with Classes" bezeichnete und das sich später (1983) zu C++ entwickelte. Bereits vorhandener C-Code konnte fast vollständig in C++ übernommen werden. C++ war eine sogenannte Hybridsprache, in der man reinen prozedurorientierten Code schreiben konnte, oder bei Bedarf auch das gesamte Programm aus Objekten zusammenstellen konnte. C++ war jedoch nicht der einzige Versuch C um die Objektorientierung zu erweitern. Ein weiteres Beispiel ist Objective-C welches von Brad Cox 1984 entwickelt wurde. Um die totale Kompatibilität zu C zu gewährleisten, wurden einige Kompromisse geschlossen, welche einen Schritt weg von Smalltalk bedeuteten. So war nur eine statische Objektorientierung implementiert, Änderungen in einer Klasse erforderten die komplette Rekompilierung des ¨Sourcecodes und auch der fehlende Garbage Collector stellte ein Problem dar. Aber nicht nur C wurde um die Objektorientierung erweitert. Ein weiteres Beispiel war BASIC, welches 1964 für Personen entwickelt wurde, die mit Programmierung nicht viel zu tun hatten. Microsoft entwickelte auf dieser Basis seine eigene Version Visual BASIC welches es bis dato auf die 6. Version gebracht hat. Das Herz von Visual BASIC ist ein weißes Fenster, auf welchem mittels Drag and Drop Elemente wie Tabellen, Menüs oder Bilder angeordnet werden können. Diese Elemente hießen "widgets", welche properties (Eigenschaften) und events (Aktionen wie ein Doppelklick) besaßen. Mit diesen Verwaltungsprinzipien besaß Visual BASIC eine interessante, anschauliche Repräsentation von objektorientierten Konzepten. Es erfreute sich großer Beliebtheit, da mit dieser Programmiersprache sehr schnell und einfach Programme erstellt werden konnten und das mit einem vergleichsweise geringen Lernaufwand. Den wahren Erfolg erhielt es aber über die Möglichkeit darin Interfaces für Microsofts Officeprodukte, wie zum Beispiel Word oder Excel, erstellen zu können.

Später kam über die Entwicklung des Ablegers Visual BASIC Script noch zusätzlich die Steuerung von Windows über den Windows Scripting Host hinzu und wurde so für den effektiven und für spezielle Vorlieben angepassten Einsatz von Windows zu einem unentbehrlichen Hilfsmittel. Borland ließ, angestachelt durch den großen Erfolg seiner Programmiersprache Turbo Pascal, nicht lange auf einen objektorientierten Nachfolger warten. Sie entwickelten ihr eigenes Visuelles Entwicklungstool und gaben ihm einen eigenen, von Pascal unabhängigen, Namen nämlich Delphi. Visual BASIC und Delphi besaßen den gravierenden Nachteil, dass sie plattformabhängig waren, was in einem der beiden Fälle sicher beabsichtigt war, um die Programmierer an eine Plattform zu binden. Im Gegensatz dazu waren andere Entwicklerteams bestrebt eine möglichst große Plattformunabhängigkeit zu erreichen. In den späten 80er Jahren wurde bei DEC und Olivetti der Nachfolger von Modula-2, Modula-3 (einfallsreiche Namensgebung :-) entwickelt. Auch ADA bekam einen objektorientierten Nachfolger. Das ADA Board entwickelte auf Bestreben des ADA Joint Office Project, hinter welchem das US Department of Defense, stand ADA 95. Auch Sprachen wie LISP und COBOL wurden nicht verschont indem Variationen entstanden, die auf die Namen Common LISP Object System und Micro Focus Object COBOL hörten. Natürlich fand die objektorientierte Programmierung auch Eingang in den Scriptsprachen, welche ursprünglich aus den DOS-batches hervorgegangen waren und für Systemadministrationszwecke wie zum Beispiel über den Windows Scripting Host durch Visual Basic Script oder Makros in den diversen Microsoft Officepaketen verwendet wurden. Ihren wahren Höhenflug erhielten sie aber erst durch die Verwendung von Scriptsprachen auf Webpage sowohl auf der Clientseite durch Javascript oder wieder einmal Visual Basic Script oder serverseitig durch Sprachen wie zum Beispiel Perl oder PHP. Oft wurde aber nicht ein vollständiges objektorientiertes Konzept verwirklicht sondern eher eine Verwendung von Objekten unterstützt.

Und schließlich kommen wir noch zum Start der Objektorientierten Programmierung. In den 70er Jahren wollte Bill Joy eine Programmiersprache schaffen, die die Vorteile von MESA und C vereinigt. Damals konnte er sich diesen Wunschtraum aber noch nicht erfüllen. Erst Anfang der 90er Jahre schrieb er einen Artikel, dass die Sprache auf C++ auf bauen sollte. Zur selben Zeit arbeitete James Gosling an dem SGML-Editor Imagination welchen er in C++ implementierte, womit er aber auch nicht so recht zufrieden war. Aus diesem Unmut heraus entwickelte er die neue Sprache Oak. Patrick Naughton startete im Dezember 1990 zusammen mit Gosling und Mike Sheridan das Green-Poject. Ziel dieses Projektes war die Entwicklung von Software für interaktives Fernsehen und andere Geräte der Konsumelektronik. Bestandteile waren das Betriebssystem GreenOS, der Interpreter Oak und einige Hardwarekomponenten. Schließlich implementierte Joy eine graphische Benutzeroberfläche für das System. Schließlich entwarfen Gosling, Sheridan und Naughton den Runtime-Interpreter in C und im August 1991 führte Oak seine ersten Programme aus. Schließlich wurde ein Gerät mit dem Namen *7 (Star seven) entwickelt von dem sich Sun-Chef Scott McNeal beeindruckt zeigte und schließlich wurde aus dem Team First Person, Inc. gegründet. Anfang 1993 hörte das Team, dass Time Warner ein System für Set-Top- Boxen benötigte und entwickelte in dieser Richtung weiter. Time Warner war zwar im Endeffekt nicht mehr interessiert, man entwickelte aber trotzdem in dieser Richtung weiter. Nach mehreren Richtungswechseln konzentrierte sich die Entwicklung schließlich auf das World Wide Web. Die Programmiersprache sollte Programmcode aus dem Netz empfangen können und sollte fehlertolerant sein, womit Konzepte der Programmiersprachen C/C++ schon abgehakt waren - Stichwort Pointer, die auf wildeste Art und Weise den Speicher vergewaltigen. Obwohl für einen anderen Zweck entwickelt war die Oak dafür perfekt geeignet. Nur eine kleine Namensänderung gab es noch da Oak bereits vergeben war. Und so wurde schließlich Java aus der Taufe gehoben. Im Mai 1995 wurde der Webbrowser Hotjava vorgestellt, der sich aber nur geringer Beliebtheit erfreute. Zum Glück lizenzierte schließlich Netscape Java und baute es in den Navigator 2.0 ein welcher im Dezember 1995 erschien. Schließlich erschien im Jänner 1996 das JDK 1.0 womit die Programmierer endlich Java Applikationen und Web Applets erstellen konnten. Besonderheiten der Sprache sind die Erzeugung eines Bytecodes durch den Compiler, welcher von der Java Virtual Machine dann zur Laufzeit interpretierte wird. Die Interpretation bedingt natürlich, dass Programme langsamer ausgeführt werden, als komplett kompilierte. Diesem Problem wirkt die Entwicklung eines eigenen Prozessors entgegen, Picojava genannt welcher um ein vielfaches schneller ist als ein kompiliertes C-Programm. (Diesen Sachverhalt muss man sich mal auf der Zunge zergehen lassen: Man entwickelt eine plattformunabhängige Sprache nur um dann einen eigenen Prozessor zu entwerfen, der die Programme dann in einer annehmbaren Geschwindigkeit ausführt :-).

Weitere Features sind das fehlen eines Präprozessors, die überladenen Operatoren, die Ausnahmebehandlung, Referenzen statt Zeigern, ein Garbage Collector und das Sicherheitsmodel. Wenn man die Features betrachtet bemerkt man unweigerlich, dass diese alle bereits bekannt sind und eigentlich nur in einer Programmiersprache zusammengemixt wurden. Vor allem die Ähnlichkeit mit C(++) ist vor allem bei den Anweisungen und Operatoren nicht zu übersehen. Java wird gerne als reine objektorientierte Programmiersprache bezeichnet, was genaugenommen inkorrekt ist. Es muss bei der Implementierung alles in eine Klasse eingeschlossen sein, soweit ist die Bezeichnung berechtigt, die Primitiven Datentypen werden jedoch nicht primär als Objekte behandelt, was zwar über die Wrapperklassen möglich, aber dennoch ein Kunstgriff ist.

Einige Beispiele für reine objektorientierte Programmiersprachen:

  • Simula
  • Smalltalk
  • Eiffel

Und einige Bespiele für Hybridsprachen:

  • C++
  • Java


Weiterführende Informationen


>[beginnings]
How Object-Oriented Programming Started
>[origins] The Origins of Object Orientation (newsgoup postings)

>Entstehungskontext | Konzepte und Techniken | Entwicklung und Auswirkungen | Praxis | Bewertung