Ho letto su questo di recente qui su SO (e non riesco a trovare il link in questo momento, ma è una di quelle "perché sono linguaggi dinamici bene?" I messaggi, e una grande risposta da parte S. Lott con molti commenti), e la risposta è:
Si potrebbe. Specialmente in Groovy, puoi definire interfacce in Java o Groovy e implementarle. Tuttavia, con la tipizzazione delle anatre (che consente Groovy ma consente anche tipi espliciti) molte persone direbbero "perché preoccuparsi?" La fonte è la sua documentazione, l'interfaccia è nella fonte, "usa la fonte" ecc.
Personalmente, questo mi fa impazzire: adoro i controlli in fase di compilazione (o davvero, dev-time) che Java fornisce io, ma questo è un altro dibattito. Se stai usando Groovy, è perché vuoi scrivere quel codice brillantemente conciso e chiaro che deriva dalla tipizzazione delle anatre. In tal caso, le interfacce devono essere evitate tranne ove necessario.
Dove sono necessari? Tra parti di un programma e nell'API pubblica per un programma (sebbene possano essere anche classi astratte). Altrimenti, direi che dovresti cercare di evitarli nelle lingue con dattilografia. Questo ti obbliga a scrivere i documenti sulle classi, o scrivere codice che sia così chiaro che è la stessa cosa.
Penso che questa sia una pratica terribile, TUTTAVIA questo fa parte del cambio di paradigma verso linguaggi dinamici.E penso che se si evita di separare l'interfaccia dall'implementazione abbastanza, capirai il "perché" dietro di esso. Ancora non lo faccio, anche se ha molto a che fare con il non ripetere il codice (mantenendo DRY).
Edit: avuto qualche chiarezza lontano dal computer :) Uno dei principali motivi di non separare l'interfaccia dall'implementazione è così che ci si allontana da una dipendenza da tipi. Nella scrittura delle anatre, come sai, non mi interessa se si tratta di un implementatore dell'interfaccia Vehicle
(ad esempio). Mi interessa solo se ha un metodo go
con 2 parametri. Quindi più lavori con le interfacce, più scrivi Java in Groovy ("puoi scrivere Fortran in qualsiasi lingua"). Questo dovrebbe essere evitato, in quanto le nuove lingue ti aprono a nuove cose.
Grazie mille. Un'ottima risposta Non li userò! –
@ Martin, grazie, ho aggiunto la mia risposta un po 'per spiegare meglio. –