In der objektorientierten Programmierung beziehen sich „Übergabe per Kopie“ und „Übergabe per Referenz“ auf unterschiedliche Arten der Übergabe von Argumenten an Funktionen oder Methoden. Allerdings variiert die Terminologie je nach Sprache und Kontext.
Pass-by-Copy:
- Als Kopien übergebene Argumente: Beim Kopieren wird eine Kopie des tatsächlichen Arguments erstellt und an die Funktion übergeben. Jede an dieser Kopie innerhalb der Funktion vorgenommene Änderung hat keinen Einfluss auf die ursprüngliche Variable außerhalb der Funktion.
- Werttypen: Die Übergabe per Kopie wird häufig bei Werttypen verwendet, bei denen es sich um Datentypen handelt, die ihren Wert direkt enthalten. In C++ oder Java sind beispielsweise int, double, boolean usw. Werttypen.
Übergabe als Referenz:
- Argumente als Referenzen: Bei der Referenzübergabe wird der Funktion ein Verweis auf das eigentliche Argument übergeben. Alle am Argument innerhalb der Funktion vorgenommenen Änderungen werden direkt in der ursprünglichen Variablen außerhalb der Funktion widergespiegelt.
- Referenztypen: Die Referenzübergabe wird häufig mit Referenztypen verwendet, bei denen es sich um Datentypen handelt, die einen Verweis auf einen Speicherort enthalten, an dem die tatsächlichen Daten gespeichert sind. Beispielsweise sind in C++ und Java Objekte (Instanzen von Klassen) Referenztypen.
In einigen Sprachen kann das Verhalten explizit mithilfe von Schlüsselwörtern wie „pass by reference“ oder „&“ (für Referenzparameter) und „pass by value“ oder „*“ (für Wertparameter) gesteuert werden.
Zum Beispiel in C++:
„cpp
void increment(int value) { // Wert übergeben
Wert++; // ändert die Kopie
}
void incrementRef(int &value) { // als Referenz übergeben
Wert++; // ändert die ursprüngliche Variable
}
int main() {
int x =5; // Werttyp
Inkrement(x); // x bleibt 5
inkrementRef(x); // x wird 6
}
„
In Java:
„Java
public void increment(int value) { // Wert übergeben
Wert++; // ändert die Kopie
}
public void incrementRef(int &value) { // als Referenz übergeben
Wert++; // ändert die ursprüngliche Variable
}
public static void main(String[] args) {
int x =5; // primitiver Werttyp
Inkrement(x); // x bleibt 5
inkrementRef(x); // x wird 6
}
„
In Python werden Argumente immer als Referenz übergeben. Allerdings verwendet Python einen Mechanismus zur Referenzzählung, um die Lebensdauer des Objekts zu verwalten, und Sie können Kopien erstellen, die unabhängig von der Referenzanzahl des Originalobjekts sind.
Das Verständnis von Pass-by-Copy und Pass-by-Reference hilft dabei, den Speicher effizient zu verwalten, unerwünschte Änderungen zu vermeiden und das ordnungsgemäße Verhalten von Funktionen/Methoden sicherzustellen, die mit Argumenten arbeiten.