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