La composizione si riferisce alla combinazione di tipi semplici per rendere più complessi. Nel tuo esempio, la composizione potrebbe essere:
Animal:
Skin animalSkin
Organs animalOrgans
Mammal::Animal:
Hair/fur mammalFur
warm-blooded-based_cirulation_system heartAndStuff
Person::Mammal:
string firstName
string lastName
Se si voleva andare totalmente la composizione (e di sbarazzarsi di tutto eredità) sarebbe simile a questa:
Animal:
Skin animalSkin
Organs animalOrgans
Mammal:
private Animal _animalRef
Hair/fur mammalFur
warm-blooded-based_cirulation_system heartAndStuff
Person:
private Mammal _mammalRef
string firstName
string lastName
Il vantaggio di questo approccio è che i tipi Mammal
e Person
non devono essere conformi all'interfaccia del precedente genitore. Questo potrebbe essere essere una buona cosa perché a volte una modifica alla superclasse può avere seri effetti sulle sottoclassi. Possono ancora accedere alle proprietà e ai comportamenti di queste classi attraverso le loro istanze private di queste classi e, se desiderano esporre questi comportamenti di superclasse precedente, possono semplicemente racchiuderli in un metodo pubblico.
ho trovato un buon legame con i buoni esempi qui: http://www.artima.com/designtechniques/compoinh.html
Quindi posso dire che: "La composizione è quando creo un oggetto di" Classe A "all'interno di" Classe B "(invece di sottoclassi di" Classe B "da" Classe A'). " ? – thesummersign
oh. ok capito 'w69rdy' ha risposto in seguito. Sì, posso dirlo. – thesummersign