Menu
Coddy logo textTech

Die "hat-ein"- vs. "ist-ein"-Beziehung

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

In der objektorientierten Programmierung gibt es zwei Hauptarten von Beziehungen zwischen Objekten: „has-a“ (Komposition) und „is-a“ (Vererbung). Während Vererbung Eltern-Kind-Hierarchien erstellt, baut die Komposition Objekte auf, indem sie kleinere, fokussierte Komponenten kombiniert.

Lassen Sie uns zunächst die „is-a“-Beziehung durch Vererbung verstehen:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  eat() {
    console.log(`${this.name} is eating.`);
  }
}

// Dog „is-a“ Animal – Vererbungsbeziehung
class Dog extends Animal {
  bark() {
    console.log(`${this.name} says woof!`);
  }
}

Schauen wir uns nun die „hat-ein“-Beziehung durch Komposition an:

class Engine {
  start() {
    console.log("Engine started");
  }
}

// Auto „hat-einen“ Motor - Kompositionsbeziehung
class Car {
  constructor() {
    this.engine = new Engine(); // Komposition
  }
  
  startCar() {
    this.engine.start();
    console.log("Car is running");
  }
}

Der entscheidende Unterschied:

  • "is-a" (Vererbung): Ein Hund IST EIN Tier
  • "has-a" (Komposition): Ein Auto HAT EINEN Motor
challenge icon

Aufgabe

Dir werden die Komponentenklassen (Processor, Memory) und der Großteil der Computer-Klasse zur Verfügung gestellt. Deine Aufgabe ist es, den Konstruktor in der Datei computer.js zu vervollständigen:

  1. Erstelle eine processor-Eigenschaft unter Verwendung der Processor-Klasse
  2. Erstelle eine memory-Eigenschaft unter Verwendung der Memory-Klasse
  3. Übergib processorSpeed an den Processor-Konstruktor und memorySize an den Memory-Konstruktor

Spickzettel

In der objektorientierten Programmierung gibt es zwei Hauptarten von Beziehungen zwischen Objekten:

  • "is-a"-Beziehung (Vererbung): Erstellt Eltern-Kind-Hierarchien, bei denen eine Unterklasse eine Elternklasse erweitert
  • "has-a"-Beziehung (Komposition): Baut Objekte durch die Kombination kleinerer, fokussierter Komponenten auf

Beispiel für Vererbung ("is-a"):

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  eat() {
    console.log(`${this.name} is eating.`);
  }
}

// Dog "ist-ein" Animal
class Dog extends Animal {
  bark() {
    console.log(`${this.name} says woof!`);
  }
}

Beispiel für Komposition ("has-a"):

class Engine {
  start() {
    console.log("Engine started");
  }
}

// Car "hat-ein" Engine
class Car {
  constructor() {
    this.engine = new Engine(); // Komposition
  }
  
  startCar() {
    this.engine.start();
    console.log("Car is running");
  }
}

Probier es selbst

import { Computer } from './computer.js';

const myComputer = new Computer(3.5, 16);
myComputer.start();
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