Qu'est-ce que le polymorphisme ?
Fait partie de la section Programmation Orientée Objet du Journey JavaScript de Coddy — leçon 35 sur 56.
Le polymorphisme est un principe fondamental de la programmation orientée objet qui permet à des objets de différentes classes de répondre à la même méthode de différentes manières.
En JavaScript, le polymorphisme est le plus souvent observé lorsque les classes enfants redéfinissent les méthodes des classes parents.
Créons une classe parente simple avec une méthode speak() :
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound`;
}
}Maintenant, créons une classe enfant qui étend Animal :
class Dog extends Animal {
speak() {
return `${this.name} barks`;
}
}Voici une autre classe enfant :
class Cat extends Animal {
speak() {
return `${this.name} meows`;
}
}Chaque classe enfant implémente la méthode speak() différemment. C'est le polymorphisme en action !
Nous pouvons maintenant créer différents objets et appeler la même méthode sur chacun d'eux :
const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");
console.log(animal.speak()); // Some animal fait un bruit
console.log(dog.speak()); // Rex aboie
console.log(cat.speak()); // Whiskers miauleLes trois objets répondent à la méthode speak(), mais chacun le fait à sa manière.
Défi
Vous avez un système de notification avec une classe parente Notification et deux classes enfants. Votre tâche consiste à ajouter la méthode send(message) à chaque classe enfant avec des implémentations différentes.
- Dans la classe
EmailNotification, la méthode doit retourner la chaîne de caractères : "Sending '(message)' via Email" - Dans la classe
SMSNotification, la méthode doit retourner la chaîne de caractères : "Sending '(message)' via SMS"
Aide-mémoire
Le polymorphisme permet à des objets de différentes classes de répondre à la même méthode de différentes manières. En JavaScript, cela est couramment réalisé lorsque des classes enfants surchargent des méthodes des classes parentes.
Créez une classe parente avec une méthode :
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound`;
}
}Les classes enfants peuvent surcharger la méthode parente avec leur propre implémentation :
class Dog extends Animal {
speak() {
return `${this.name} barks`;
}
}
class Cat extends Animal {
speak() {
return `${this.name} meows`;
}
}Chaque objet répond à la même méthode différemment :
const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");
console.log(animal.speak()); // Some animal makes a sound
console.log(dog.speak()); // Rex barks
console.log(cat.speak()); // Whiskers meowsEssayez vous-même
import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';
// Code de test - ne pas modifier
const email = new EmailNotification();
const sms = new SMSNotification();
console.log(email.send("Hello!")); // Devrait utiliser la méthode send() de EmailNotification
console.log(sms.send("Hello!")); // Devrait utiliser la méthode send() de SMSNotificationCette 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