Composición se refiere a la combinación de tipos simples para hacer más complejos. En su ejemplo, la composición puede ser:
Animal:
Skin animalSkin
Organs animalOrgans
Mammal::Animal:
Hair/fur mammalFur
warm-blooded-based_cirulation_system heartAndStuff
Person::Mammal:
string firstName
string lastName
Si quería ir totalmente composición (y deshacerse de toda la herencia) se vería así:
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
La ventaja de este enfoque es que los tipos Mammal
y Person
no tienen que ajustarse a la interfaz de su padre anterior. Esto podría ser una buena cosa porque a veces un cambio a la superclase puede tener efectos graves en las subclases. Aún pueden tener acceso a las propiedades y el comportamiento de estas clases a través de sus instancias privadas de estas clases, y si quieren exponer estos comportamientos de superclase anteriores, simplemente pueden envolverlos en un método público.
me encontré con un buen enlace con buenos ejemplos aquí: http://www.artima.com/designtechniques/compoinh.html
Entonces, ¿puedo decir que: "La composición es cuando creo un objeto de 'Clase A' dentro de 'Clase B' (en lugar de subclasificar 'Clase B' de 'Clase A')". ? – thesummersign
oh. ok lo entendí 'w69rdy' respondió más tarde. SÍ, puedo decir eso. – thesummersign