i

Fachkonzept - Zeiger / Referenz

Wie identifiziert man Objekte?

Weißt du, wer Horst Köhler ist? Klar, er war Bundespräsident der Bundesrepublik Deutschland!

Horst Köhler (Bundespräsident a.D.)[1]

Es gibt aber noch einen Horst Köhler (geboren am 15.02.1963 in Trier), der besser unter dem Pseudonym Guildo Horn bekannt ist.

Horst Köhler alias Guildo Horn[2]

Beide Personen sind Objekte unserer 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 Horst Köhler, ehemaliger Bundespräsident der Bundesrepublik Deutschland häufig als Referenz auf die Person Horst Köhler (geboren am 22.02.1943 in Skierbieszów) 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 Objekt verwaltet, dann verwaltet es die Speicheradresse (bzw. Identitäsnummer) 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:

Referenz

Hier verwaltet die Variable a1 ein Objekt der Klasse Ampel mit Hilfe eines Zeigers bzw. einer Referenz. Dieser Zeiger steht für ein bestimmtes Bitmuster, das die Adresse des Objekts im Speicher darstellt.

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.

a1 = Ampel('rot')
Objektdiagramm

Mit der Zuweisung a1 = Ampel('rot') wird ein neues Objekt der Klasse Ampel erzeugt. Mit dem Namen a1 wird die Adresse dieses Objekts (d. h. ein Zeiger auf dieses Objekt) verwaltet.

a2 = a1
Objektdiagramm

Die Zuweisung a2 = a1 führt nur einen neuen Namen a2 für das von a1 verwaltete Objekt ein. Beide Variablen verwalten also Zeiger auf dasselbe Objekt.

a2.schalten()
Objektdiagramm

Wenn man den Zustand des von a2 verwalteten Objekts verändert (z. B. durch den Methodenaufruf a2.schalten()), so ändert sich natürlich auch das von a1 verwaltete Objekt, da beide ja identisch sind.

a2 = Ampel('rot')
Objektdiagramm

Mit der Zuweisung a2 = Ampel('rot') wird ein neues Objekt der Klasse Ampel erzeugt und mit dem Namen a2 verwaltet. Es existieren jetzt zwei verschiedene Objekte der Klasse Ampel, die von den beiden Variablen a1 und a2 verwaltet werden.

Quellen

Suche

v
7.2.1.3.2
inf-schule.de/oop/python/ampel/beziehungen/konzept_referenz
inf-schule.de/7.2.1.3.2
inf-schule.de/@/page/UWR3q06Jap6n1jcg

Rückmeldung geben