Menu
CoddyTech

Die Grenzen tiefer Vererbung

Teil des Abschnitts Objektorientierte Programmierung der JavaScript-Journey von Coddy. Lektion 48 von 56.

Obwohl Vererbung nützlich ist, kann das Erstellen sehr tiefer Vererbungshierarchien (Elternklasse → Kindklasse → Enkelklasse → Urenkelklasse) zu Problemen führen. Je länger 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. Das kann zu mehreren Problemen führen:

  1. Änderungen an Vehicle könnten SportsCar unerwartet beeinträchtigen
  1. Wenn die Vererbungskette länger wird, ist es schwieriger nachzuvollziehen, woher Methoden und Eigenschaften stammen
  1. Du bist auf „ist-ein“-Beziehungen festgelegt, die möglicherweise nicht flexibel genug sind
challenge icon

Aufgabe

Vervollständige die Datei Robot.js, damit der Roboter funktioniert. Im Moment ist der Roboter zwar gebaut, kann aber nichts tun.

Was in Robot.js zu tun ist:

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

Warum wir das tun: Das ist Komposition – der Roboter wird aus kleineren Komponenten zusammengesetzt. Der Roboter hat einen Lautsprecher (zum Sprechen) und hat eine Bewegungskomponente (zum Bewegen), statt diese Fähigkeiten zu erben.

Probier es selbst

import { Robot } from './Robot.js';

const myRobot = new Robot('Robo');

myRobot.greet();     // Sollte ausgeben: Saying: "Hello!"
myRobot.walkForward(); // Sollte ausgeben: 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