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.