Objekt (OOP)

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg

Definition

Ein Objekt ist (im Sinne des objektorienten Paradigmas) etwas, das folgende Merkmale aufweist:

  • Ein Objekt existiert für eine gewisse Zeitspanne, d.h., es wird erzeugt und wieder zerstört. Dazu dienen so genannte Konstruktoren und Destruktoren.
  • Ein Objekt o hat einen unveränderlichen, systemweit eindeutigen und nicht wiederverwendbaren Objektidentifikator (OID) oid(o), mit dem es während seiner Lebenszeit (oder sogar darüber hinaus) jederzeit eindeutig identifiziert werden kann.
  • Neben dem Identifikator kann es für ein Objekt o zu jedem Zeitpunkt t noch einen oder mehrere Objektnamen onamen(o,t) geben. Diese sind im Gegensatz zum OID veränderlich, wiederverwendbar und nicht notwendigerweise systemweit eindeutig. Mit Hilfe eines Namens kann ein Objekt nur unter bestimmten Bedingungen zu bestimmten Zeiten eindeutig identifiziert werden.
  • Ein Objekt o ist zu jedem Zeitpunkt t in einen eindeutigen Objektzustand state(o,t), welcher die "Eigenschaften" des Objektes zum Zeitpunkt t beschreibt.
  • Für ein Objekt o gibt es zu jedem Zeitpunkt t einen eindeutigen Satz an öffentlichen Methoden methods(o,t), mit denen Zustandseigenschaften des Objektes o erfragt und manipuliert werden können. Für jede Methode gibt es eine Methoden-Deklaration, in der festgelegt ist, wie die Methode heißt und welche Ein- und Ausgabe-Parameter sie gegebenenfalls besitzt.
  • Der Zustand eines Objektes ist gekapselt (privat), d.h., er kann nicht direkt, sondern ausschließlich mit Hilfe öffentlich zugänglichen Methoden abgefragt und verändert werden, oder er ändert sich selbstständig.
  • Mit Hilfe von Integritätsbedingungen integrity-constraints(o,t) können Beschränkungen für den Zustand und/oder die Methoden definiert werden, die zu bestimmten Zeitpunkten oder für die gesamte Lebensdauer des Objektes gültig sind. Die Methoden-Deklarationen können als spezielle Integritätsabedingungen aufgefasst werden, da sie festlegen, wie eine Methode korrekt aufgerufen wird und von welcher Art die Ergebnisse eines Aufrufes sind.
  • Die Menge aller Integritätsbedingungen (einschließlich der Methoden-Deklarationen) wird Objektschnittstelle oder Objektinterface genannt. Die Objektschnittstelle kann sich im Laufe der Zeit ändern. Im Allgemeinen ändert sie sich jedoch nicht.
  • Für jedes Objekt gibt es i.Allg. außerdem mindestens eine Objektimplementierung, die die Funktionalität der Methoden realisiert. Die Implementierung ermöglicht den Zustand zu speichern und implementiert die öffentlichen Methoden. Sie kann dabei direkt auf den zuvor definierten Zustand zugreifen. Sie kann überdies weitere nicht-öffentliche, d.h. private Methoden einführen, auf die nur die Implementierung selbst Zugriff hat. Eine Implementierung muss dafür Sorge tragen, dass alle Integritäsbedingungen zu jedem Zeitpunkt erfüllt sind (sonst ist sie fehlerhaft).
  • Ein Objekt kann mit anderen Objekten (oder sogar sich selbst) kommunizieren, indem es öffentliche Methoden der Kommunikationspartner aufruft. Dabei kann ein Objekt Kommunikationspartner mit Hilfe von Objektidentifikatoren, Objektnamen oder Beziehungen, die zu anderen Objekten bestehen, ermitteln.

Medienobjekt

Ein Medienobjekt ist ein Objekt das seinen aktuellen Zustand oder zumindest Teile davon über spezielle Ausgabegeräte präsentieren kann (z.B. Darstellung auf einem Bildschirm). Bei Zustandsänderungen wird die Darstellung automatisch aktualisiert.

Bemerkungen

Fehlende Definition

Man beachte: In der obigen Definition wurde der Begriff Objekt eigentlich nicht definiert. Es wurden lediglich die Merkmale aufgeführt, die ein Objekt haben muss.

Diese Art der Definition wird vor allem in der Mathematik häufig verwendet (z.B. bei der Definition des Begriffes Punkt) und hat sich als sehr brauchbar erwiesen.

Bedeutung von "systemweit"

Der in der Definition verwendete Beriff systemweit ist nicht eindeutig definiert, sondern hängt von der jeweiligen objektorientierten Systemumgebung ab. Bei einem einfachen Programmlauf eines JAVA-Programms beispielsweise bedeutet systemweit für ein Objekt "während der Lebensdauer des Objekts (die endet spätestens mit dem Programmende) innerhalb der Laufzeitumgebung des Programms". Für ein verteiltes objektorientiertes Datenbanksystem bedeutet systemweit dagegen für ein Objekt "ab der Erzeugung des Objektes über alle beteiligten Datenbanken hinweg solange die zugehörigen Datenbanken existieren".

Klassen

Der Begriff Klasse wird meist in einem Atemzug mit dem Begriff Objekt genannt. Es gibt allerdings auch Systeme, in denen der Begriff Klasse keine besonders herausragende Rolle spielt. Beispiele sind die Skriptsprachen der Autorensysteme Asymmetrix ToolBook und Macromedia Director. Und auch in Macromedia Flash werden Klassen von ActionScript 1 ziemlich stiefmütterlich behandelt. Erst in ActionScript 2 wurden Klassen als zentrales Sprachelement eingeführt.

