Ho alcune domande di base su classi/metodi astratti. So che l'uso di base delle classi astratte è quello di creare modelli per classi future. Ma ci sono altri usi di loro? Quando dovresti preferirli alle interfacce e quando no? Anche quando sono utili i metodi astratti?Quando e perché utilizzare classi/metodi astratti?
risposta
So uso di base di classi astratte è quello di creare modelli per le future classi. Ma ci sono altri usi di loro?
Non solo è possibile definire un modello per i bambini, ma le classi astratte offrono il vantaggio aggiuntivo di consentire di definire le funzionalità che le classi figlio possono utilizzare in un secondo momento.
Non è possibile fornire un'implementazione per un'interfaccia.
Quando si preferiscono le interfacce e quando no?
Le classi astratte sono una buona soluzione se si desidera fornire dettagli di implementazione ai propri figli ma non si desidera consentire l'istanziazione diretta di un'istanza della classe (che consente di definire parzialmente una classe).
Se si desidera semplicemente definire un contratto per gli oggetti da seguire, quindi utilizzare un'interfaccia.
Anche quando sono utili i metodi astratti?
I metodi astratti sono utili allo stesso modo in cui è utile definire i metodi in un'interfaccia. È un modo per il progettista della classe Abstract per dire "qualsiasi bambino mio DEVE implementare questo metodo".
"Non è possibile fornire un'implementazione per un'interfaccia." È possibile utilizzare Java 8 con un metodo predefinito. –
Ad un livello molto alto:
astrazione di qualsiasi tipo si riduce a preoccupazioni di separazione. Il codice "Cliente" di un'astrazione non interessa come viene soddisfatto il contratto esposto dall'astrazione. Di solito non ti interessa se una classe di stringhe usa un'implementazione di archiviazione interna con terminazione null o di lunghezza del buffer, ad esempio. L'incapsulamento nasconde i dettagli, ma creando classi/metodi/ecc. astratto, si consente di modificare l'implementazione o di aggiungere nuove implementazioni senza influire sul codice client.
leggere il seguente articolo http://mycodelines.wordpress.com/2009/09/01/in-which-scenario-we-use-abstract-classes-and-interfaces/
classi astratte
-> Quando si dispone di un requisito di cui vostra classe di base dovrebbe fornire di default attuazione di alcuni metodi mentre altri metodi dovrebbero essere aperti per essere sovrascritto dalle classi figlio utilizzare classi astratte.
Ad es. riprendi l'esempio della classe di veicoli sopra. Se vogliamo che tutte le classi derivino da veicolo a implementare il metodo Drive() in un modo fisso mentre gli altri metodi possono essere sovrascritti da classi figlio.In tale scenario implementiamo la classe veicolo come una classe astratta con un'implementazione di unità, mentre lasciare gli altri metodi/proprietà come astratte in modo che potessero essere prevalga classi figlie.
-> Lo scopo di una classe astratta è di fornire una definizione comune di una classe base che multipla derivato classi possono condividere.
Ad esempio una libreria di classi può definire una classe astratta che viene utilizzato come parametro a molte delle sue funzioni e richiedono programmatori utilizzando tale libreria fornire loro attuazione classe creando una classe derivata.
Usa una classe astratta
Quando si crea una libreria di classi che verrà ampiamente distribuito o riutilizzato, specialmente ai clienti, utilizzare una classe astratta a preferenza di un'interfaccia ; perché semplifica il controllo delle versioni di . Questa è la pratica utilizzata da dal team Microsoft che ha sviluppato la libreria di classi base. (COM era progettato attorno alle interfacce.) Utilizzare una classe astratta per definire una classe comune per una famiglia di tipi. Utilizzare una classe astratta per fornire il comportamento predefinito . Sottoclasse solo una classe base in una gerarchia a cui la classe appartiene logicamente.
In genere si utilizza una classe astratta per fornire alcune funzionalità incomplete che verranno arricchite da sottoclassi concrete. Può fornire metodi utilizzati dalle sue sottoclassi; può anche rappresentare un nodo intermedio nella gerarchia di classi, per rappresentare un raggruppamento comune di sottoclassi concrete, distinguendole in qualche modo da altre sottoclassi della sua superclasse. Poiché un'interfaccia non può derivare da una classe, questa è un'altra situazione in cui una classe (astratta o altrimenti) sarebbe necessaria, rispetto a un'interfaccia.
Una buona regola empirica è che solo i nodi foglia di una gerarchia di classi dovrebbero essere istanziati. Rendere astratti i nodi non fogliari è un modo semplice per garantirlo.
Classi/metodi astratti vengono generalmente utilizzati quando una classe fornisce alcune funzionalità di alto livello ma lascia fuori determinati dettagli da implementare per classi derivate. Rendere l'abstract della classe/metodo assicura che non possa essere usato da solo, ma deve essere specializzato per definire i dettagli che sono stati lasciati fuori dall'implementazione di alto livello.Questo è più spesso utilizzato con il modello Template Method:
Se siete alla ricerca di una buona documentazione del Software Ingegneria e Design ho davvero consigliamo di dare un'occhiata lì:
https://prof.hti.bfh.ch/index.php?id=3494&L=2
Informazioni sull'introduzione delle classi abstact:
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/script/udp-advancedclassmodeling-200910.pdf
applausi
Daniel
- 1. quando e perché utilizzare JumboEnumSet
- 2. Metodi generici e astratti
- 3. quando e perché utilizzare più NSManagedObjectContext?
- 4. RxAndroid: quando utilizzare bindActivity e perché?
- 5. JQuery su JavaScript Perché e quando utilizzare?
- 6. EF4 e più livelli astratti
- 7. astratti metodi e l'annotazione varargs
- 8. metodi astratti interni. Perché qualcuno dovrebbe averli?
- 9. Quando utilizzare JMS e quando utilizzare REST?
- 10. Swift - miscelazione di metodi astratti e concreti
- 11. Come utilizzare l'annotazione di Objectify quando si condividono modelli astratti comuni tramite l'ereditarietà?
- 12. astratti metodi e il principio aperto-chiuso
- 13. Perché utilizzare PHP OOP su funzioni di base e quando?
- 14. Capire quando e perché utilizzare thread Android diversi
- 15. quando e perché utilizzare C# i metodi di accesso
- 16. Quando e perché utilizzare Loop Do Costruisci in Ruby
- 17. Perché i caratteri PHP non hanno metodi astratti statici?
- 18. PERCHÉ WCF 'correttamente' consuma/espone i tipi astratti quando è ospitato come servizio Web
- 19. C'è qualche guida su "Quando utilizzare display: blocca quando: inline e when: inline-block" e perché?
- 20. Perché non utilizzare l'associazione anticipata quando possibile?
- 21. Quando utilizzare, non utilizzare, OneToOne e ManyToOne
- 22. Quando utilizzare Meteor.methods e utilizzare gli stub
- 23. Quando smaltire e perché?
- 24. Quando utilizzare e quando non utilizzare Python 3.5 `attendere '?
- 25. Quando utilizzare le categorie e quando utilizzare la sottoclasse?
- 26. Quando utilizzare Class.isInstance() e quando utilizzare l'operatore instanceof?
- 27. Quando utilizzare un modulo e quando utilizzare una classe
- 28. Quando utilizzare l'array di byte e quando utilizzare lo streaming?
- 29. Perché/Quando utilizzare (!! p) anziché (p! = NULL)
- 30. Quando utilizzare limit e quando non su
possibile duplicato del [Interface vs Classe base] (http://stackoverflow.com/questions/56867/interface-vs-base-class) - e ci sono molti ** ** più con risposte di altissima qualità: basta cercare su "Interfaccia classe astratta". –