"Ciao, Amigo! Sono io—di nuovo. Voglio darti un altro punto di vista sulle interfacce. Vedi, la maggior parte delle volte una classe è un modello di un particolare oggetto. Al contrario, le interfacce sono più simili alle abilità di un oggetto o ruoli, piuttosto che l'oggetto stesso."
Ad esempio, cose come automobili, biciclette, motociclette e ruote sono meglio rappresentate come classi e oggetti. Ma le loro capacità, come «so muovermi», «so trasportare persone» e «so parcheggiare», sono meglio rappresentate come interfacce. Dai un'occhiata a questo esempio:
codice java | Descrizione |
---|---|
|
Corrisponde alla capacità di muoversi. |
|
Corrisponde alla capacità di muoversi. |
|
Corrisponde alla capacità di trasportare merci. |
|
Una classe «ruota». Ha la capacità di muoversi. |
|
Una classe «macchina». Ha la capacità di muoversi, essere guidato da una persona e trasportare merci. |
|
Una lezione di «skateboard». Ha la capacità di muoversi ed essere controllato da una persona. |
Le interfacce semplificano notevolmente la vita del programmatore. I programmi molto spesso hanno migliaia di oggetti, centinaia di classi e solo un paio di dozzine di interfacce (ruoli). Ci sono pochi ruoli, ma possono essere combinati in molti modi (classi).
Il punto è che non devi scrivere codice che definisce l'interazione con ogni altra classe. Tutto quello che devi fare è interagire con i ruoli (interfacce).
Immagina di essere un costruttore robotico. Hai dozzine di robot subordinati e ognuno di loro può avere più abilità. Supponiamo che tu debba finire urgentemente di costruire un muro. Basta prendere tutti i robot che hanno la capacità di "costruire" e dire loro di costruire il muro. Non ti interessa davvero quali robot lo fanno. Lascia che sia un annaffiatoio robotico. Se sa costruire, lascia che costruisca.Ecco come apparirebbe nel codice:
codice java | Descrizione |
---|---|
|
Capacità di «costruire un muro». Comprende il comando «costruisci un muro» (ha il metodo appropriato). |
|
Robot che hanno questa capacità/abilità.
Un annaffiatoio non può costruire un muro (non implementa l'interfaccia WallBuilder). |
|
Come diamo il comando di costruire un muro? |
"È incredibilmente interessante. Non avrei mai immaginato che le interfacce potessero essere un argomento così interessante."
"E poi alcuni! Insieme al polimorfismo, è assolutamente strabiliante."
GO TO FULL VERSION