Objekt (Programmierung)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 26. August 2016 um 15:23 Uhr durch Pittimann (Diskussion | Beiträge) (Änderungen von 87.183.147.120 (Diskussion) auf die letzte Version von 194.138.39.61 zurückgesetzt). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

Ein Objekt (auch Instanz genannt) bezeichnet in der objektorientierten Programmierung (OOP) ein Exemplar eines bestimmten Datentyps oder einer bestimmten Klasse (auch „Objekttyp“ genannt). Objekte sind konkrete Ausprägungen („Instanzen“) eines Objekttyps und werden während der Laufzeit erzeugt (Instanziierung). Sie sind nicht nur zu ihren eigenen Klassen, sondern auch zu den entsprechenden Basisklassen zuweisungskompatibel.

Pragmatische Definition in C

In C gibt es eine sehr pragmatische Definition, was dort als Objekt gilt:

object
region of data storage in the execution environment, the contents of which can represent values
Note: When referenced, an object may be interpreted as having a particular type; see 6.3.2.1“

ISO/IEC 9899:1999: §3.14

C gilt allerdings nicht als objektorientierte Programmiersprache. Die Konzepte der objektorientierten Softwareentwicklung, wie Vererbung, Polymorphie und Kapselung fehlen im Sprachkern und müssen über selbstdefinierte Funktionen nachgebaut werden. Hierfür existieren verschiedene Bibliotheken von Drittanbietern. Sofern ausschließlich über diese Funktionen auf ein Objekt zugegriffen wird, erfüllt es die Kriterien eines Objektes aus OO-Sicht.

Eigenschaften

Jedes Objekt hat einen Zustand, ein Verhalten und eine Identität. Der Zustand des Objektes setzt sich aus seinen Eigenschaften (Attribute) und Verbindungen zu anderen Objekten zusammen. Das Verhalten des Objektes wird durch die Menge seiner Methoden beschrieben. Die Identität unterscheidet ein Objekt von anderen Objekten, auch wenn diese anderen Objekte den gleichen Zustand und das gleiche Verhalten haben.[1]

Durch Konstruktion (siehe auch Konstruktoren und Destruktoren) wird aus einer Klasse ein Objekt oder Exemplar (Instanz) erzeugt. Diese Instanz besitzt dann zur Laufzeit seinen eigenen Datentyp, Eigenschaften und Methoden.

Instanziierung

Als Instanziierung bezeichnet man in der objektorientierten Programmierung das Erzeugen eines konkreten Objekts einer bestimmten Klasse. Während der Instanziierung eines Objekts wird in vielen Programmiersprachen ein sogenannter Konstruktor ausgeführt.

Die Instanz einer Klasse ist ein konkretes Exemplar mit konkreten Ausprägungen, mit dem bis zu dessen Zerstörung gearbeitet werden kann. Zum Beispiel könnte es in einem Programm, das mit Autos arbeitet (beispielsweise eine Shopsoftware), eine Klasse „Auto“ geben, in der möglichst abstrakt beschrieben wird, welche Eigenschaften ein Auto hat. Wenn in einem solchen Programm ein konkretes Auto, zum Beispiel „Porsche, schwarz, Fahrzeugnummer X“, erstellt wird, das dann dem Programm zur weiteren Verwendung zur Verfügung steht, so nennt man dieses nun eine Instanz der Klasse „Auto“, und der Vorgang der Objekterstellung heißt Instanziierung.

Herkunft des Begriffs Instanz

Es gibt die Annahme, dass der heutige Sprachgebrauch „Ein Objekt ist eine Instanz einer Klasse“ auf einer Fehlübersetzung der englischen Bezeichnung „instance“ = „Beispiel“, „Auftreten“ oder „Fall“ beruht. Als Begründung dient die Beobachtung, dass Instanzen im juristischen Kontext zueinander immer in einem über- oder untergeordneten Verhältnis liegen. Diese Annahme wird jedoch von Kritikern als falsch bezeichnet: Die lateinische Wurzel „instantia“ = „das Daraufbestehen“ enthält keine solche Hierarchie von Instanzen untereinander. Vielmehr müssen Instanzen auf anderen Dingen bestehen, was Exemplare von Klassen tun (sie bestehen auf Klassen oder genauer, sie werden in der Programmierung zur Laufzeit aus einer Klasse erzeugt). Auch Goethe nutzte den Begriff „Instanz“ schon in der Bedeutung „Exemplar“: „Eine Instanz aus dem Tierreich der niedrigsten Stufe führen wir noch zu mehrerer Anleitung hier vor.“[2]

Beispiel

Der Quelltext zum Objekttyp (die Klasse) „Buch“ mit der identifizierenden Eigenschaft „Inventarnummer“ (im Falle einer Bibliothek und als einzelne Instanz) enthält die zugehörigen Eigenschaften (Inventarnummer, Ausleihstatus, Beschaffungsdatum, ...) und die Beschreibung zur Bearbeitung der Eigenschaften (die Methoden, wie z. B. die Veränderung des Ausleihstatus im Falle einer Ausleihe durch einen Kunden).

Ein Objekt ist dann eine reale Ausprägung der Klasse, also ein bestimmtes Buch, wie z. B. mit der Inventarnummer 4711. Objektorientierte Programmiersprachen erlauben die gleichzeitige Koexistenz verschiedener Objekte, also ein Buch mit der Nummer 4711 und 1234.

Realisierung in C

Der Zustand eines Objektes (im Sinne der o.g. Definition) ist durch die Werte seiner Attribute vollständig bestimmt. Unbenannte Attribute sowie Füllbits und -bytes (Padding) tragen dabei nichts zum definierten Zustand des Objektes bei, ihr Inhalt ist undefiniert.

C kennt keine Methoden. Diese müssen über Funktionen, die einen Zeiger auf das Objekt als ersten Parameter bekommen, nachgebildet werden. Polymorphie wird über Funktionszeiger, die als Attribute im Objekt gespeichert werden, realisiert.

Die eindeutige Identität eines Objektes wird durch seine Adresse definiert. Somit muss jedes Objekt eine eigene Adresse haben. Dies wird sichergestellt, indem jede Datenstruktur mindestens 1 Byte Speicher belegt. Wird die Adresse eines Objektes im Programm jedoch nicht benötigt und kann der Compiler dies erkennen, ist es möglich, dass für dieses Objekt kein Speicher reserviert wird, da die Semantik des Programmes sich hierdurch nicht ändert.

Unterschied zwischen Entität und Objekt

Der Begriff „Objekt“ ist in der Programmierung mit dem Begriff „Entität“ verwandt. Die Begriffe Entität(styp) und Objekt(typ) gelten in ihrer jeweiligen Welt: der Welt der Datenmodellierung und der Welt der Objektorientierten Programmierung. Sie entsprechen einander, sind aber nicht identisch oder synonym. So hat ein Objekt beispielsweise eine Reihe ihm eigener Funktionen, Eigenschaften und Methoden, was bei einer Entität nicht der Fall ist. Anders ausgedrückt: ein Objekttyp ist die programmtechnische Repräsentation eines Entitätstyps erweitert um zugehörige Bearbeitungsfunktionen (Methoden).

Einzelnachweise

  1. Heide Balzert: Lehrbuch der Objektmodellierung: Analyse und Entwurf. Spektrum Akademischer Verlag, Heidelberg 1999, ISBN 3-8274-0285-9, S. 18.
  2. Johann Wolfgang von Goethe: „Bildung und Umbildung Organischer Naturen“, Zur Morphologie. Band 1, Heft 1; Jahr 1817