"Ciao, Amigo! Finalmente siamo arrivati ​​a qualcosa di veramente interessante. Oggi ti parlerò dell'ereditarietà multipla . L'ereditarietà multipla è davvero uno strumento molto affascinante e potente. E se non fosse per diversi problemi, allora Java supporterebbe l'ereditarietà multipla delle classi. Ma non è così, quindi dobbiamo accontentarci dell'ereditarietà multipla delle interfacce . Il che è anche piuttosto fantastico."

Ereditare più interfacce - 1

Immagina di scrivere un gioco per computer. E i suoi personaggi (i tuoi oggetti) devono comportarsi in modi molto complessi: camminare su una mappa, raccogliere oggetti, eseguire missioni, comunicare con altri personaggi, uccidere qualcuno, salvare qualcun altro. Diciamo che sei stato in grado di dividere tutti gli oggetti in 20 categorie. Ciò significa che, se sei fortunato, sarai in grado di cavartela con solo 20 classi per definire i tuoi oggetti. Ma ecco il trucco: quante forme uniche di interazione avranno questi oggetti? Ogni tipo di oggetto può avere interazioni uniche con altri 20 tipi di oggetti (contando anche le interazioni con oggetti dello stesso tipo). In altre parole, dovrai scrivere codice per 20 x 20 = 400 interazioni! E se il numero di tipi di oggetti univoci non è 20, ma 100, allora il numero di interazioni potrebbe essere 10.000!

"Whoa! Ora capisco perché la programmazione è un lavoro così difficile."

"È semplice. Grazie a molte astrazioni. E non da poco grazie all'ereditarietà multipla delle interfacce."

Spesso possiamo semplificare l'interazione con gli oggetti se i ruoli e/o le abilità interagiscono piuttosto che gli oggetti stessi. E come già sappiamo, le abilità possono essere facilmente aggiunte a una classe quando implementa un'interfaccia.

Quando scrivono un programma di grandi dimensioni, gli sviluppatori di solito lo fanno fin dall'inizio:

1) Identificare tutte le abilità/ruoli.

2) Definire l'interazione tra questi ruoli.

3) Quindi assegna semplicemente i ruoli a tutte le classi.

"Forse un esempio?"

"Certo. Diamo un'occhiata ai ruoli nel cartone animato «Tom e Jerry»."

codice java Descrizione
interface Moveable
{}
— Ruolo/capacità di muoversi.
interface Eatable
{}
— Ruolo/capacità di essere mangiato.
interface Eat
{}
— Ruolo/capacità di mangiare qualcuno.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Tom è un gatto che ha tre ruoli:
1) Può muoversi
2) Può mangiare qualcuno
3) Può essere mangiato da qualcuno (un cane)
class Jerry extends Mouse implements Moveable, Eatable
{}
Jerry è un topo che ha due ruoli:
1) Può muoversi
2) Può essere mangiato da qualcuno
class Killer extends Dog implements Moveable, Eat
{}
Killer è un cane con due ruoli: 1) Può muoversi 2) Può mangiare qualcuno

Conoscendo solo questi tre ruoli (interfacce), puoi scrivere un programma e descrivere la corretta interazione tra questi ruoli. Ad esempio, un oggetto inseguirà (tramite l'interfaccia mobile) dietro a «quello che puoi mangiare» e scapperà da «colui che può mangiarti». E tutto questo senza conoscere oggetti specifici. Se aggiungi più oggetti (classi) al programma e mantieni questi ruoli, funzionerà comunque magnificamente, controllando il comportamento dei tuoi oggetti.