Mit Hilfe von Klassen lassen sich die Schnittstellen und evtl. auch eine oder gar mehrere Implementierungen von "gleichartigen" Objekten auf einen Schlag ganz oder zumindest teilweise definieren. Das erspart natürlich viel Arbeit und Speicherplatz, wenn viele gleichartige Objekte erzeugt werden sollen. Wenn aber i.Allg. nur wenige Objekte einer Art erzeugt werden, kann man auf Klassen ganz gut verzichten. Es reicht, falls einmal ein ähnliches Objekt erzeugt werden soll, ein vorhandenes Objekt zu kopieren und geeignet anzupassen.

Man beachte, dass die obige Definition ohne den Klassenbegriff auskommt.

Zustandsvariablen

Die meisten Objekte speichern ihren Zustand in so genannten Zustandsvariablen. Das sind Variablen, die dem Objekt zugeordnet sind und auf die nur die Implementierungen der Methoden des Objektes zugreifen können.

Anfrage- und Modifikationsmethoden

Methoden, die Informationen über einen Objektzustand als Ergebnis liefern, heißen Anfragemethoden. Sie entsprechen den Funktionen in prozeduralen oder funktionalen Programmierspachen.

Methoden, die den Objektzustand verändern können, werden Modifikationsmethoden genannt. Sie entsprechen den Prozeduren in prozeduralen Programmierspachen.

In der "reinen objektorientierten Lehre" gibt es keine Methoden, die gleichzeitig einen Objektzustand ändern und ein Ergebnis liefern können. In der Praxis gibt es dies dagegen schon, genauso, wie in den meisten Programmiersprachen gar nicht oder nicht streng zwischen "Funktion" und "Prozedur" unterschieden wird. .

Zugriffsrechte

In der obigen Definition wurden die Begriffe öffentlich und privat eingeführt. Auf private Elemente (Zustandsvariablen, Methoden etc.) darf nur eine Implementierung zugreifen. Auf öffentliche Elemente dürfen dagegen andere Objekte, Programme etc. zugreifen.

Unterschiedliche objektorientierte Systeme bieten im Allgemeinen noch weitere Zugriffsrechte oder -beschränkungen an. So ist es in objektorientierten Systemen, die Klassen und Vererbung unterstützen, üblich, mit Hilfe von speziellen Konstukten (protected) den Implemetierungen der Unterklassen Zugriff auf eigentlich geschützte Elemente einer Oberklasse zu gewähren.

Haüfig ist es sogar möglich, den Zustand selbst öffentlich zugänglich zu machen. Dies widerspricht jedoch dem Geist der objektorientierten Programmierung.

In objektorientierten Datenbanksystem ist es dagegen meist möglich, benutzeranhängige Rechte zu vergeben. Man kann einem Benutzer beispielweise nur Leserechte für ein Objekt einräumen, und einem anderen auch bestimmte Modifikationsrechte gewähren. Hier ist die Rechtevergabe also feingranularer als oben definiert.

Integritätsbedingungen

Integritätsbedingungen sind ein sehr mächtiges Hilfsmittel zur Programmierung. Leider unterstützen die gängigen (objektorientierten) Programmiersprachen sie meist nur sehr rudimentär. Die Programmiersprache Eiffel stellt in dieser Hinsicht eine rühmliche Ausnahme dar. Auch objektorientierte Datenbanksysteme unterstützen Integritätsbedingungen meist etwas besser.

Typische Integritätsbedingungen sind Typisierung, Vor- und Nachbedingungen, Invarianten, Zusicherungen oder auch formale Beschreibungen der Aufgaben einer Methode. Die Möglichkeit der formalen Spezifikation einer Methode oder einer anderen Art von Operation bieten z.B. Abstakte Datentypen (ADTs). Mit Hilfe einer derartigen Spezifikation ist es theoretisch sogar möglich, eine Implementierung automatisch zu erzeugen oder vorhandene Implementierungen automatisch auf Korrektheit hin zu überprüfen. Zumindest die Benutzerdaten könnten problemlos automatisch auf Korrektheit hin überprüft werden.

Die meisten Programmiersprachen unterstützen jedoch nur Typisierung. Bei Skriptsprachen ist selbst dies haüfig nur rudimentär der Fall. Das Ergebnis ist, dass ein Programmierer sehr viel mehr Zeit mit der "händischen" Implementierung von Integritätschecks verbringt, als mit der Lösung der eigentlichen Probleme.

Kommunikation

Methoden-Aufrufe werden häufig auch Nachrichten genannt. In der objektorientierten Welt sind das Synonyme, in denen lediglich eine unterschiedliche Betrachtungsweise zu Ausdruck kommt. Ein Objekt kann mit einem anderen kommunizieren, indem es indem es ihm eine Nachricht schickt, d.h., indem es eine Methodes des anderen Objektes aufruft.

Zu jedem Zeitpunkt kann ein Objekt gleichzeitig mit einem Objekt kommunizieren (Unicast-Nachrichten), mit mehreren ausgewählten Objekten (Multicast-Nachrichten) oder mit allen verfügbaren Objekten (Broadcast-Nachrichten).

Objekte können auch mit Ein- und Ausgabe-Geräten kommunizieren. Diese Geräte können als spezielle Objekte aufgefasst werden, denen es möglich ist, mit Benutzern (d.h. mit system-externen Objekten) durch grafische Darstellungen, mittels der Tastatur etc. zu kommunizieren.

Skripte

Eine Sammlung mehrerer Methoden und Zustandsvariablen wird in den Autorensystemen normalerweise Skript genannt. In diesen Systemen werden Skripte manchmal sogar als eigenständige Objekte aufgefasst.

Quellen

Siehe auch


Dieser Artikel ist GlossarWiki-konform.