¿Cuál es la diferencia entre agregación, composición y dependencia?
Respuestas
¿Demasiados anuncios?Agregación implica una relación en la que el hijo puede existir independientemente del padre. Ejemplo: Clase (padre) y Estudiante (hijo). Si se elimina la clase, los estudiantes siguen existiendo.
Composición implica una relación en la que el hijo no puede existir independientemente del padre. Ejemplo: Casa (padre) y Habitación (hijo). Las habitaciones no existen separadas de una casa.
Las dos anteriores son formas de contención (de ahí las relaciones padre-hijo).
Dependencia es una forma más débil de relación y en términos de código indica que una clase utiliza a otra por parámetro o tipo de retorno.
La dependencia es una forma de asociación .
Agregación y composición son casi completamente idénticos, salvo que composición se utiliza cuando la vida del niño está completamente controlada por el padre.
Agregación
Car -> Tires
El Tires
se puede sacar de la Car
y se instala en otro diferente. Además, si el coche queda destrozado, los neumáticos no tienen por qué ser destruidos.
Composición
Body -> Blood Cell
Cuando el Body
se destruye el objeto BloodCells
se destruyen con él.
Dependencia
Una relación entre dos objetos en la que el cambio de uno puede afectar al otro.
Agregación - parte separable del todo. La parte tiene una identidad propia, separada de aquello de lo que forma parte. Puedes coger esa parte y trasladarla a otro objeto. (ejemplos del mundo real: rueda -> coche, célula sanguínea -> cuerpo)
Composición - parte no separable del conjunto. No se puede trasladar la parte a otro objeto. es más bien una propiedad. (ejemplos del mundo real: curva -> carretera, personalidad -> persona, max_speed -> coche, propiedad del objeto -> objeto )
Tenga en cuenta que una relación que es un agregado en un diseño puede ser una composición en otro. Todo depende de cómo se vaya a utilizar la relación en ese diseño específico.
dependencia - sensible al cambio. (cantidad de lluvia -> tiempo, posición de la cabeza -> posición del cuerpo)
Nota: "Célula sanguínea" -> Sangre" podría ser "Composición" ya que las Células sanguíneas no pueden existir sin la entidad llamada Sangre. "Sangre" -> Cuerpo" podría ser "Agregación" ya que la Sangre puede existir sin la entidad llamada Cuerpo.
Un objeto asociado a un composición no existirá fuera del objeto contenedor. Ejemplos son una Cita y el propietario (una Persona) o un Calendario; un TestResult y un Paciente.
Por otro lado, un objeto que es agregado por un objeto contenedor puede existen fuera de ese objeto contenedor. Ejemplos son una puerta y una casa; un empleado y un departamento.
A dependencia se refiere a colaboración o delegación Cuando un objeto solicita servicios de otro objeto y, por tanto, depende de éste. Como cliente del servicio, quieres que la interfaz del servicio permanezca constante, incluso si se ofrecen futuros servicios.
La agregación y la composición son términos que la mayoría de la gente del mundo OO ha adquirido a través de UML. Y UML hace un trabajo muy pobre en la definición de estos términos, como ha sido demostrado, por ejemplo, por Henderson-Sellers y Barbier ("What is This Thing Called Aggregation?", "Formalization of the Whole-Part Relationship in the Unified Modeling Language"). No creo que pueda darse una definición coherente de agregación y composición si está interesado en ser compatible con UML. Te sugiero que mires las obras citadas.
En cuanto a la dependencia, es una relación muy abstracta entre tipos (no objetos) que puede significar casi cualquier cosa.