Ein Konstruktor ist eine spezielle Methode, die beim Erzeugen eines Objekts automatisch aufgerufen wird. Seine Aufgabe: das neue Objekt in einen definierten Ausgangszustand bringen — Attribute mit Startwerten belegen, Ressourcen öffnen, Invarianten aufbauen.
Warum ein Konstruktor?
Ohne Konstruktor müsste jedes Programm nach der Objekterzeugung selbst dafür sorgen, dass alle Attribute gültige Werte haben — leicht vergessen, leicht inkonsistent. Der Konstruktor erzwingt die Initialisierung: Ein Objekt existiert erst, wenn sein Zustand vollständig aufgebaut ist.
Konstruktoren in verschiedenen Sprachen
# Python
class Punkt:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
p = Punkt(3, 4)
// Java
public class Punkt {
private int x, y;
public Punkt(int x, int y) {
this.x = x;
this.y = y;
}
}
In Python heißt der Konstruktor __init__; in Java, C++ und C# trägt er den Klassennamen. Er hat keinen Rückgabetyp — nicht einmal void.
Parameter und Überladen
Konstruktoren nehmen Parameter entgegen und können wie normale Methoden überladen werden: Java bietet mehrere Konstruktoren mit unterschiedlichen Parameterlisten an, Python nutzt Default-Werte. Ein Objekt, das mit einem Datentyp-spezifischen Konstruktor erzeugt wird, ist sofort vollständig konfiguriert.
Das Gegenstück: Destruktor
Der Destruktor räumt beim Löschen des Objekts auf (Ressourcen wie Dateien oder Verbindungen freigeben). Sprachen mit automatischer Speicherverwaltung wie Python und Java benötigen ihn kaum; C++ setzt ihn gezielt über den Namen mit vorangestellter Tilde (~Punkt) ein.
Zusammenspiel mit der Objektorientierung
Konstruktoren sind der erste Lebenszyklus-Schritt einer Klasse. Zusammen mit Kapselung — die den Zugriff auf die initialisierten Attribute kontrolliert — und Polymorphie — die über Konstruktor-Aufrufe konkrete Objekte entstehen lässt — ergibt sich das vollständige Bild der Objektorientierung. Grundbausteine daneben: Variable, Funktion und Prozedur.