Questo post è basato sulla domanda link .
Alcuni hanno detto - controlla se esiste una relazione "è-a". Se è lì usa l'ereditarietà. Quello che penso è che ci dovrebbe essere un secondo controllo per l'utilizzo dell'ereditarietà. Usa l'ereditarietà solo se la classe base è astratta. Se la classe base deve essere istanziata, utilizzare la composizione; non ereditarietà.
E.g 1. Accountant è un dipendente. Ma non userò l'ereditarietà perché un oggetto Employee può essere istanziato. (Quando parli con gli uomini d'affari, loro ti diranno che - Accountant è un dipendente, ma in OO world Accountant non è (non dovrebbe essere) un dipendente)
E.g 2. Book is a SellingItem. Un oggetto SellingItem non può essere istanziato - è un concetto astratto. Quindi userò l'ereditarietà. Il SellingItem è una classe base astratta (o interfaccia in C #)
Quello che sto cercando qui è un esempio che metterà alla prova la mia argomentazione -che è uno scenario in cui l'ereditarietà è migliore della composizione anche se la classe base non è astratta (la classe base può essere istanziata). Potete fornire un esempio del genere?
Nota: sarebbe più utile se è possibile fornire uno scenario basato su dominio Bank, dominio delle risorse umane, dominio Retail o qualsiasi altro dominio popolare.
Nota: nel design, si supponga di avere il pieno controllo del codice. Questo è che non stiamo usando alcuna API esterna. Inoltre stiamo iniziando dall'inizio.
Contrassegnerò come risposta se c'è un esempio che spiega uno scenario che dimostra che la mia argomentazione è sbagliata. Non è una semplice discussione sull'uso di Composizione o Ereditarietà.
Supporto @anon answer in link
The main reason for using inheritance is not as a form of composition - it is so you can get polymorphic behaviour. If you don't need polymorphism, you probably should not be using inheritance.
@MatthieuM. dice in Odore di codice: abuso di ereditarietà
The issue with inheritance is that it can be used for two orthogonal purposes:
interface (for polymorphism)
implementation (for code reuse)
RIFERIMENTO
- Esempio di impiegato - Accountant link
- Esempio di articolo di vendita - link
- Programmazione dei principi SOLID
- Odore di codice: abuso di eredità