Che cos'è il polimorfismo?
Fa parte della sezione Programmazione orientata agli oggetti del percorso JavaScript di Coddy. Lezione 35 di 56.
Il polimorfismo è un principio fondamentale della programmazione orientata agli oggetti che consente agli oggetti di classi diverse di rispondere allo stesso metodo in modi diversi.
In JavaScript, il polimorfismo si osserva più comunemente quando le classi figlie sovrascrivono i metodi delle classi genitrici.
Creiamo una semplice classe genitore con un metodo speak():
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound`;
}
}Ora creiamo una classe figlia che estende Animal:
class Dog extends Animal {
speak() {
return `${this.name} barks`;
}
}Ecco un'altra classe figlia:
class Cat extends Animal {
speak() {
return `${this.name} meows`;
}
}Ogni classe figlia implementa il metodo speak() in modo diverso. Questa è la polimorfia in azione!
Ora possiamo creare oggetti diversi e chiamare lo stesso metodo su ciascuno:
const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");
console.log(animal.speak()); // Some animal emette un suono
console.log(dog.speak()); // Rex abbaia
console.log(cat.speak()); // Whiskers miagolaTutti e tre gli oggetti rispondono al metodo speak(), ma ciascuno lo fa a modo proprio.
Sfida
Hai un sistema di notifiche con una classe genitore Notification e due classi figlie. Il tuo compito è aggiungere il metodo send(message) a ciascuna classe figlia, con implementazioni diverse.
- Nella classe
EmailNotification, il metodo dovrebbe restituire la stringa: "Sending '(message)' via Email" - Nella classe
SMSNotification, il metodo dovrebbe restituire la stringa: "Sending '(message)' via SMS"
Provalo tu
import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';
// Codice di test - non modificare
const email = new EmailNotification();
const sms = new SMSNotification();
console.log(email.send("Hello!")); // Dovrebbe usare send() di EmailNotification
console.log(sms.send("Hello!")); // Dovrebbe usare send() di SMSNotificationQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Oggetti e la keyword this
Ripasso rapido: oggettiAggiungere metodi agli oggettiCapire la keyword thisFunzioni costruttriciLa keyword newSfida di ripasso7Ereditarietà e parola chiave extends
EreditarietàLa relazione «è un»La parola chiave extendsIl metodo super()Ereditare proprietà e metodiSfida di ripasso13Composizione vs. ereditarietà
«Ha-un» vs. «è-un»I limiti dell’ereditarietà profondaCostruire oggetti2Organizzare il codice
Cosa sono i moduli?Esportare con exportImportare con importExport predefiniti vs. export nominati5Incapsulamento e accesso
IncapsulamentoCampi di classe pubblici e privatiMetodi privatiSfida di riepilogo8Organizzare il codice OOP
Organizzare le classi in moduli11Progetto: Un renderizzatore di forme
Configurazione: classe Shape ed esportazioneEreditarietà della classe CircleOverride e metodo areaContatore statico di Shape14Sistema di gestione della biblioteca
Progettare la bibliotecaClasse Book con composizioneValidazione dell'autore del libroEsercitati da solo: Compilatore JavaScript online