Menu
Coddy logo textTech

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 miaule

Les trois objets répondent à la méthode speak(), mais chacun le fait à sa manière.

challenge icon

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.

  1. Dans la classe EmailNotification, la méthode doit retourner la chaîne de caractères : "Sending '(message)' via Email"
  2. 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 meows

Essayez 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 SMSNotification
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