Composición y agregación
Las clases y los objetos se pueden relacionar entre sí. La herencia describe una relación "ES A". Un león ES UN animal. Esta relación se expresa fácilmente usando herencia, donde Animal
sería la clase padre y Lion
sería la clase hija. Pero no todas las relaciones en el mundo se describen correctamente de esta manera. Por ejemplo, un teclado definitivamente tiene alguna relación con una computadora, pero no es una computadora . Las manos tienen alguna relación con una persona, pero no son una persona. Estos casos representan un tipo diferente de relación, no "ES A", sino "TIENE A". Las manos no son una persona, pero una persona TIENE manos. Un teclado no es una computadora, pero una computadora TIENE UN teclado. "TIENE UN".
La diferencia entre estos conceptos radica en el "rigor" de las relaciones. Tomemos un ejemplo simple: tenemos un Car
. Todo coche tiene un motor. Además, cada coche puede llevar pasajeros. ¿ Cuál es la diferencia fundamental entre los campos Engine engine
y ? Passenger[] passengers
Si el pasajero A
está sentado dentro de un automóvil, eso no significa que los pasajeros B
y C
no puedan estar también en el automóvil. Un coche puede acomodar a varios pasajeros. Además, todos los pasajeros pueden salir del automóvil, pero seguirá funcionando sin problemas. La relación entre la Car
clase y la Passenger[] passengers
matriz es menos estricta. Se llama agregación .
Aquí hay un buen artículo sobre este tema: Relaciones entre clases (objetos). Proporciona otro buen ejemplo de agregación. Digamos que tenemos una Student
clase que representa a un estudiante y otra StudentGroup
que representa a un grupo de estudiantes. Un estudiante puede ser miembro de un club de física, un club de fans de estudiantes de Star Wars o un club de comedia. La composición es un tipo más estricto de relación. Al usar composición, un objeto tiene otro objeto, pero no puede pertenecer a otro objeto del mismo tipo. El ejemplo más simple es el motor de un automóvil. Si un automóvil tiene un motor, ese motor no puede pertenecer a otro automóvil. Como puede ver, esa relación es mucho más estricta que la de Car
y Passengers
.
GO TO FULL VERSION