Die Grenzen tiefer Vererbung
Teil des Abschnitts Objektorientierte Programmierung der JavaScript-Journey von Coddy. Lektion 48 von 56.
Obwohl inheritance nützlich ist, kann das Erstellen sehr tiefer inheritance-Hierarchien (parent → child → grandchild → great-grandchild) zu Problemen führen. Je tiefer die Kette ist, desto schwieriger wird es, den Code zu verstehen, zu warten und zu ändern.
Sehen wir uns an, was bei einer tiefen Vererbungskette passiert:
// Basisklasse
class Vehicle {
constructor(type) {
this.type = type;
this.isRunning = false;
}
start() {
this.isRunning = true;
console.log(`${this.type} started`);
}
}
// Erste Vererbungsebene
class Car extends Vehicle {
constructor(make, model) {
super("Car");
this.make = make;
this.model = model;
this.wheels = 4;
}
honk() {
console.log("Beep beep!");
}
}
// Zweite Vererbungsebene
class SportsCar extends Car {
constructor(make, model, topSpeed) {
super(make, model);
this.topSpeed = topSpeed;
}
race() {
this.start();
console.log(`Racing at ${this.topSpeed} mph!`);
}
}In diesem Beispiel befindet sich SportsCar zwei Vererbungsebenen tief. Dies kann zu mehreren Problemen führen:
- Änderungen an Vehicle könnten SportsCar unerwartet beeinträchtigen
- Je länger die Vererbungskette wird, desto schwieriger wird es nachzuverfolgen, woher Methoden und Eigenschaften stammen
- Du wirst in „ist-ein“-Beziehungen gezwungen, die möglicherweise nicht flexibel genug sind
Aufgabe
Vervollständige die Datei Robot.js, damit der Roboter funktionsfähig wird. Im Moment ist der Roboter erstellt, kann aber nichts tun.
Was in <strong>Robot.js</strong>zu tun ist:
- Erstelle die speaker- und mover-Komponenten im Robot constructor
- Verwende die Komponenten in den method:
- In
greet(): Rufethis.speaker.speak("Hello!");auf - In
walkForward(): Rufethis.mover.move("forward");auf
- In
Warum wir das tun: Dies ist composition – der Roboter wird durch das Kombinieren kleinerer Komponenten erstellt. Der Roboter has-a speaker (zum Sprechen) und has-a mover (zum Bewegen), anstatt diese Fähigkeiten durch inheritance zu erhalten.
Probier es selbst
import { Robot } from './Robot.js';
const myRobot = new Robot('Robo');
myRobot.greet(); // Sollte ausgeben: Saying: "Hello!"
myRobot.walkForward(); // Should output: Moving forwardDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Objekte & das this-Schlüsselwort
Kurze Wiederholung: ObjekteMethoden zu Objekten hinzufügenDas this-Schlüsselwort verstehenKonstruktorfunktionenDas new-SchlüsselwortWiederholungs-Challenge7Vererbung & das extends-Schlüsselwort
VererbungDie „ist-ein“-BeziehungDas extends-SchlüsselwortDie super()-MethodeVererben von Eigenschaften & MethodenWiederholungs-Challenge10Polymorphie
Was ist Polymorphie?Geerbte Methoden überschreibenVerwendung von superWiederholungs-Challenge13Komposition vs. Vererbung
Die "hat-ein"- vs. "ist-ein"-BeziehungDie Grenzen tiefer VererbungObjekte zusammenbauen2Code organisieren
Was sind Module?Exportieren mit exportImportieren mit importDefault- vs. benannte Exports5Kapselung & Zugriff
KapselungÖffentliche & private KlassenfelderPrivate MethodenWiederholungs-Herausforderung8OOP-Code strukturieren
Klassen in Modulen organisieren11Projekt: Ein Shape-Renderer
Setup: Shape-Klasse & ExportCircle-Klasse: VererbungOverriding & Area-MethodeStatischer Shape-Zähler14Bibliotheksverwaltungssystem
Entwurf der BibliothekBuch-Klasse mit KompositionValidierung der Buchautoren3Klassen & Objekte
Was ist eine Klasse?Instanzen erstellenEigenschaften und MethodenWiederholungs-Challenge6Projekt: Ein einfaches Bankkonto
Klasse BankAccountEinzahlungen und AuszahlungenKontostand als privates Feld9Statische Methoden & Eigenschaften
Klassenebene vs. InstanzebeneStatische EigenschaftenStatische HilfsmethodenWiederholungs-Challenge12Getter & Setter
Die Schlüsselwörter get und setBerechnete EigenschaftenValidierung und SeiteneffekteWiederholungs-Challenge15Abschluss-Herausforderungen
Spielfiguren-BuilderE-Commerce ProduktsystemUniversitäts-VerwaltungssystemSmart-Home-GerätesystemÜbe selbstständig: Online-JavaScript-Compiler