In der objektorientierten Programmierung sind Vererbung und Komposition zentrale Konzepte zur Code-Wiederverwendung und zum Entwurf komplexer Systeme. Beide Ansätze haben ihre spezifischen Anwendungsfälle, Vor- und Nachteile.
Vererbung ermöglicht es einer Klasse (abgeleitete Klasse),
Eigenschaften und Methoden einer anderen Klasse (Basisklasse) zu
übernehmen. In TypeScript wird dies mit dem
extends-Schlüsselwort erreicht:
class Animal {
move(): void {
console.log('Moving along...');
}
}
class Dog extends Animal {
bark(): void {
console.log('Woof! Woof!');
}
}Komposition kombiniert Objekte oder Klassen zu komplexeren Strukturen. Es basiert auf der “hat-ein”-Beziehung und bietet mehr Flexibilität als die starre “ist-ein”-Beziehung der Vererbung:
class Engine {
start(): void {
console.log('Engine started');
}
}
class Car {
private engine: Engine;
constructor() {
this.engine = new Engine();
}
start(): void {
this.engine.start();
}
}In der Praxis kann oft eine Kombination aus Vererbung und Komposition am sinnvollsten sein:
class Battery {
provideEnergy(): void {
console.log('Providing energy');
}
}
class ElectricCar extends Car {
private battery: Battery;
constructor() {
super();
this.battery = new Battery();
}
start(): void {
this.battery.provideEnergy();
super.start();
}
}In diesem Beispiel erweitert ElectricCar die Klasse
Car (Vererbung) und enthält zusätzlich ein
Battery-Objekt (Komposition).