Initialisierungs- und Zuweisungssemantik

Nicht alle Programmiersprachen bieten die Möglichkeit, neu erzeugte Variablen - mit Defaultwerten oder benutzergesteuert - zu initialisieren. Objekte müssen aber nach ihrer Erzeugung, d.h. der Bereitstellung eines reservierten Speicherbereichs, stets in einem definierten Zustand sein. Ihnen muss noch ihrer Verwendung ein initialer Wert zugewiesen werden. Allerdings sind Zuweisung und Initialisierung zwei verschiedene Operationen, die für benutzerdefinierte Type (also: Klassen) auch unterschiedlich behandelt werden können.

Als Initialisierung wird die Zuweisung eines initialen Wertes innerhalb einer Objektdefinition bezeichnet. Dabei ist zu beachten, dass auch die Zuweisung aktueller Parameter an die formalen Parameter einer Methode der Initialisierung, der formalen Parameter als lokale Objekte entspricht. Auch die Rückgabe von Objekten als Funktionswert muss wie die Initialisierung behandelt werden und besitzt deshalb die gleiche Semantik. Als Zuweisung wird die Anwendung des Zuweisungsoperators auf entsprechende Argumente in Ausdrücken - also nicht in Definitionen - bezeichnet.

Sowohl für die Initialisierung als auch für die Zuweisungsoperation für benutzerdefinierte Typen existieren verschiedene Semantiken.

Wertsemantik: die Zuweisung beinhaltet das bitweise Kopieren aller Komponenten des zugewiesenen Objekts. Dabei bedeutet das Kopieren von Referenzen gerade das Kopieren ihrer Werte - im Falle von Objektreferenzen gerade die Objektidentitäten - und nicht das Kopieren der Inhalte der referenzierten Werte, d.h. des Zustandes der Objekte.

Referenzsemantik: wie zuvor, aber für Referenzwerte wird der referenzierte Wert auf das zugewiesene Objekt kopiert.

Es ist also in objektorientierter Software zu unterscheiden, ob eine Objektidentität mittels Wertsemantik kopiert werden soll, um das gleiche Objekt z.B. an verschiedenen Stellen mehrfach benutzbar zu machen oder ob der Zustand eines Objektes einem anderen Objekt mittels Referenzsemantik zugewiesen werden soll, d.h. dessen Wertbelegung durch ggf. rekursives Dereferenzieren ermittelt wird, z.B. bei eigenständigen Subobjekten. In den Anwendungen, in denen beide Fälle sinnvoll und beide Semantiken realisierbar sind, müssen auch entsprechende unterschiedlich implementierte Methode für diese Formen der Zuweisung angeboten werden.

Informationen zum Artikel
Deutsch: Initialisierungs- und Zuweisungssemantik
Englisch:
Veröffentlicht: 07.12.2009
Wörter: 316
Tags: Entwicklung, Codierung
Links: Bitweise, Default, Initialisierung, Klasse, Kopie