Referenz (Programmierung)

Referenz (Programmierung)

Eine Referenz repräsentiert einen Verweis auf ein Objekt. Wie der Zeiger stellt eine Referenz damit einen Aliasnamen für eine Variable dar, die die Speicheradresse einer anderen Variablen enthält. Im Gegensatz zu expliziten Zeigern ist die Adresse selbst nicht mehr änderbar und verborgen, insbesondere sind Operationen auf der Adresse (Zeigerarithmetik), die oft fehlerträchtig sind, nicht möglich. Referenzen werden aus zwei Gründen zur Parameterübergabe genutzt, man spricht dann von Call by reference:

  1. wenn durch eine Unterfunktion die Werte eines Objektes dauerhaft geändert werden sollen;
  2. wenn Zeit gespart werden soll, indem nur die Referenz übergeben wird, und nicht die umfangreiche komplexe Struktur, auf die sie verweist.

In der Programmiersprache Java wird zwischen starken und schwachen Referenzen unterschieden.[1] Da Objekte dort nicht explizit gelöscht und an den verfügbaren Speicher zurückgegeben werden, übernimmt dies ein sogenannter Garbage Collector (vom Englischen für „Müllsammler“) implizit, ohne dass der Programmierer etwas dafür tun muss. Ein Objekt, das nicht stark referenziert ist, kann vom Garbage-Collector gelöscht werden, auch wenn noch schwache Referenzen darauf existieren. Schwache Referenzen sind z. B. für die Implementierung von Puffern nützlich.

Beispiel in C++

1. Wirkungsweise einer Referenz

int nOriginal = 5;
int& nReferenz = nOriginal; // Referenzobjekt angelegt
                                // die Referenz verweist auf das Original
                                // 
nReferenz = 20; // weist der Referenz und somit auch dem Original den Wert 20 zu
int nKopie = nOriginal; // nKopie = 20

2. Beispiel zur Parameterübergabe als Referenz, siehe auch Call by reference.

void quadrieren(int& wert) { // Definition der Funktion
    wert = wert * wert;
}
 
int main() {
    int nZahl = 5;
    quadrieren(nZahl);          // Aufruf der Funktion - danach nZahl == 25
    return 0;
}

Es wird mit der Originalvariablen gearbeitet, gleichgültig ob der Variablenname in der Funktion mit dem Namen der Aufrufvariablen identisch ist.

3. Beispiel für Objektreferenzen

Bank& nBank = Bankenverzeichnis::nachBLZ("76543210"); // eine Referenz auf ein Bankobjekt wird beschafft
Konto& nKonto1 = nBank.kontoZugriff("1234567"); // eine Referenz auf ein bestimmtes Kontoobjekt wird beschafft
Konto& nKonto2 = nBank.kontoZugriff("1111111"); // eine Referenz auf ein weiteres Kontoobjekt wird beschafft
nKonto1.einzahlung(100.00, "EUR", nKonto2); // eine Methode wird auf nKonto1 gerufen

Die Referenzen nBank, nKonto1 und nKonto2 referenzieren jeweils ein Objekt. Das &-Symbol kennzeichnet diese Variablen als Referenzen im Sinne der Programmiersprache.

Beispiel in Pascal

1. Übergabe by reference (der Wert der übergebenen Variablen wird geändert):

procedure quadriere(var wert: integer);
begin
    wert := wert * wert;
end;

Dieser Prozedur kann nur eine Variable übergeben werden, kein Ausdruck. 'wert' ist der lokale Name der als Referenz übergebenen Variablen; mit der Zuweisung eines Werts wird direkt der Inhalt der übergebenen Variablen geändert.

2. Übergabe by value (also nur des Werts, nicht der Variablen selbst; der Wert der übergebenen Variablen wird nicht geändert):

function quadrat(wert: integer): integer;
begin
    Result := wert * wert;
end;

Selbst wenn eine Zuweisung an 'wert' erfolgen würde, würde dies den Inhalt einer etwa übergebenen Variablen nicht ändern: Übergeben wird nur ein Wert; der Bezeichner 'wert' steht für eine lokale Variable, die nur innerhalb der Funktion gültig ist.

Einzelnachweise

  1. Stefan Middendorf, Reiner Singer, Jörn Heid: Java-Programmierhandbuch und Referenz; 2. Auflage 2002. Abschnitt 4.11.6, Referenzklassen. Online [1], abgerufen am 16. August 2011

Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Referenz — (lateinisch referre, französisch référence, „auf etwas zurückführen, sich auf etwas beziehen, berichten“) bezeichnet: allgemein ein Bezugssystem Bezugswert, für einen gewissen Messwert Referenzpunkt, einen Punkt, auf welchen sich Berechnungen… …   Deutsch Wikipedia

  • Referenz — Schlagwortverzeichnis; Stichwortverzeichnis; Index; Stichwortliste; Zeugnis; Empfehlung; Empfehlungsschreiben; Verweis; Arbeitsprobe; Pointer (fachsprachlich); …   Universal-Lexikon

  • Klasse (objektorientierte Programmierung) — Klasse ist in der Objektorientierung ein abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und des gemeinsamen Verhaltens von realen Objekten (Klassifizierung) im Softwaredesign: reale Objekte werden auf die für die Software… …   Deutsch Wikipedia

  • Funktion (Programmierung) — Funktion (engl.: function) ist in der Informatik die Bezeichnung eines Programmkonstrukts. Unterscheidungsmerkmal einer Funktion im Vergleich zum ähnlichen Konstrukt der Prozedur ist es, dass die Funktion ein Resultat zurückliefert und deshalb im …   Deutsch Wikipedia

  • Überladen (Programmierung) — Eine Programmiersprache ermöglicht das Überladen eines Bezeichners, wenn mehrere Vereinbarungen mit demselben Bezeichner gleichzeitig sichtbar sein können; bei der Verwendung erfolgt dann die Auswahl anhand des Kontextes. Mit anderen Worten… …   Deutsch Wikipedia

  • Variable (Programmierung) — In der Programmierung ist eine Variable im allgemeinsten Sinne einfach ein Behälter für Rechnungsgrößen („Werte“), die im Verlauf eines Rechenprozesses auftreten. Im Normalfall wird eine Variable durch einen Namen bezeichnet und hat eine… …   Deutsch Wikipedia

  • Rücksprungadresse — Ein Unterprogramm oder eine Subroutine ist ein Teil eines Programmes, der aus gegebenenfalls mehreren anderen Programmteilen heraus gerufen werden kann und nach Abschluss der Abarbeitung jeweils in das aufrufende Programm wieder zurückkehrt. Je… …   Deutsch Wikipedia

  • Subroutine — Ein Unterprogramm oder eine Subroutine ist ein Teil eines Programmes, der aus gegebenenfalls mehreren anderen Programmteilen heraus gerufen werden kann und nach Abschluss der Abarbeitung jeweils in das aufrufende Programm wieder zurückkehrt. Je… …   Deutsch Wikipedia

  • PERL — Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle  …   Deutsch Wikipedia

  • Programmiersprache Perl — Perl Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle  …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”