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?
risposta
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.
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? –
@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? –
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).
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.
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.
Ecco un buon articolo che spiega il concetto di interfaccia e perché utilizzarlo e come dichiarare le classi astratte in PHP. Anche se non si differenzia quando utilizzare entrambi i concetti.
Understanding and Applying (Interfaces) Polymorphism in PHP
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.
- 1. stesso metodo di interfaccia e classe astratta
- 2. Interfaccia/standard di codifica di classe astratta
- 3. Sigillatura di classe astratta o interfaccia in classe .NET
- 4. Estendi interfaccia a una classe astratta
- 5. cos'è la classe astratta in php?
- 6. classe astratta php che estende un'altra classe astratta
- 7. Differenza tra interfaccia, classe astratta, classe sigillata, classe statica e classe parziale in C#?
- 8. Qual è la differenza tra una classe astratta e un'interfaccia?
- 9. Qual è la differenza tra classe astratta e interfaccia in termini di archiviazione in JVM
- 10. Problema di interfaccia PHP - classe non trovata
- 11. Quando utilizzare e non utilizzare la classe Application di Android?
- 12. Classe astratta o interfaccia. Qual è il modo corretto?
- 13. Vincoli sui parametri del tipo: interfaccia vs classe astratta
- 14. Derive classe astratta da classe non astratta
- 15. C# delegato e classe astratta
- 16. Implementare la classe astratta come classe locale? pro e contro
- 17. Perché utilizzare una classe astratta vuota anziché un'interfaccia?
- 18. Mix-in di classe astratta e namedtuple
- 19. Una classe astratta può estendere un'altra classe astratta e aumentare la funzionalità
- 20. Quando utilizzare la classe Partitioner?
- 21. Parola chiave astratta in PHP
- 22. Matrice di classe astratta
- 23. Estendere classe astratta Singleton
- 24. Quando utilizzare un modulo e quando utilizzare una classe
- 25. desctructor virtuale pura classe di base astratta
- 26. Istanziata classe astratta Java?
- 27. Tabella classe astratta ActiveAndroid
- 28. come raggiungere la tabella per classe concreta quando la classe base è astratta in fluente niberniato?
- 29. Clang -Wweak-VTables e pura classe astratta
- 30. Serializzazione di una classe astratta
possibile duplicato di [interfaccia vs classe astratta] (http://stackoverflow.com/questions/1814821/interface-vs-abstract-class) – VolkerK
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