s n h m r u

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
i

Fachkonzept - Referenzen

Referenzen und Referenzvariablen

Objekte werden über Referenzen verwaltet. Eine Referenz ist ein Verweis auf ein Objekt. Um ein Objekt festzuhalten, braucht man eine Variable, die diese Referenz speichert – eine Referenzvariable.

Solche Situationen stellt man in einem Objektdiagramm dar. Ein Objekt wird als Kasten gezeichnet: Ganz oben steht – unterstrichen – die Klasse mit vorangestelltem Doppelpunkt (:Figur), darunter stehen die aktuellen Werte der Attribute. Ein Pfeil von einer Variablen zum Kasten zeigt, dass die Variable auf dieses Objekt verweist.

Objektdiagramm mit einer Referenz

Hier verweist die Variable f1 auf ein Objekt der Klasse Figur.

Objekte haben keine Namen

Es ist wichtig, genau zu unterscheiden: f1 ist der Name einer Variablen, nicht der Name des Objekts. Das Objekt selbst hat keinen Namen. Man erreicht es ausschließlich über eine Referenz.

Objekte haben keine Namen, sondern nur die Referenzen auf sie.

In Objektdiagrammen wird oft eine vereinfachte Schreibweise benutzt, bei der der Variablenname direkt an den Objektkasten geschrieben wird. Auch hier gilt aber: Der Name gehört zur Variablen, nicht zum Objekt.

Vereinfachte Darstellung

Zuweisungen bei Referenzvariablen

Mit dem Begriff der Referenz lässt sich erklären, was eine Zuweisung zwischen Referenzvariablen bewirkt. Wir gehen von einer Figur aus:

val f1 = Figur("blau", 0, 0)
var f2 = f1

Die Zuweisung f2 = f1 erzeugt kein neues Objekt. Sie führt nur einen weiteren Namen f2 für dasselbe Objekt ein. Beide Variablen verweisen auf dasselbe Objekt:

Zwei Variablen verweisen auf dasselbe Objekt

Verändert man nun den Zustand des Objekts über die eine Variable, so ist die Änderung auch über die andere sichtbar – es ist ja dasselbe Objekt:

f1.gehe(3)            // bewegt das Objekt nach links
println(f2.x)         // die Änderung ist auch über f2 sichtbar

Mit dem Operator === kann man prüfen, ob zwei Variablen auf dasselbe Objekt verweisen. Erzeugt man dagegen ein neues Objekt und weist es zu, so verweisen die Variablen anschließend auf verschiedene Objekte:

f2 = Figur("rot", 4, 4)   // f2 verweist jetzt auf ein neues, eigenes Objekt
println(f1 === f2)        // false

Referenzen auf "nichts": null

Eine Referenzvariable kann auch auf gar kein Objekt verweisen. Dieser Fall wird durch den Wert null ausgedrückt. Im Objektdiagramm verweist die Variable dann auf nichts:

Variable mit Wert null

In Kotlin muss man bereits beim Datentyp festlegen, ob eine Variable null enthalten darf. Nur ein nullbarer Typ wie Figur? erlaubt den Wert null; ein Typ ohne Fragezeichen (Figur) enthält immer ein echtes Objekt.

var aktuellerSpieler: Figur? = null   // erlaubt: darf null sein

Ruft man eine Methode an einem Wert auf, der null sein könnte, lehnt der Compiler das ab, bis man den Fall null behandelt hat. Dadurch verhindert Kotlin schon beim Schreiben des Programms den häufigen Fehler, eine Nachricht an „niemand" zu schicken. (In Sprachen ohne diese Absicherung – etwa Java – stürzt das Programm an dieser Stelle zur Laufzeit ab.)

Referenzen "spielen"

Eine Referenz kann man sich wie einen ausgestreckten Arm vorstellen, der auf ein Objekt zeigt. Der Arm ist die Referenz; eine Beschriftung am Arm entspricht dem Namen der Referenzvariablen. Ein Arm kann auch auf niemanden zeigen (null). Um Methoden oder Attribute zu nutzen, muss der Arm aber auf ein konkretes Objekt zeigen.

Eine Referenz verweist auf ein Objekt; verweist sie auf keines, hat sie den Wert null. Gespeichert wird sie in einer Referenzvariablen. Eine Zuweisung zwischen Referenzvariablen kopiert kein Objekt, sondern lässt eine weitere Variable auf dasselbe Objekt verweisen. Objekte selbst haben keine Namen – nur die Referenzen auf sie.

Suche

v
100.123.5.3 Fachkonzept - Referenzen
Kopieren durch Anklicken

Rückmeldung geben