L'ereditarietà accoppierà strettamente il comportamento del gatto e del cane a quello di un animale. Quale potrebbe essere quello che vuoi.
Tuttavia, se si sta cercando di creare un universo in cui tutto è possibile, e un animale possibile modificarne il tipo, si può scegliere di utilizzare l'approccio identificativo ..
Ma si può prendere questo ulteriore.
Secondo il Gang of Fours design patterns si dovrebbe
"Favor 'la composizione di oggetti' over 'ereditarietà delle classi'."
Un animale è solo un cane perché ha una coda che agita e abbaia. Nel tuo universo, dove nel tempo un cane potrebbe imparare a parlare, vorrai essere in grado di modificare questo comportamento.
Si potrebbe quindi provare a astrarre il proprio comportamento e quindi all'interno di questo comportamento è possibile utilizzare l'ereditarietà.
Con questa struttura di classe:
class Tail
{
DoYourThing()
}
class WaggyTail : Tail
{
DoYourThing()
{
// Wag
}
}
class Noise
{
DoYourThing()
}
class Bark : Noise
{
DoYourThing()
{
// Bark
}
}
class Talk : Noise
{
DoYourThing()
{
// Talk
}
}
class Animal
{
public Noise { get; set; }
public Tail { get; set; }
}
È possibile impostare i vostri cani e gatti:
Animal dog = new Animal { Noise = new Bark(), tail = new DoggyTail() }
Animal cat = new Animal{ Noise = new Purr(), tail = new CattyTail() }
.. poi quando si ha bisogno la vostra super-razza che possibile semplice cambiare il loro comportamento
cane.Noise = new Talk();
.. Ehi, presto il tuo cane può parlare .. Se hai bisogno del tuo cane per cantare, devi solo creare una nuova classe di canto .. non sono necessari ulteriori cambiamenti.
http://stackoverflow.com/questions/269496/inheritance-vs-aggregation –
@jleedev: non è un'aggregazione o una composizione. Almeno non in senso stretto. –
Hmm, dovrei rallentare. –