Menu
CoddyTech

Les limites de l'héritage profond

Fait partie de la section Programmation Orientée Objet du Journey JavaScript de Coddy. Leçon 48 sur 56.

Bien que l’héritage soit utile, la création de hiérarchies d’héritage très profondes (parent → enfant → petit-enfant → arrière-petit-enfant) peut entraîner des problèmes. Plus la chaîne est profonde, plus le code devient difficile à comprendre, à maintenir et à modifier.

Voyons ce qui se passe avec une chaîne d’héritage profonde :

// Classe de base
class Vehicle {
  constructor(type) {
    this.type = type;
    this.isRunning = false;
  }
  
  start() {
    this.isRunning = true;
    console.log(`${this.type} started`);
  }
}

// Premier niveau d’héritage
class Car extends Vehicle {
  constructor(make, model) {
    super("Car");
    this.make = make;
    this.model = model;
    this.wheels = 4;
  }
  
  honk() {
    console.log("Beep beep!");
  }
}

// Deuxième niveau d’héritage
class SportsCar extends Car {
  constructor(make, model, topSpeed) {
    super(make, model);
    this.topSpeed = topSpeed;
  }
  
  race() {
    this.start();
    console.log(`Racing at ${this.topSpeed} mph!`);
  }
}

Dans cet exemple, SportsCar se trouve à deux niveaux de profondeur dans la hiérarchie d’héritage. Cela peut entraîner plusieurs problèmes :

  1. Les modifications apportées à Vehicle pourraient casser SportsCar de manière inattendue
  1. À mesure que la chaîne d’héritage s’allonge, il devient plus difficile de suivre l’origine des méthodes et des propriétés
  1. Tu es contraint à des relations « est-un » qui ne sont peut-être pas assez flexibles
challenge icon

Défi

Complète le fichier Robot.js pour rendre le robot fonctionnel. Pour l’instant, le robot est construit, mais il ne peut rien faire.

À faire dans Robot.js :

  1. Crée les composants speaker et mover dans le constructeur de Robot
  2. Utilise les composants dans les méthodes :
    1. Dans greet() : appelle this.speaker.speak("Hello!");
    2. Dans walkForward() : appelle this.mover.move("forward");

Pourquoi faire cela : c’est de la composition : le robot est construit en combinant des composants plus petits. Le robot possède un speaker (pour parler) et possède un mover (pour se déplacer), au lieu d’hériter de ces capacités.

Essayez vous-même

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

const myRobot = new Robot('Robo');

myRobot.greet();     // Devrait afficher : Saying: "Hello!"
myRobot.walkForward(); // Devrait afficher : Moving forward
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur JavaScript en ligne