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’inheritance soit utile, la création de hiérarchies d’inheritance très profondes (parent → enfant → petit-enfant → arrière-petit-enfant) peut entraîner des problèmes. Plus la chaîne est profonde, plus il devient difficile de comprendre, de maintenir et de modifier le code.
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 l’héritage. Cela peut entraîner plusieurs problèmes :
- Les modifications apportées à Vehicle peuvent inopinément casser SportsCar
- À mesure que la chaîne d’
inheritances’allonge, il devient plus difficile de suivre l’origine des méthodes et des propriétés
- Tu es contraint par des relations « is-a » qui pourraient ne pas être assez flexibles
Défi
Complétez le fichier Robot.js pour rendre le robot fonctionnel. Pour le moment, le robot est construit, mais il ne peut rien faire.
À faire dans <strong>Robot.js</strong> :
- Créez les composants du haut-parleur et du module de déplacement dans le constructeur Robot
- Utilisez les composants dans les méthodes :
- Dans
greet(): appelezthis.speaker.speak("Hello!"); - Dans
walkForward(): appelezthis.mover.move("forward");
- Dans
Pourquoi faisons-nous cela : Il s'agit de composition : le robot est construit en combinant des composants plus petits. Le robot possède un haut-parleur (pour parler) et possède un module de déplacement (pour se déplacer), plutôt que 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(); // Should output: Moving forwardCette 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
1Objets et le mot-clé this
Révision rapide : Les objetsAjouter des méthodes aux objetsComprendre le mot-clé thisFonctions constructeursLe mot-clé newDéfi récapitulatif7L'héritage et le mot-clé extends
L'héritageLa relation « est un »Le mot-clé extendsLa méthode super()Hériter des propriétés et méthodesDéfi récapitulatif10Polymorphisme
Qu'est-ce que le polymorphisme ?Redéfinition de méthodes héritéesUtiliser superDéfi récapitulatif13Composition vs Héritage
Les relations « has-a » vs « is-a »Les limites de l'héritage profondConstruction d'objets2Organisation du code
Qu'est-ce qu'un module ?Exporter avec exportImporter avec importExports par défaut vs nommés5Encapsulation & Accès
EncapsulationChamps de classe publics et privésMéthodes privéesDéfi récapitulatif8Organisation du code POO
Organiser les classes en modules11Projet : Un moteur de rendu de formes
Configuration : Classe Shape et ExportationHéritage de la classe CircleRedéfinition et méthode AreaCompteur de formes statique14Système de gestion de bibliothèque
Conception de la bibliothèqueClasse Book avec compositionValidation de l'auteur du livre3Classes et Objets
Qu'est-ce qu'une classe ?Créer des instancesPropriétés et méthodesDéfi récapitulatif9Méthodes et propriétés statiques
Niveau classe vs Niveau instancePropriétés statiquesMéthodes utilitaires statiquesDéfi récapitulatifEntraînez-vous par vous-même : Compilateur JavaScript en ligne