Eine objektorientierte Sprache ist eine Computerprogrammiersprache, die sich um das Konzept eines Objekts dreht. Objektorientierte Sprachen wurden entwickelt, um die Entwicklung, das Debuggen, die Wiederverwendung und die Wartung von Software zu vereinfachen, als dies mit früheren Sprachen möglich war. Das Verständnis von Objekten und objektorientierten Sprachen erfordert Kenntnisse über die Entwicklung von Computerprogrammiersprachen und Datenstrukturen.
- Entwicklung der Computerprogrammiersprachen
- Assemblersprache.
- Sprachen höherer Ordnung.
- Strukturierte Sprachen.
- Objektorientierte Sprachen.
- Merkmale der objektorientierten Programmierung
- Kapselung und Datenversteck.
- Vererbung.
- Polymorphismus.
- Gemeinsame objektorientierte Sprachen
- Smalltalk.
- C+ +.
- Java.
- Andere Sprachen.
- Bibliographie
Entwicklung der Computerprogrammiersprachen
Computerprogrammiersprachen haben sich im Laufe der Jahre kontinuierlich weiterentwickelt. Diese Entwicklung wird in den folgenden Beispielen detailliert beschrieben.
Assemblersprache.
Die ersten Computerprogramme wurden in Assembler geschrieben. Dies ist eine primitive Art von Sprache, in der jede Anweisung einer einzelnen Maschinenanweisung entspricht. Um etwas Nützliches zu erreichen, sind viele Maschinenanweisungen erforderlich. Assemblersprache ist spezifisch für einen bestimmten Computertyp; Das Verschieben des Programms auf einen anderen Computertyp erfordert das Schreiben eines ganz neuen Programms. Assemblersprachprogramme sind schwer zu schreiben, zu debuggen und zu warten. Obwohl heute für die meisten Computeranwendungen andere Sprachen verwendet werden, wird die Assemblersprache auch heute noch als erste Sprache bei der Entwicklung eines neuen Chips verwendet.
Sprachen höherer Ordnung.
Nach der Assemblersprache wurden Sprachen höherer Ordnung entwickelt; zu den frühen gehörten FORTRAN und BASIC. Eine Aussage in einer höheren Sprache entspricht einem Satz in Englisch. Ein Programm namens Compiler liest die Anweisungen aus einer Quelldatei und generiert eine Datei mit Maschinenbefehlen, die als Objektdatei bezeichnet wird. Die Objektdatei kann dann vom Computer geladen und ausgeführt werden. Eine Sprache höherer Ordnung ist portabler als ein Assemblerprogramm; Dieselbe Quelldatei kann für jeden Computer kompiliert werden, solange ein geeigneter Compiler vorhanden ist.
Frühe Sprachen höherer Ordnung erlaubten nur einfache Datentypen wie Integer, Gleitkommazahl oder String (eine Folge von Buchstaben). Die einzige verfügbare Datenstruktur war das Array. Ein Array ist eine Liste von Elementen desselben Datentyps, z. B. eine Liste von Zahlen oder eine Liste von Zeichenfolgen. Eine Datenbank wurde mit einer Gruppe von Arrays erstellt. Eine Produktdatenbank kann beispielsweise drei Arrays mit den Namen Produktnummer, Produktbeschreibung und Produktpreis enthalten. Es war Sache des Programmierers, die Arrays auszurichten; zum Beispiel, um sicherzustellen, dass das dritte Element jedes Arrays dem gleichen Produkt entsprach.
Strukturierte Sprachen.
Der nächste Schritt in der Entwicklung der Computerprogrammiersprachen war die Entwicklung strukturierter Sprachen wie C und PASCAL und die Einführung von Datenstrukturen. Eine Datenstruktur ist eine Zusammenstellung einfacherer Datentypen in einem einzigen Datensatz. Beispielsweise könnte eine Produktdatenbank als ein Array von Produktdatensätzen aufgebaut werden, wobei jeder Datensatz die Felder Produktnummer, Produktbeschreibung und Produktpreis enthält. Jetzt könnte ein Datensatz alle notwendigen Informationen zu einem einzelnen Element enthalten. Strukturen wurden auch im prozeduralen Teil der Sprache definierter. Eine Funktion oder Prozedur ist ein kleiner Teil eines größeren Programms, das geschrieben werden kann, um eine grundlegende Operation für eine Datenstruktur wie einen Datensatz bereitzustellen.
Objektorientierte Sprachen.
Der nächste Schritt in der Entwicklung von Computerprogrammiersprachen, die Objektorientierung, wurde in der Smalltalk-Sprache eingeführt. Objektorientierung nimmt die Konzepte der strukturierten Programmierungeinen Schritt weiter. Anstelle von Datenstrukturen und separaten Programmstrukturen werden nun sowohl Daten- als auch Programmelemente zu einer Struktur zusammengefasst, die als Objekt bezeichnet wird. Die Objektdatenelemente werden Attribute genannt, während die Objektprogrammelemente Methoden genannt werden. Zusammen werden Attribute und Methoden als Mitglieder des Objekts bezeichnet. Normalerweise sind die Methoden eines Objekts die einzigen Programme, die mit den Attributen des Objekts arbeiten können.
Mit der Objektorientierung kam es zu einer grundlegenden Änderung in der Art und Weise, wie Programme angezeigt werden. Die frühere Ansicht war, dass Daten in irgendeiner Weise manipuliert werden müssen, um ein Endergebnis zu erzielen, und ein Programm wurde als sequentielles Mittel zur Durchführung der Manipulationen angesehen. Aus Objektorientierungsperspektive wird ein Programm als eine Gruppe von Objekten betrachtet, die auf Nachrichten des Benutzers, anderer Programme oder anderer Objekte reagieren. Diese Ansicht führte zu der Idee der ereignisgesteuerten Programmierung; d.h. wenn Ereignis A eintritt, führt dieses Objekt Aktion B aus.
Merkmale der objektorientierten Programmierung
Zu den wichtigsten Merkmalen der objektorientierten Programmierung gehören Kapselung und Datenversteck, Vererbung und Polymorphismus.
Kapselung und Datenversteck.
Die zentrale Idee bei der objektorientierten Programmierung (OOP) ist, dass die Objektattribute und die Methoden, die mit den Attributen arbeiten, im Objekt miteinander verbunden oder gekapselt sind. Die Methoden des Objekts bieten die einzigen Schnittstellen zwischen dem Objekt und anderen Teilen des Programms. Dies unterscheidet sich von früheren Sprachen, in denen jeder Teil eines Programms jederzeit mit jedem Datenelement arbeiten konnte. Obwohl dies restriktiv erscheint, führen die Einschränkungen zu einem modulareren Programm, das einfacher zu entwickeln ist und weniger Fehler enthält. Es bedeutet auch, dass es einfacher ist, ein Objekt in eine andere Umgebung zu verschieben und trotzdem korrekt zu funktionieren.
Ein Software-Objekt ähnelt einem physischen Objekt. Zum Beispiel kann ein Motor verwendet werden, um ein Auto anzutreiben. Es hat interne Komponenten, die Attributen entsprechen, aber man muss sich nicht darum kümmern, was sie sind oder wie sie funktionieren. Der Motor muss mit der Drosselklappe, dem Kraftstoffsystem, dem Getriebe, dem Einlass und den Abgaskrümmern verbunden sein, die alle den Methoden entsprechen. Es ist unvorstellbar, dass Kraftstoff auf andere Weise als über das Kraftstoffsystem in den Motor gelangen würde. Solange die richtigen Schnittstellen beibehalten werden, funktioniert der Motor. So ist es mit Objekten. Die Objektattribute sind von außen verborgen. Das Objekt interagiert mit seiner Umgebung durch seine Methoden.
Vererbung.
Ein weiteres wichtiges Konzept der objektorientierten Programmierung ist die Vererbung. Eine Objektklasse ist in einer Hierarchie definiert und soll das Verhalten ihrer Vorfahren (der darüber liegenden Objekte in der Hierarchie) erben. Ein Zeichenprogramm kann beispielsweise drei Objektklassen enthalten: Form, Rechteck und Kreis. Sie könnten so definiert werden, dass Rechteck und Kreis beide Nachkommen der Form sind.
Shape enthält Attribute, die jeder Form gemeinsam sind, z. B. die Position der Form auf einer Zeichenfläche. Shape bietet auch Methoden zum Bearbeiten dieser Attribute. Zum Beispiel würde eine move-Methode die Position der Form ändern. Darüber hinaus würde es eine Definition für Methoden geben, auf die alle Formen reagieren müssen, z. B. eine Zeichnungsmethode, um die Form auf einer Zeichenfläche anzuzeigen. Die Draw-Methode wird in diesem Fall als abstrakt bezeichnet; Es tut nichts anderes, als eine Anforderung zu erstellen, dass untergeordnete Klassen es implementieren müssen.
Da Rectangle ein Abkömmling von Shape ist, erbt es Attribute (location) und Methoden (move) von Shape . Es bietet die zusätzlichen Attribute, die es benötigt (Breite und Höhe) und neue Methoden, die diese Attribute bearbeiten (setWidth, setHeight). Rectangle muss auch eine Zeichnungsmethode bereitstellen, die ein Rechteck auf der Zeichenfläche malt, da jeder Nachkomme von Shape eine Zeichnungsmethode implementieren muss. Ebenso bietet Circle ein neues Attribut (radius), Methoden zum Bearbeiten (setRadius ) und eine eigene Zeichnungsmethode.
Bei dieser Art der Anordnung würde das Zeichnungs-Manager-Programm eine Liste von Formen auf der Zeichenfläche haben. Um ein Objekt zu verschieben, würde es die move-Methode des Objekts aufrufen. Um ein Objekt zu zeichnen, ruft der Manager die Draw-Methode des Objekts auf. Der Manager weiß weder, noch kümmert er sich darum, wie sich das Objekt bewegt oder zeichnet, solange die Arbeit erledigt ist. In der Tat kann es nicht einmal wissen, welche Art von Form ein bestimmtes Objekt wirklich ist. Es kann ein Rechteck, ein Kreis oder ein anderes Objekt sein, das von Shape abstammt. Es muss nur wissen, dass es von Shape abstammt, damit es jede Nachricht senden kann, die eine Shape empfangen kann.
Die Vererbungsfähigkeit einer objektorientierten Sprache fügte der Programmierung eine ganz neue Dimension hinzu. Das Erlernen einer früheren Sprache höherer Ordnung bezog sich hauptsächlich auf das Erlernen der Sprachsyntax (wie die Sprachanweisungen aufgebaut sind), was nicht so schwierig ist. In einer objektorientierten Sprache ist das Erlernen der Syntax immer noch notwendig, aber sich mit den Standardklassenhierarchien vertraut zu machen — die Tausende von Klassen umfassen können, jede Klasse mit ihren eigenen Methoden — ist eine viel größere Aufgabe. Dies lohnt sich jedoch, da ein Objekt die Attribute und das Verhalten seines übergeordneten Objekts erbt. Ein Programmierer kann unnötige Arbeit vermeiden, indem er ein vorhandenes Objekt findet, das bereits das meiste von dem erledigt, was benötigt wird. Dann können schrittweise neue Funktionen hinzugefügt werden. Das Ergebnis sind geringere Kosten und qualitativ hochwertigere Software.
Diese Eigenschaft führte auch zur Aufnahme automatischer Dokumentationsfunktionen in mehrere objektorientierte Sprachen. In früheren Sprachen wurde die Dokumentation — wenn überhaupt – separat erstellt, fast als nachträglicher Einfall. Jetzt können Dokumentationsinformationen in den Objektquellcode aufgenommen und verwendet werden, um automatisch ein HTML-Dokument (Hypertext Markup Language) mit Hyperlinks in den Klassenhierarchien zu generieren, die mit einem Internetbrowser angezeigt werden können. Dies macht es viel einfacher, eine genaue und aktuelle Dokumentation zu führen.
Polymorphismus.
Das nächste wichtige Merkmal der objektorientierten Sprache ist der Polymorphismus, was bedeutet, dass ein nachkommendes Objekt nicht genau wie sein Vorfahr auf eine Nachricht antworten muss. Ein neues Objekt kann die Methoden seiner Eltern überschreiben, wodurch das neue Objekt anders auf eine Nachricht reagiert. Eine gemeinsame Klasse in einem Fenstersystem ist beispielsweise eine Komponente, die ein sichtbares Objekt darstellt. Eine Komponente ist eine Ahnenklasse für jedes sichtbare Objekt auf dem Bildschirm: Symbole, Schaltflächen, Menüs, Schieberegler, Kontrollkästchen, Optionsfelder und sogar Fenster. Alle diese untergeordneten Klassen überschreiben einige Methoden der Komponente, um das Verhalten zu ändern. Ein Symbolobjekt muss sich beispielsweise als kleines Bild anzeigen lassen. Icon überschreibt die Zeichnungsmethode der Komponente, um das Bild anzuzeigen.
Gemeinsame objektorientierte Sprachen
Gemeinsame objektorientierte Sprachen umfassen Smalltalk, C, Java und andere Sprachen wie BASIC und PASCAL.
Smalltalk.
Smalltalk war die ursprüngliche objektorientierte Sprache, die in den frühen 1970er Jahren von Xerox entwickelt wurde. Seitdem wurden mehrere Variationen eingeführt. Es wird immer noch verwendet, aber die breite Akzeptanz wurde durch das Fehlen eines universellen Standards behindert.
C+ +.
C+ + ist eine Erweiterung der C-Sprache, die OOP-Funktionen bereitstellt. Es ist wahrscheinlich die am weitesten verbreitete objektorientierte Sprache, die derzeit verwendet wird. C ist eine hybride Sprache, weil es Standard-C-Programme kompiliert; es erfordert nicht die Verwendung von Objekten. Dies ermöglicht es, vorhandene C-Software zu nutzen und gleichzeitig die Objektorientierung für neue Software zu verwenden. C wird durch ANSI-Standards gesteuert.
Java.
Java ist die am weitesten verbreitete reine objektorientierte Sprache. Es wurde von Sun Microsystems ursprünglich als Steuerungssprache für kleine Geräte entwickelt. Es erwies sich jedoch als ideal für die Verwendung mit dem Internet. Ein Java-Applet kann in eine Webseite eingebettet werden. Wenn ein Browser die Webseite lädt, wird auch das Applet geladen und angezeigt. Sun behält immer noch eine strenge Kontrolle über den Sprachstandard.
Um die plattformübergreifende Bedienbarkeit zu erleichtern (Arbeiten auf völlig verschiedenen Computertypen ohne Neukompilierung), ist Java in zwei Teilen implementiert. Der Compiler erzeugt eine Objektdatei, die nur von einer Java Virtual Machine (JVM) ausgeführt werden kann. Für jedes unterstützte Betriebssystem (Windows, Unix/Linux oder Solaris) steht eine separate JVM zur Verfügung. Dadurch können Java-Programme auf jedem dieser Systeme ohne Neukompilierung ausgeführt werden.
Andere Sprachen.
Die meisten heute gebräuchlichen Sprachen erlauben eine Form der Objektorientierung. BASIC hat sich zu objektorientiertem Visual BASIC entwickelt; PASCAL zu objektorientiertem DELPHI. Im Allgemeinen sind dies hybride Sprachen wie C, die die Objektorientierung unterstützen, ohne dass dies erforderlich ist.
siehe auch Compiler; Maus; Prozedurale Sprachen.
Donald M. McIver
Bibliographie
Deitel, Harvey M. und Paul J. Deitel. Java: Wie man programmiert, 2nd ed. Oberer Sattelfluss, NJ: Prentice Hall, 1998.Voss, Greg. Objektorientierte Programmierung, Eine Einführung. New York: Osborne McGraw-Hill, 1991.