Dovrebbe essere definito ogni metodo in una classe in un'interfaccia implementata?

7

Riesco a vedere come le interfacce sono molto utili per forzare le diverse classi ad avere la stessa funzionalità.

Ma ci sono anche azioni legate a una classe specifica (come l'aggiornamento di una variabile univoca che viene utilizzata per implementare un metodo da un'interfaccia).

Devo scrivere una nuova interfaccia per implementare i metodi che non sono coperti dall'interfaccia? In caso contrario, come mantenere una buona panoramica dei metodi che sono univoci per una classe?

PS: il segno di duplicazione @ gnat: non sto chiedendo se ogni classe dovrebbe implementare e interfacciare. Sto chiedendo se ogni metodo dovrebbe essere definito in un'interfaccia. (o come organizzarli, quindi è chiaro che quei metodi sono unici per la classe)

    
posta RMo 10.04.2018 - 18:12
fonte

1 risposta

7

Direi di no. Non sono sicuro di quale lingua sia, ma prima di tutto, alcuni (più?) Metodi su una classe dovrebbero essere privati. Sono dettagli di implementazione e non dovrebbero essere esposti affatto.

Quindi, se assumiamo che si tratta solo di metodi pubblici, continuo a sostenere che la risposta è: no. Il punto di un'interfaccia è definire i metodi che devono essere utilizzati in contesti in cui la classe di implementazione non è nota e non ha importanza. Mentre sarebbe possibile creare interfacce 'filler' che specificano metodi specifici di implementazione, questo è semplicemente cruft a meno che non ci sia un codice che faccia riferimento a quell'interfaccia in modo agnostico di implementazione. Questo sicuramente si tradurrà in qualcosa che si approssima ad avere un'interfaccia per classe che è qualcosa che considero rumore.

Ad esempio, supponiamo di aver definito un'interfaccia di dizionario semplice e di sola lettura da utilizzare in un algoritmo:

interface ReadOnlyDict<E> {
  E get(Object key);
}

Il mio algoritmo non si preoccupa di come si implementa quel metodo. Forse è un Map . Forse usi un'istruzione switch per chiamare metodi diversi su un oggetto. Forse legge da un file, forse chiama dal servizio web remoto. In ognuno di questi casi, potrebbero esserci molte cose che il codice che crea quegli oggetti deve essere in grado di chiamare per prepararlo per l'uso. Forse quei metodi sono definiti da altre interfacce e questo è grandioso. Ma se non lo sono, creare un'interfaccia semplicemente in modo da essere definiti su uno è un esercizio inutile, secondo me.

    
risposta data 10.04.2018 - 19:01
fonte

Leggi altre domande sui tag