Menu
Coddy logo textTech

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:

  1. Änderungen an Vehicle könnten SportsCar unerwartet beeinträchtigen
  1. Je länger die Vererbungskette wird, desto schwieriger wird es nachzuverfolgen, woher Methoden und Eigenschaften stammen
  1. Du wirst in „ist-ein“-Beziehungen gezwungen, die möglicherweise nicht flexibel genug sind
challenge icon

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:

  1. Erstelle die speaker- und mover-Komponenten im Robot constructor
  2. Verwende die Komponenten in den method:
    1. In greet(): Rufe this.speaker.speak("Hello!"); auf
    2. In walkForward(): Rufe this.mover.move("forward"); auf

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 forward
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-JavaScript-Compiler