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
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 :
- Créez une propriété
processoren utilisant la classeProcessor - Créez une propriété
memoryen utilisant la classeMemory - 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();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
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 Circle14Système de gestion de bibliothèque
Conception de la bibliothèqueClasse Book avec composition3Classes 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écapitulatif