fit 2002 > Programmmiersprachentypen > konzeptionelle Entwicklungen und Auswirkungen > objektorientierte Sprachen

Überblick


Seit Begin der 80er Jahre war die Objektorientierung in der Programmierszene "in" und so versuchte man mit verschiedensten Mitteln auf diesen Zug aufzuspringen.

  • Man nahm eine bestehende Programmiersprache und versuchte sie als objektorientiert zu erklären.
  • Man erweiterte bestehende Programmiersprachen um objektorientierte Funktionalitäten.
  • der man versuchte einfach in einer nicht-objektorientierten Programmiersprache objektorientiert zu programmieren.

Man ging dann dazu über die Objektorientiertheit" einer Programmiersprache daran zu messen wie sehr sie sich von Smalltalk unterschied. Diese Art der Definition warf natürlich das Problem auf, dass eine Sprache die nicht Smalltalk ist sich natürlich in mehr oder weniger signifikanter Weise von Smalltalk unterscheidet. Schließlich verstand man auch das Objektorientierte Paradigma besser und man bemerkte, dass sogar Smalltalk kleinere Mängel aufwies wie zum Beispiel das Fehlen einer Typenkontrolle. Man konnte sich jetzt fragen, ob eine Sprache, die diese Unzulänglichkeiten korrigiert objektorientierter als selbst Smalltalk ist. Dies führte schließlich zu dem Versuch zu definieren, was eine objektorientierte Programmiersprache sei und was nicht. Eine beispielhafte Definition ist jene von Peter Wegner [Wegner, 1986]: "We define 'object-oriented' so that it includes prototypical object-oriented languages like Smalltalk and Loops, but excludes languages like Ada, Modula, and Clu which have data abstractions but are not generally considered objectoriented. Support of data abstraction is a necessary but not sufficient condition for a language to be object-oriented. Object-oriented languages must additionally support both the management of collections of data abstractions by requiring data abstractions to have a type, and the composition of abstract data types through an inheritance mechanism: object-oriented = data abstraction + abstract data types + type inheritance."

Da sich viele Leute an derart schwammigen Definitionen versuchten, versuchte man schließlich die Objektorientiertheit an verschiedenen Punkten festzumachen welche eine Programmiersprache aufweisen musste um die Bezeichnung objektorientiert" zu verdienen:

  • Datenkapselung: Die Zusammenbindung von Objekten zu einer gemeinsamen Einheit.
  • Information hiding and Data abstraction: Die Verbergung von unwichtigen Details sodass die Objekte als Balck boxes angesehen werden können und erst ab bestimmten Abstraktionsebenen bestimmte Details über die Implementierung preisgeben.
  • Vererbung: Eine Subklasse kann Eigenschaften ihrer Superklasse übernehmen. · Klassen: Ein Objekt von dem Instanzen erstellt werden kann und das unter anderem Interfaces zu anderen Klassen definiert.
  • Typen: Definiert, unter welchen Umständen ein Objekt an welchen Operationen teilnehmen darf. · Static vs. dynamic binding: Die Verbindung von Methoden und Operationen zur Compile- oder zur Run-time.
  • Message passing: Die Kommunikation zwischen verteilten Modulen.
  • Plymorphismus: Meistens als Überladen von Methoden und Operatoren bezeichnet. Die Differenzierung von Implementierungen die erst ab einer gewissen Abstraktionsebene hervortreten.
  • Concurrency: "Gleichzeitigkeit" der Anwendungen.

Aufgrund dieser Aufstellung konnte man schon viel genauer definieren wann eine Programmiersprache das Prädikat objektorientiert verdiente. Es kamen zwar gelegentlich noch 1 - 2 Punkte hinzu oder wurden weggelassen, aber im Großen und ganzen konnten sich die meisten auf dieses Konzept einigen. Objektorientierte Sprachen werden heutzutage in fast allen Bereichen der Softwareprogrammierung verwendet. Aufgrund der Eigenschaften der objektorientierten Programmiersprachen werden sie dort verwendet, wo man großen Wert auf verteilte Entwicklung durch mehrere Instanzen legt wobei diese einander möglichst wenig beeinflussen sollen, wo großer Wert auf Sicherheit gelegt wird, wo abstrakte Sachverhalte einfach in ein Softwaremodel gepackt werden sollen oder wo einfach die Handhabung einer Repräsentation eines realen oder virtuellen Objektes durch ein softwaretechnisches Objekt in der Implementierung Vorteile oder Vereinfachungen verschafft. Smalltalk hat Anfang der 90er wieder einen Aufschwung erfahren, der aber inzwischen wieder zugunsten von Java im abklingen ist. Trotzdem werden auch heute noch größere Softwareprojekte, auch im militärischen Bereich in Smalltalk realisiert. Aufgrund der Einfachheit der Syntax wird Smalltalk von vielen als Einsteigersprache in die objektorientierte Programmierung empfohlen. Aufgrund seiner Schnelligkeit wird C++ heute oft in Simulationen eingesetzt. Ein typischer Anwendungsbereich sind Computerspiele. In gewissem Masse ist C++ auch für die Windowsprogrammierung geeignet. Visual Basic wird hauptsächlich zum Erstellen von Programmen für Windows eingesetzt welche ein Graphic User Interface besitzen. Die enge Verbindung zu Windows macht sie für Programmierer von Windowsanwendungen zur ersten Wahl. Delphi schlägt in etwa in die selbe Kerbe wie Visual Basic und bietet sich vor allem für Win 32 Applikationen an. Der Unterschied ist grob gesprochen nur die zugrunde liegende Sprache. Wer schon Erfahrungen mit BASIC hatte wird eher zu Visual Basic greifen. Pascalprogrammierer oder auch Programmierer aus der C-Ecke werden sich bei Delphi eher heimisch fühlen. Java hat vor allem mit der Möglichkeit der Nutzung über das Internet viele Freunde gewonnen. Die Implementierung von Applets alleine reicht vielen angehenden Javaprogrammierern als Grund Java zu lernen. Der Einbau dieser kleinen Programme in Webseiten erfreut sich noch immer größter Beliebtheit, auch wenn diverse Browserhersteller die Unterstützung der Java Virtual Machine zugunsten einer eigenen, selbstentwickelten und daher favorisierten Programmiersprache in letzter Zeit unterbunden haben. Aber auch im Bereich der Applikationen hat Java seine Vielseitigkeit bewiesen, wenn es nicht gerade auf Geschwindigkeit ankommt.

Weiterführende Informationen


>[impact]
The Impact of OOD on Program Design and Software Development (paper)

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