Necessità di interfacce per piccoli progetti

1

È necessario utilizzare le interfacce per i piccoli progetti? Lavoro in un negozio scrivendo piccole applicazioni personalizzate per i clienti, principalmente la manipolazione dei dati. Sono per lo più autodidatta, ma ho anche seguito alcuni corsi di programmazione al college. Ho cercato di applicare più concetti OO alle mie pratiche di codifica, ma davvero non vedo la necessità di interfacce nel lavoro che faccio. Il mio più grande progetto finora aveva circa 10 classi in esso.

Le interfacce sono necessarie per piccoli progetti / applicazioni o solo per sistemi software su larga scala?

EDIT: questo non è un duplicato. Sto chiedendo di usare le interfacce in generale per i piccoli progetti, non usando un'interfaccia per quando c'è solo una singola implementazione ...

    
posta dprice 04.04.2014 - 16:42
fonte

3 risposte

1

Risposta breve: No.

Risposta lunga: Esiste un compromesso tra l'uso di una classe e un'interfaccia. Le implementazioni dell'interfaccia possono essere scambiate in fase di runtime. Questo è bello perché è flessibile, ma significa anche che qualcuno può codificare un IFoo non valido e passarlo a una delle tue funzioni altrimenti funzionante. Con un calcestruzzo (e sealed / final ) Foo c'è solo un'implementazione, quindi se hai ragione, funziona sempre.

Un altro svantaggio delle interfacce è che non possono ispezionare i dettagli di implementazione degli altri membri di tale interfaccia. I metodi Foo possono esaminare le variabili private di altri Foo s, ma IFoo s può solo guardare l'interfaccia di altri IFoo s. Questo può limitare determinate ottimizzazioni, quindi se c'è solo un'implementazione di un'interfaccia può danneggiarti senza fornire alcun vantaggio.

Sfortunatamente i principali linguaggi OOP non forniscono un modo per scambiare implementazioni di classe. Idealmente, potresti essere in grado di avere più implementazioni Foo e sceglierne una in fase di compilazione. Tuttavia, con un IDE non è difficile estrarre un'interfaccia da una classe dopo il fatto.

Se non è necessario manipolare più tipi di Foo s nello stesso programma, non è necessario aggiungere un ulteriore livello di riferimento indiretto con un'interfaccia. Anche se hai bisogno di più tipi di Foo s nello stesso programma, non hai necessariamente bisogno di un'interfaccia. Puoi avere una classe base astratta con un costruttore privato e implementare un numero finito di tipi di Foo s come static final sottoclassi interne. Vedi anche Come fare si codificano i tipi di dati algebrici in linguaggio C o Java .

Le interfacce brillano davvero quando non si desidera limitare il numero di possibili implementazioni utilizzabili in fase di runtime.

EDIT: per una spiegazione più approfondita dei trade-off coinvolti, vedi Informazioni sull'astrazione dei dati, rivisitate .

    
risposta data 04.04.2014 - 17:00
fonte
4

Anche se hai solo un piccolo progetto, se vuoi avere dei test unitari, probabilmente vorrai usare le interfacce per i tuoi servizi e le tue dipendenze. In questo modo puoi iniettare finte implementazioni di quelle nei tuoi test unitari.

Se non stai facendo test di unità, allora ci sono altri usi comuni per le interfacce, come il modello di strategia.

    
risposta data 04.04.2014 - 19:42
fonte
0

definisci "necessario"

se due classi devono implementare la stessa interfaccia per poter essere utilizzate in modo intercambiabile da qualche oggetto, l'uso di un'interfaccia è tecnicamente necessario, anche se ereditare da una classe base comune può aggirare questo problema (per le lingue che non supportano le interfacce, per esempio)

la dimensione del progetto è irrilevante

    
risposta data 04.04.2014 - 20:42
fonte

Leggi altre domande sui tag