Sobes.tech
Junior

Was sind die Unterschiede zwischen Vererbung und Komposition in der objektorientierten Programmierung?

sobes.tech KI

Antwort von AI

Vererbung:

  • Beziehung "ist ein" (is-a).
  • Die Kindklasse erbt Felder und Methoden der Elternklasse.
  • Wird verwendet, um spezialisierte Versionen bestehender Klassen zu erstellen.
  • Kann zu starren Hierarchien und Problemen mit Mehrfachvererbung führen.

Komposition:

  • Beziehung "hat" (has-a).
  • Die Klasse enthält Instanzen anderer Klassen als ihre Felder.
  • Delegiert die Ausführung von Aufgaben an die enthaltenen Objekte.
  • Bietet Flexibilität und die Möglichkeit, Komponenten zu ersetzen.

Beispiel in Java:

// Vererbung
class Vehicle { // Basisklasse
    void start() { /* ... */ }
}

class Car extends Vehicle { // Erbt von Vehicle
    // Spezifische Methoden von Car
}

// Komposition
class Engine { // Baustein
    void start() { /* ... */ }
}

class AnotherCar { // Klasse, die Komposition nutzt
    private Engine engine; // Enthält eine Instanz von Engine

    AnotherCar(Engine engine) {
        this.engine = engine;
    }

    void start() {
        engine.start(); // Delegierung
    }
}

Unterschiede können in Form einer Tabelle dargestellt werden:

Kriterium Vererbung Komposition
Beziehung "ist ein" (is-a) "hat" (has-a)
Starrheit Starrer Flexibler
Wiederverwendung Durch Klassenhierarchien Durch Objektinstanzen
Verhaltensänderung Überschreiben von Methoden Austausch der enthaltenen Objekte
Anwendung Spezialisierung, Erweiterung der Funktionalität Aggregation, Zusammenbau aus Teilen

Komposition ist in den meisten Fällen der Vorzug vor Vererbung, um größere Flexibilität und geringere Abhängigkeit zwischen Klassen zu erreichen.