2010-09-06 11 views
7

Mi stavo chiedendo come decidete voi quando utilizzare la classe astratta o di interfaccia durante lo sviluppo dell'applicazione poiché entrambi offrono funzionalità simili con una leggera differenza. Apprezzo qualsiasi aiuto. Grazie.php: quando utilizzare la classe astratta e di interfaccia?

+0

possibile duplicato di [interfaccia vs classe astratta] (http://stackoverflow.com/questions/1814821/interface-vs-abstract-class) – VolkerK

+0

possibile duplicato di [PHP: Qual è la differenza tra un'interfaccia e una classe astratta ?] (http://stackoverflow.com/questions/1913098/php-what-is-the-difference-between-an-interface-and-abstract-class) – Gordon

risposta

3

quando sto sviluppando e sto cercando di decidere se utilizzare un'interfaccia o una classe astratta, di solito penso che le classi che erediteranno conterranno solo la stessa struttura (metodi, proprietà ecc.) Ma implementazioni differenti.

se l'implementazione dei metodi sarà diversa, ma voglio garantire l'identità da un punto di vista strutturale utilizzo un'interfaccia. se la struttura e l'implementazione sono le stesse, tendo ad usare classi astratte.

+0

Non è chiaro il motivo per cui "se la struttura e l'implementazione sono lo stesso io tendo ad usare le classi astratte? usi la classe astratta se la stessa struttura e implementazione sono necessarie? –

+0

@RNKushwaha, voglio dire che se voglio condividere un'implementazione identica di un metodo/proprietà tra più classi ereditanti, vorrei creare una classe astratta in modo che l'implementazione possa vivere nella classe astratta. Le interfacce non consentono alcuna implementazione. Ha più senso? –

4

Uso le classi astratte quando voglio che le classi ereditanti ereditino alcune funzionalità e interfacce quando voglio impostare alcuni criteri strutturali minimi per un gruppo di classi.

Una cosa da ricordare è che qualsiasi classe data può "ereditare" (tecnicamente implementare) molte interfacce ma solo una sottoclasse (che sia astratta o meno).

1

I linguaggi come il PHP supportano l'implementazione di più interfacce ma non l'ereditarietà di più classi, e questo è spesso parte della decisione: la tua classe supporterà più comportamenti (interfacce) o agirà come un tipo di cosa (classe base)?

C'è anche la domanda su come viene implementata la funzionalità di base. Se si utilizza un approccio come lo template method pattern in cui si dispone di codice di implementazione comune per tutte le classi derivate, si vorrà utilizzare una classe base astratta.

6

Utilizzare l'astrazione se si dispone di metodi predefiniti (con codice di accompagnamento) per gli ereditari. Usa le interfacce se hai solo bisogno di assicurarti che le classi che ereditano da questo genitore dovrebbero implementare tutti i metodi definiti. Parola di cautela: usa le classi e le interfacce astratte solo se intendi rinforzare struttura e organizzazione (di solito con una squadra). C'è un sovraccarico di prestazioni.

0

quando è necessario il collegamento per determinate funzionalità: utilizzare interface.but se si desidera utilizzare alcune funzionalità opzionali --use abstract class. ad esempio se isi (istituto indiano standard) stabilisce standard per il monitor del computer con funzionalità (dovrebbe avere) - Display, pulsante di accensione, settaggio del contrasto. se tutte e 3 le funzionalità sono obbligatorie, utilizzare l'interfaccia, che controlla la società produttrice di monitor per implementare tutte e 3 le funzionalità. se è opzionale, usa la classe astratta.

Problemi correlati