Fachkonzept - Zeiger / Referenz
Wie identifiziert man eigentlich Objekte?
Weißt du, wer Cristiano Ronaldo ist?
Aber es gibt noch einen Christiano Ronaldo - seinen Sohn.
Beide Personen sindObjekteunserer Welt, die sich eindeutig identifizieren lassen, z.B. über die Identifikationsnummer in deren Personalausweisen. Es handelt sich bei den beiden Personen offensichtlich um verschiedene Objekte, die nur bei einigen Attributen (hier Name und Vorname) gleiche Werte aufweisen.
Wenn man über die beiden Personen sprechen möchte, könnte man zur eindeutigen Identifikation
deren Identifikationsnummern im Personalausweis benutzen.
Einfacher ist es, wenn man Namen benutzt, die auf die betreffenden Personen verweisen.
So wird der Name Christiano Ronaldo, Weltfußballer
als Referenz auf die Person
Christiano Ronaldo (geboren am 5. Februar 1985 in Funchal, Portugal) benutzt - und nicht für seinen Sohn. Für seinen Sohn wird eher die Referenz Christiano Ronaldo Junior
benutzt.
Identität von Objekten
(Software-)Objekte haben - analog zu Objekten unserer Lebenswelt - ebenfalls eine Identität. Zur eindeutigen Identifizierung werden sie mit Identitätsnummern versehen.
Verschiedene Objekte unterscheiden sich in ihrer Identitätsnummer. Sie können aber durchaus denselben Objektzustand haben.
Ein Objekt behält während seiner Lebensdauer immer die einmal vergebene Identitätsnummer. Auch wenn sich der Zustand des Objekts verändert, so bleibt doch die Identitätsnummer des Objekts bestehen.
Häufig verwendet man eine Adresse im Speicher des Rechners als Identitätsnummer.
Die Identitätsnummer eines Objekts zeigt dann auf den Speicherbereich, in dem die Daten
des Objekts abgelegt sind.
Diese Identifikation von Objekten durch eine Lokalisierung im Speicher
setzt natürlich voraus, dass Objekte im Speicher nicht hin und her wandern
,
sondern dass der einmal zugeteilte Speicherbereich während der Lebensdauer eines Objekts
bestehen bleibt. Wir gehen im Folgenden von dieser Vorstellung aus.
Fachkonzept Zeiger / Referenz
Eine Variable ist ein Name, der (in der Regel) mit einem Objekt verknüpft ist. Wenn eine Variable ein (Daten-) Objekt verwaltet, dann verwaltet sie die Speicheradresse (bzw. Identitätsnummer) dieses Objekts. Da die Speicheradresse auf das Objekt zeigt bzw. das Objekt referenziert, nennt man eine solche Adresse auch Zeiger bzw. Referenz und die Variable zur Verwaltung der Adresse Zeigervariable bzw. Referenzvariable.
Schematisch lässt sich eine solche Referenzsituation wie folgt darstellen:
Hier verwaltet die Variable k
ein Objekt der Klasse Konto
mit Hilfe eines Zeigers bzw. einer Referenz. Dieser Zeiger steht für ein bestimmtes Bitmuster,
das die Adresse des Objekts im Speicher darstellt. Die Schreibweise :Konto
soll andeuten,
dass das verwaltete Objekt ein Objekt der Klasse Konto
ist.
Zuweisungen bei Zeigervariablen
Mit Hilfe von Zeigern lässt sich jetzt auch die Auswertung von Zuweisungen bei Zeigervariablen erklären. Das folgende Ablaufprotokoll verdeutlicht zunächst diese Auswertung anhand konkreter Beispiele.
k1 = Konto(6)
Mit der Zuweisung k1 = Konto(6)
wird ein neues Objekt der Klasse
Konto
erzeugt. Mit dem Namen k1
wird die Adresse dieses Objekts
(d. h. ein Zeiger auf dieses Objekt) verwaltet.
k2 = k1
Die Zuweisung k2 = k1
führt nur einen neuen Namen k2
für das
von k1
verwaltete Objekt ein. Beide Variablen verwalten also Zeiger auf dasselbe Objekt.
k2.einzahlen(100.0)
Wenn man den Zustand des von k2
verwalteten Objekts verändert (z. B. durch den
Methodenaufruf k2.einzahlen(100.0)
), so ändert sich natürlich auch das von
k1
verwaltete Objekt, da beide ja identisch sind.
k2 = Konto(7)
Mit der Zuweisung k2 = Konto(7)
wird ein neues Objekt der Klasse
Konto
erzeugt und mit dem Namen k2
verwaltet.
Es existieren jetzt zwei verschiedene Objekte der Klasse Konto
, die von den
beiden Variablen k1
und k2
verwaltet werden.
Quellen
- [1]: Christiano Ronaldo - Urheber: Liondartois - Lizenz: Creative Commons BY 4.0 International