Qual è il vero uso delle interfacce in Java? Cosa si intende per programmazione su interfacce?
Ho sentito queste cose diverse volte ma non so cosa sia e perché sia usato.
Qual è il vero uso delle interfacce in Java? Cosa si intende per programmazione su interfacce?
Ho sentito queste cose diverse volte ma non so cosa sia e perché sia usato.
Un giorno, un capo programmatore è stato incaricato dal suo capo di scrivere un'applicazione per analizzare i dati aziendali e condensare tutto in bei report con metriche, grafici e tutto il resto. Il capo gli ha dato un file XML con l'osservazione "ecco alcuni dati aziendali di esempio".
Il programmatore ha iniziato la codifica. Alcune settimane dopo sentì che le metriche, i grafici e le cose erano abbastanza per soddisfare il capo e presentò il suo lavoro. "È fantastico", ha detto il capo, "ma può anche mostrare i dati aziendali da questo database SQL che abbiamo?"
Il programmatore è tornato alla codifica. C'era il codice per leggere i dati aziendali da XML sparsi in tutta la sua applicazione. Ha riscritto tutti quei frammenti, avvolgendoli con una condizione "se":
if (dataType == "XML")
{
... read a piece of XML data ...
}
else
{
.. query something from the SQL database ...
}
Quando è stato presentato con la nuova iterazione del software, il capo ha risposto: "È grandioso, ma può anche riportare dati aziendali da questo servizio web?" Ricordando tutte quelle noiose dichiarazioni se avrebbe dovuto riscrivere ANCORA, il programmatore si infuriò. "Prima xml, quindi SQL, ora i servizi Web. Qual è la vera fonte dei dati aziendali?"
Il capo ha risposto: "Tutto ciò che può fornirlo"
Si programma su un'interfaccia perché è più facile da gestire. L'interfaccia incapsula il comportamento della classe sottostante. In questo modo, la classe è una scatola nera. Tutta la tua vita reale è la programmazione di un'interfaccia. Quando si utilizza un televisore, un'auto, uno stereo, si agisce sulla sua interfaccia, non sui dettagli dell'implementazione e si presume che se l'implementazione cambia (ad esempio, motore diesel o gas), l'interfaccia rimane la stessa. La programmazione su un'interfaccia consente di preservare il proprio comportamento quando i dettagli non distruttivi vengono modificati, ottimizzati o corretti. Questo semplifica anche il compito di documentare, imparare e usare.
Inoltre, programmare un'interfaccia ti consente di delineare il comportamento del tuo codice prima ancora di scriverlo. Ti aspetti che una classe faccia qualcosa. Puoi testare questo qualcosa anche prima di scrivere il codice reale che lo fa. Quando la tua interfaccia è pulita e completa e ti piace interagire con essa, puoi scrivere il codice reale che fa le cose.
Un'interfaccia è un semplice contratto.
L'interfaccia definisce i metodi e puoi chiamare i metodi su qualsiasi oggetto che implementa questa interfaccia. Non importa quale oggetto sia.
Anche un oggetto può implementare più interfacce e quindi è possibile vederlo come implementazione di diversi contratti.
Programmando contro le interfacce non dipendi da una determinata classe e puoi sostituire l'implementazione senza cambiare il resto del codice.
Ad esempio:
Se utilizzi List
nella tua applicazione, puoi passare tra LinkedList
e ArrayList
senza modificare il codice.
Leggi altre domande sui tag java interfaces