Vererbungsbeziehung
Die Vererbung ist eines der grundlegenden Konzepte der Objektorientierung und hat große Bedeutung in der Softwareentwicklung. Die Vererbung dient dazu, aufbauend auf existierenden Klassen (Oberklasse) neue Klassen (Unterklassen) zu schaffen, wobei die Beziehung zwischen ursprünglicher und neuer Klasse dauerhaft ist. Die Vererbung dient der Dokumentation von Ähnlichkeiten zwischen Klassen, was insbesondere in den frühen Phasen des Softwareentwurfs von Bedeutung ist.
Das folgende Entwurfsdiagramm zeigt eine Vererbungssituation, bei der die Unterklasse Sportauto und SUV Erweiterungen einer Basisklasse Auto darstellen.
classDiagram
SUV --|> Auto
Sportauto --|> Auto
class Auto {
geschwindigkeit: Zahl
farbe: Farbe
anzahlTueren: Zahl
kennzeichen: Text
beschleunigen()
bremsen()
umlackieren(neueFarbe: Farbe)
gibGeschwindigkeit(): Zahl
}
class SUV {
kofferraumOffen: Wahrheitswert
kofferraumOeffnen()
kofferraumSchliessen()
}
class Sportauto {
tiefergelegt: Wahrheitswert
tunen()
beschleunigen()
}
Übernehmen, ergänzen und überschreiben
Bei der Vererbung übernimmt die Unterklasse die Attribute und Methoden der Oberklasse.
Eine übernommene Methode kann dabei neu definiert (überschrieben) werden. Im Klassendiagramm ist zum Beispiel gezeigt, dass die Klasse Sportauto die Methode beschleunigen neu definiert.
Die Unterklasse kann um zusätzliche Attribute und Methoden erweitert werden. Im Klassendiagramm ist zum Beispiel gezeigt, dass die Klasse SUV ein neues Attribut kofferraumOffen besitzt.
Spezialisierung und Generalisierung
Wenn eine neue Oberklasse definiert wird, dann sprechen wir von einer Generalisierung.
Wird hingegen eine neue Unterklasse definiert, dann sprechen wir von einer Spezialisierung.
Überprüfe dich
- Gegeben ist folgendes Klassendiagramm (Link zum Mermaid-Live Editor). Modifiziere das Klassendiagramm so, dass das Konzept der Vererbung sinnvoll genutzt ist.
classDiagram
class Apfel {
groesse: Zahl
gewicht: Zahl
preis: Zahl
istSauer: Wahrheitswert
essen()
}
class Banane {
groesse: Zahl
gewicht: Zahl
preis: Zahl
herkunfsland: Wahrheitswert
essen()
}
classDiagram
Apfel --|> Frucht
Banane --|> Frucht
class Frucht {
groesse: Zahl
gewicht: Zahl
preis: Zahl
essen()
}
class Apfel {
istSauer: Wahrheitswert
}
class Banane {
herkunfsland: Text
}
- Es existieren die Klassen Fussballer, Turnerin und Judoka. Eine neue Klasse Sportlerin wird angelegt. Handlet es sich um eine Spezialisierung oder Generalisierung?
Generalisierung
