Se sai guidare un'auto per pendolari a 4 porte, puoi anche guidare un camioncino. Se hai guidato un'auto con un motore a combustione, puoi anche guidare un'auto elettrica.

La forma e le dimensioni delle autovetture possono essere diverse da una all'altra. Anche il motore che fa funzionare quei veicoli potrebbe essere completamente diverso. Ma non importa al conducente.

Basta salire, allacciare le cinture, avviare il veicolo, innestare la marcia e guidare. Questo perché auto, camion e furgoni sono polimorfico.

Polimorfismo: abbatterlo

Diamo un'occhiata alla parola polimorfismo. Puoi suddividerlo in poli, metamorfosi, e ismo.

Poli significa molti, come poligono significa molti angoli. Se usato come sostantivo, a metamorfosi è una variante di una specie. e ismo può significare sistema

Quindi polimorfismo significa semplicemente un sistema di molte varianti. Tuttavia, questo non ti dice ancora molto su come viene utilizzato nella programmazione. Questo è il prossimo.

Se cammina come un'anatra... Perché gli oggetti polimorfici sono fantastici?

instagram viewer

Quando crei una classe nel codice che eredita da un'altra classe, stai vincolando la nuova classe a un contratto. Il contratto stabilisce che ogni variabile e funzione nel genitore sarà anche nel figlio.

Ogni veicolo ha un volante, pedali del gas e del freno e un segnale di svolta. Non è necessario aprire il cofano per guidare un'auto. L'importante è che sia una macchina.

La stessa cosa vale per le classi che ereditano da altre classi. Ecco un esempio in TypeScript:


classe Veicolo {
_engine privato: stringa;
_pneumatici privati: numero;
costruttore (motore: stringa = "combustione", pneumatici: numero = 4) {
this._engine = motore;
questo._pneumatici = pneumatici;
}
accelerare (velocità: numero) {
console.log("accelerando a una velocità di " + velocità);
}
freno (pressione: numero) {
console.log("applicando " + pressione + " pressione");
}
Girare a sinistra() {
console.log("svolta a sinistra");
}
Girare a destra() {
console.log("svolta a destra");
}
}
classe Auto estende Veicolo {
}
la classe Tesla estende l'auto {
costruttore() {
super("elettrico");
}
}

In questo esempio, c'è un Veicolo classe. Il Auto la classe eredita dal Veicolo classe. e Tesla eredita da Auto. Ora creiamo un paio di oggetti e osserviamoli.

let myCoupe: Car = new Vehicle();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
let mySedan: Vehicle = new Tesla();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft();
miaSedan.turnLeft();

Puoi vedere che abbiamo dichiarato myCoupé essere un Auto e mySedan essere un Veicolo. Poi abbiamo istanziato myCoupé come nuovo Veicolo e mySedan come nuovo Tesla. Se tu visita la sandbox TypeScript ed esegui il codice, vedrai che funziona senza errori. E si comporta come ti aspetteresti, in base al contratto.

In altre parole, tutti i veicoli possono svoltare a sinistra perché l'hanno ereditata dal Veicolo classe. Il compilatore sa che ogni figlio di Veicolo acconsentito al contratto. Quindi presuppone che tutto vada bene, indipendentemente dalle classi con cui gli oggetti sono stati digitati o istanziati.

Questo è talvolta chiamato "digitazione anatra". Il compilatore presume che se cammina come un'anatra e parla come un'anatra, potrebbe anche essere un'anatra. Quindi il compilatore non si preoccupa dei dettagli e tratta l'oggetto come un'anatra.

Il polimorfismo rende il tuo codice a prova di proiettile

Un altro vantaggio del contratto di polimorfismo è la garanzia che il tuo codice funzionerà. Se hai digitato fortemente tutte le tue variabili e ciò che ogni funzione restituisce, sai che ogni figlio corrisponderà sempre a variabili, funzioni e tipi.

Ciò significa che puoi aggiungere e modificare il codice nelle tue classi senza interrompere il tuo programma. Ogni oggetto che fa riferimento a a Veicolo l'oggetto otterrà sempre dati e funzionalità che soddisfano le aspettative, non importa quanto Auto i cambiamenti.

Il codice all'interno della funzione potrebbe non fornire i risultati corretti. Ma questo è un altro tipo di problema. Finché la funzione segue il contratto e restituisce il tipo di variabile previsto, non si verificherà un errore di decifrazione del codice.

Il polimorfismo è enorme, e ecco altri 10 principi di programmazione che dovresti conoscere.

Pratica il polimorfismo

  • Usa il link sandbox qui sopra per creare un Barca classe.
  • Istanzia un nuovo oggetto barca in modo che sia a Veicolo tipo, ma sembra ancora una barca.
  • Assicurati che la barca si comporti ancora come un veicolo.

Un ultimo esempio di polimorfismo

Il polimorfismo può essere un concetto difficile da comprendere inizialmente. Ma una volta capito, hai fatto un enorme passo avanti verso la comprensione di cosa sia veramente la programmazione orientata agli oggetti. Il concetto può sembrare ancora teorico, però. Quindi, ecco un solido esempio del mondo reale per aiutarti a vedere quanto sia utile.

Immagina di creare un'app Web che si connette a un database MySQL. Quindi il capo decide di passare a un database PostgreSQL. Significa che devi riscrivere tutte le tue chiamate al database?

No, non è così. Se la tua app utilizza a Accesso ai dati classe con sottoclassi che in realtà scherzano con i dati, sei fortunato. Il Accesso ai dati class definisce come la tua app interagisce con i dati, non come interagisce con il database.

Hai sottoclassi come MySQLAccess e PostgresQLAccess che fanno tutto il lavoro sporco. Ma se la tua app ha solo Accesso ai dati oggetti, puoi scambiare i database senza riscrivere una singola riga di codice dell'app.

CondividereTweetE-mail
Come organizzare il codice orientato agli oggetti con l'ereditarietà

Avere una programmazione orientata agli oggetti corretta significa che è necessario conoscere l'ereditarietà e come può semplificare la codifica e ridurre gli errori.

Leggi Avanti

Argomenti correlati
  • Programmazione
  • Programmazione
  • Programmazione orientata agli oggetti
Circa l'autore
Lee Nathan (19 Articoli Pubblicati)

Lee è un nomade a tempo pieno e un poliedrico con molte passioni e interessi. Alcune di queste passioni ruotano attorno alla produttività, allo sviluppo personale e alla scrittura.

Altro da Lee Nathan

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti