JavaRush /Java Blog /Random-IT /Cosa sono le interfacce
fog
Livello 18

Cosa sono le interfacce

Pubblicato nel gruppo Random-IT
Un'interfaccia è un contratto (accordo) pubblico e generalmente accettato che descrive un comportamento. A cosa servono? Ad esempio, supponiamo di avere un collegamento che punta a un elenco di stringhe. Diciamo che molti elementi vengono aggiunti a questo elenco all'inizio e quindi l'intero elenco viene elaborato una volta. Diciamo che decidiamo di seguire la nota raccomandazione e di utilizzare la classeArrayList:
ArrayList<String> list = new ArrayList<>();
Abbiamo scritto un comportamento del programma in 100.500 righe di codice che utilizzava questo elenco di stringhe e utilizzava metodi specifici della classe per ottimizzare le prestazioni ArrayList. Ad esempio GuaranteeCapacity() . Finché le righe vengono aggiunte alla fine dell'elenco, tutto funziona correttamente e rapidamente. Ma ora abbiamo bisogno di riorientare il nostro programma verso un tipo di lavoro leggermente diverso, in cui le righe vengono aggiunte principalmente all'inizio dell'elenco. Per questo tipo di carico è molto più adatto LinkedList. Ma se vogliamo tradurre su rotaie il nostro programma di 100.500 righe di codice LinkedList, allora dovremo trovare ed eliminare l'uso di ArrayListmetodi specifici, magari in alcuni punti modificando notevolmente la logica delle singole sezioni del programma. Se utilizzassimo solo i metodi disponibili sia in ArrayList, che in LinkedList, non dovremmo farlo. Potremmo semplicemente cambiare una riga di codice: la dichiarazione della lista:
LinkedList<String> list = new LinkedList<>();
Possiamo notare che sarebbe più conveniente collocare la dichiarazione dei metodi comuni per queste classi in una classe antenata, possibilmente astratta, ad esempio AbstractList. In questo caso, potremmo dichiarare la nostra lista in questo modo:
AbstractList<String> list = new ArrayList<>();
E potremmo cambiare rapidamente l'implementazione in questo modo:
AbstractList<String> list = new LinkedList<>();
Ma in questo caso le classi che possiamo utilizzare nel nostro programma sono limitate ai soli discendenti della classe AbstractList, anche se esistono classi più adatte che non sono discendenti della classe AbstractList, ma hanno gli stessi metodi con lo stesso comportamento. Cosa dovrei fare? Questo è il motivo per cui sono state inventate le interfacce . Un'interfaccia è una convenzione su un insieme di metodi e il loro comportamento a cui possono impegnarsi classi completamente indipendenti, consentendo a ciascuno di essi di essere referenziato da un singolo riferimento. Ad esempio in questo modo:
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
Anche se AnotherListClassle classi non hanno classi antenati comuni, ArrayListad eccezione di . Un buon esempio di interfaccia è lo sterzo di un'auto: un'auto ha un volante, pedali e un cambio. Nella stragrande maggioranza delle automobili, questi elementi seguono la stessa convenzione di comportamento. Ad esempio, se giri il volante in senso antiorario, l'auto girerà a sinistra anziché accelerare, indipendentemente dalla marca. Se sai come utilizzare questi controlli, potrai gestire facilmente qualsiasi auto, indipendentemente dal modello, dall'anno, dalla marca o dal tipo di motore. Inoltre, si può immaginare una situazione in cui un tipo di trasporto completamente diverso (ad esempio un'astronave) abbia la stessa interfaccia di controllo delle automobili. Se tu, sapendo come guidare un'auto, ti ritrovi al posto di pilotaggio di una nave del genere, sarai in grado di evitare di perderti in questa situazione. Ripetiamo ancora una volta:LinkedListObject
  • Un'interfaccia è un contratto (accordo) sul comportamento.
  • Molte classi, anche quelle non legate per ereditarietà, possono dichiarare di accettare di rispettare questo contratto (implementazione dell'interfaccia).
  • Posizionare la descrizione del comportamento in un'interfaccia separata è molto conveniente, poiché aumenta la flessibilità del codice, consentendo di cambiare l'implementazione (classe che implementa l'interfaccia) dell'interfaccia in classi non correlate per ereditarietà.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION