Menu
Coddy logo textTech

Les relations « has-a » vs « is-a »

Fait partie de la section Programmation Orientée Objet du Journey JavaScript de Coddy — leçon 47 sur 56.

En programmation orientée objet, il existe deux types principaux de relations entre les objets : « a un » (composition) et « est un » (héritage). Alors que l'héritage crée des hiérarchies parent-enfant, la composition construit des objets en combinant des composants plus petits et ciblés.

Commençons par comprendre la relation « est un » (is-a) à travers l'héritage :

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

// Dog « est un » Animal - relation d'héritage
class Dog extends Animal {
  bark() {
    console.log(`${this.name} says woof!`);
  }
}

Examinons maintenant la relation « a un » (has-a) à travers la composition :

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

// La voiture « a un » moteur - relation de composition
class Car {
  constructor() {
    this.engine = new Engine(); // Composition
  }
  
  startCar() {
    this.engine.start();
    console.log("Car is running");
  }
}

La différence clé :

  • « est un » (héritage) : Un Chien EST UN Animal
  • « a un » (composition) : Une Voiture A UN Moteur
challenge icon

Défi

On vous donne les classes de composants (Processor, Memory) et la majeure partie de la classe Computer. Votre tâche consiste à compléter le constructeur dans le fichier computer.js :

  1. Créez une propriété processor en utilisant la classe Processor
  2. Créez une propriété memory en utilisant la classe Memory
  3. Passez processorSpeed au constructeur de Processor et memorySize au constructeur de Memory

Aide-mémoire

En programmation orientée objet, il existe deux types principaux de relations entre les objets :

  • Relation « est un » (héritage) : crée des hiérarchies parent-enfant où une sous-classe étend une classe parente
  • Relation « a un » (composition) : construit des objets en combinant des composants plus petits et ciblés

Exemple d'héritage (« est un ») :

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

// Dog « est un » Animal
class Dog extends Animal {
  bark() {
    console.log(`${this.name} says woof!`);
  }
}

Exemple de composition (« a un ») :

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

// Car « a un » Engine
class Car {
  constructor() {
    this.engine = new Engine(); // Composition
  }
  
  startCar() {
    this.engine.start();
    console.log("Car is running");
  }
}

Essayez vous-même

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

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