Fachkonzept - Vererbung
Erweiterung von Klassen
Das folgende Klassendiagramm zeigt eine Vererbungssituation, bei der die Subklassen AmpelAuto
und
AmpelFussgaenger
Erweiterungen einer Basisklasse Ampel
darstellen.
Übernehmen, ergänzen und überschreiben
Beim Vererben übernimmt die Subklasse die Attribute und Methoden der Basisklasse.
Eine übernommene Methode kann dabei überschrieben (d. h. neu definiert) werden.
Die Subklasse kann dann noch zusätzliche Attribute und Methoden ergänzen.
Folgende Fälle kommen im oben gezeigten Klassendiagramm vor:
Die Subklasse AmpelAuto
übernimmt z. B. die Methode schalten()
und überschreibt z.B.
das Attribut indexAktuellerZustand
der Basisklasse Ampel
.
Die Subklasse AmpelAuto
ergänzt die Methode getLampen()
.
Spezialisierung und Generalisierung
Vererbung kann dann ins Spiel kommen, wenn eine Klasse als Spezialisierung einer anderen Klasse konzipiert wird.
Das Beispiel Sparkonto zeigt eine Spezialisierungssituation.
Oft wird aber auch die gemeinsame Struktur verschiedener Klassen durch Generalisierung mit einer Superklasse beschrieben.
In beiden Fällen verfolgt man das Ziel, eine Struktur nur einmal zu definieren.
Vererbung wird insbesondere dann benutzt, wenn größere Klassenbibliotheken
(wie z. B. tkinter
) entwickelt werden.
Vererbung und Modularisierung
Eine Klasse, die als Subklasse aus anderen Klassen entsteht, ist kein autonomer Baustein. Bei der Verwendung der Klasse kann es immer wieder zu Rückgriffen auf die Basisklasse(n) kommen.
Mit Vererbung schafft man Abhängigkeitsbeziehungen, die dem Modularisierungsgedanken nicht entsprechen. Man muss daher immer genau abwägen, ob man die Vorteile von Vererbung nutzen möchte (leichte Realisierbarkeit durch Rückgriff auf Gegebenes) oder ob man die Nachteile von Vererbung (keine Bausteine, die man autonom verwenden kann) vermeiden möchte.
Wir werden Vererbung im Folgenden bei der Entwicklung objektorientierter Modelle eher vermeiden.