Was sind Objekte in der OOP?

Die objektorientierte Programmierung gibt es seit weit über 10 Jahren. Sie ist in meinen Augen eine konsequente Weiterentwicklung der auf Kapselung ausgerichteten Programmiersprachenentwicklung mit dem Ziel, leicht wiederverwertbare Bausteine zu erhalten (vergl. die Entwicklung z.B. vom Maschinencode (direkte Adressierung) zu Pascal (Prozedurkonzept) zu Modula-2 (Modularisierung) und die Schaffung abstrakter Datentypen (ADT)). Zusätzlich hat sich gezeigt, dass ein objektorientiertes Vorgehen bei der Problemlösung und deren entsprechende Umsetzung in ein objektorientiertes Programm in der Regel zu deutlich kompakteren Lösungen führt. Auch die Softwarewartung und -erweiterung erweist sich wesentlich einfacher.
Zum Durchbruch bei den praktisch arbeitenden Programmierern hat die Fenster-Technik (X11/Windows) der OOP verholfen, weil die komplexen Gegebenheiten in diesem Bereich zu einer weiteren "Softwarekrise" zu führen drohten, die mit der OOP abgewendet werden konnte.

Die wesentliche Idee der OOP besteht darin, die vormals getrennt gefundenen und behandelten Daten und Bearbeitungsfunktionen in einem Objekt untrennbar zu vereinen.

Der Zugriff auf die Daten (Attribute) eines Objekts geschieht dabei ausschließlich über den Aufruf von zum Objekt gehörenden Funktionen (Methoden). Ein objektorientiertes Programm kann deshalb als ein System miteinander kummunizierender Objekte aufgefaßt werden.

Bei der OOP sind Objekte aktive Datenstrukturen

(Auch im Zusammenhang mit Datenbanken werden häufig Objekte mit Hilfe von Attributen beschrieben und in Relation zueinander gesetzt. Der hier vorgestellte Objektbegriff ist aber weitergehend.)

Anschaulich ist ein Objekt ein individuelles Exemplar von Dingen der realen Welt oder auch der Phantasie. So ist ein bestimmtes Auto, ein bestimmter Kunde, pinguin.gif ein bestimmtes Gehaltskonto, aber auch ein bestimmter computeranimierter Pinguin ein Objekt.

Ein weiteres Beispiel:

auto.jpg

Mein alter Golf ist ein Auto. Unter bestimmten (anwendungsorientierten) Gesichtspunkten wurden einige Eigenschaften meines Autos ausgewählt und in einem Modell (Objekt "mein Golf") als Attribute aufgeführt. Nun kann in einer Simulation dieses Objekt lackiert werden, man kann ein- und aussteigen, beschleunigen, bremsen und auch den Gang wechseln (viel mehr kann man mit meinem realen Golf auch nicht anfangen). Man beachte, daß bei dieser Modellbildung einige Dinge stark vereinfacht oder gar weggelassen werden. Bei der Simulation meines Golfs ist z.B. das Tanken nicht vorgesehen, dieser Aspekt scheint für die Arbeit mit dem Modell keine Rolle gespielt zu haben. Schade, dass die Modelle die Wirklichkeit immer nur in Teilaspekten abbilden.

Die Darstellung macht deutlich, dass die Attribute gekapselt sind und von außen nicht direkt manipuliert oder abgefragt werden können. Ich kann zwar die Methode (Operation, Funktion) "neu lackieren" ggf. unter Angabe einer neuen Wagenfarbe auslösen, indem ich eine entsprechende Nachricht an das Objekt schicke, habe aber keine Möglichkeit, nachträglich festzustellen, welche Farbe mein Objekt eigentlich im Moment hat (an dem Modell ist vielleicht doch noch nicht alles perfekt). Anders bei der Geschwindigkeit: Ich kann eine Nachricht senden, die das Objekt mit der Mitteilung "hat die Geschwindigkeit ..." beantwortet.

Die Methoden beinhalten einen großen Teil des Programmcodes. Was beispielsweise bei

mein_Golf.neu_lackieren(rot) <------- das ist schon Python-Syntax (und Java usw.) !

passieren muss, ist jedem klar: Das Attribut Farbe wird mit "rot" überschrieben. Die Methode beschleunigen hingegen dürfte schon recht anspruchsvoll in ihrer Programmierung werden, da in diesem Modell offensichtlich der eingelegte Gang, die aktuelle Geschwindigkeit, die Leistung des Motors und die Höchstgeschwindigkeit mit einfließen.

G. Booch definiert ein Objekt folgendermaßen (4):

ein Objekt hat einen Zustand
es weist ein wohldefiniertes Verhalten auf (Methoden)
es besitzt eine eindeutige Objektidentität

zurück

Dr. Bernd Kokavecz
15.12.99