JavaRush /Java Blog /Random-IT /Esercitazioni sull'uso del polimorfismo

Esercitazioni sull'uso del polimorfismo

Pubblicato nel gruppo Random-IT
Ciao! Oggi terminiamo una serie di conferenze sui principi dell'OOP . In questa lezione parleremo di polimorfismo. Pratica dell'uso del polimorfismo - 1Il polimorfismo è la capacità di trattare più tipi come se fossero dello stesso tipo. In questo caso il comportamento degli oggetti sarà diverso a seconda della tipologia a cui appartengono. Diamo un'occhiata a questa affermazione in modo più dettagliato. Cominciamo con la prima parte: "la capacità di lavorare con più tipi come se fossero dello stesso tipo". Come possono tipi diversi essere la stessa cosa? Sembra un po' strano :/ In realtà è semplice. Ad esempio, questa situazione si verifica con il normale utilizzo dell'eredità. Vediamo come funziona. Diciamo di avere una semplice classe genitore Catcon un unico metodo run()- "run":
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
Ora creiamo tre classi che ereditano da Cat: Lion, Tigere Cheetah, che denotano leone, tigre e ghepardo.
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Лев бежит со speedю 80 км/ч");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Тигр бежит со speedю 60 км/ч");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Гепард бежит со speedю до 120 км/ч");
   }
}
Quindi abbiamo 3 classi. Simuliamo una situazione in cui possiamo lavorare con loro come se fossero la stessa classe. Immaginiamo che uno dei nostri gatti sia malato e abbia bisogno dell'aiuto del dottor Aibolit. Proviamo a creare una classe Aibolitin grado di trattare leoni, tigri e ghepardi.
public class Aibolit {

   public void healLion(Lion lion) {

       System.out.println("Лев здоров!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Тигр здоров!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Гепард здоров!");
   }
}
Sembrerebbe che il problema sia risolto: la classe è scritta e pronta per l'uso. Ma cosa faremo se vogliamo espandere il nostro programma? Ora abbiamo solo 3 specie: leoni, tigri e ghepardi. Ma nel mondo esistono più di 40 specie di gatti. Immagina cosa succederà se aggiungiamo al programma lezioni separate per i gatti di Pallas, i giaguari, i Maine Coon, i gatti domestici e tutti gli altri. Pratica dell'uso del polimorfismo - 2Il programma stesso, ovviamente, funzionerà, ma la classe Aibolitdovrà aggiungere costantemente nuovi metodi per trattare ogni tipo di gatto e, di conseguenza, raggiungerà dimensioni senza precedenti. È qui che entra in gioco la proprietà del polimorfismo: "la capacità di lavorare con diversi tipi come se fossero dello stesso tipo". Non abbiamo bisogno di creare innumerevoli metodi che facciano la stessa cosa: curare il gatto. Un metodo sarà sufficiente per tutti i casi contemporaneamente:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
   }
}
healCat()Possiamo passare sia oggetti Lionche Tigeroggetti al metodo Cheetah: sono tutti Cat:
public class Main {

   public static void main(String[] args) {

       Aibolit aibolit = new Aibolit();

       Lion simba = new Lion();
       Tiger sherekhan = new Tiger();
       Cheetah chester = new Cheetah();

       aibolit.healCat(simba);
       aibolit.healCat(sherekhan);
       aibolit.healCat(chester);
   }
}
Uscita console:

Пациент здоров!
Пациент здоров!
Пациент здоров!
Ecco come la nostra classe Айболитpuò lavorare con tipi diversi come se fossero dello stesso tipo. Affrontiamo ora la seconda parte: "in questo caso il comportamento degli oggetti sarà diverso a seconda della tipologia a cui appartengono". Anche qui tutto è semplice. In natura tutti i gatti corrono in modo diverso. Come minimo, la loro velocità di corsa è diversa. Tra i nostri tre animali domestici, il ghepardo è il più veloce, mentre la tigre e il leone corrono più lenti. Cioè, il loro comportamento è diverso. Il polimorfismo non solo ci dà la possibilità di utilizzare tipi diversi come se fossero uno solo. Allo stesso tempo, ci permette di non dimenticare le loro differenze e di preservare il comportamento specifico di ciascuno di essi. Questo può essere capito con questo esempio. Diciamo che dopo una convalescenza riuscita, i nostri gatti hanno deciso di correre un po' in giro per festeggiare. Aggiungiamo questo alla nostra classe Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
Proviamo a eseguire lo stesso codice per trattare tre animali:
public static void main(String[] args) {

   Aibolit aibolit = new Aibolit();

   Lion simba = new Lion();
   Tiger sherekhan = new Tiger();
   Cheetah chester = new Cheetah();

   aibolit.healCat(simba);
   aibolit.healCat(sherekhan);
   aibolit.healCat(chester);
}
Ed ecco come sarà il risultato:

Пациент здоров!
Лев бежит со speedю 80 км/ч
Пациент здоров!
Тигр бежит со speedю 60 км/ч
Пациент здоров!
Гепард бежит со speedю до 120 км/ч
Qui vediamo chiaramente che il comportamento specifico dei nostri oggetti è stato preservato, anche se abbiamo passato tutti e tre gli animali in un metodo, “generalizzando” ciascuno di essi a Cat. Grazie al polimorfismo, Java ricorda perfettamente che non si tratta solo di tre gatti, ma di un leone, una tigre e un ghepardo, che corrono in modo diverso. Questo è il vantaggio principale dell'utilizzo del polimorfismo: flessibilità . Quando dobbiamo creare alcune funzionalità comuni a molte tipologie, leoni, tigri e ghepardi si trasformano semplicemente in “gatti”. Tutti gli animali sono diversi, ma in alcune situazioni un gatto è un gatto, non importa a quale specie appartiene :) Ecco il video di conferma.
Quando questa “generalizzazione” non è richiesta, e al contrario abbiamo bisogno che il comportamento delle specie sia diverso, ogni tipo si comporta diversamente. Grazie al polimorfismo, crei un'unica interfaccia (insieme di metodi) per un'ampia gamma di classi. Per questo motivo, la complessità dei programmi è ridotta. Anche se espandessimo il programma a 40 tipi di gatti, avremmo comunque l'interfaccia più semplice possibile: un metodo run()per tutti i 40 gatti.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION