Informatik

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

  1. 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
    }
  1. Es existieren die Klassen Fussballer, Turnerin und Judoka. Eine neue Klasse Sportlerin wird angelegt. Handlet es sich um eine Spezialisierung oder Generalisierung?

Generalisierung

Vererbungsbeziehung