Agregación vs Composición
On febrero 12, 2021 by adminEntiendo qué es la composición en OOP, pero no puedo tener una idea clara de qué es Aggregation. ¿Alguien puede explicarlo?
Responder
Reglas simples:
- A «posee» B = Composición: B no tiene significado ni propósito en el sistema sin A
- A «usa» B = Agregación: B existe independientemente (conceptualmente) de A
Ejemplo 1:
Una empresa es una agregación de personas. Una empresa es una composición de cuentas. Cuando una empresa deja de hacer negocios, sus cuentas dejan de existir pero su gente sigue existiendo.
Ejemplo 2: (muy simplificado)
Un editor de texto posee un búfer (composición). Un editor de texto usa un archivo (agregación). Cuando se cierra el editor de texto, el búfer se destruye pero el archivo en sí no se destruye.
Comentarios
- Por lo tanto, un automóvil es un agregado o un composición de sus partes?
- ¿Y en qué se diferencia la agregación de cualquier otra relación entre dos tipos de entidades?
- @reinierpost En realidad , un automóvil es un agregación de partes, y las partes son simplemente una agregación de moléculas … Sin embargo, en un modelo todo depende de sus requisitos. ¿Es importante tratar el motor como una entidad separada para poder realizar un seguimiento de su vida útil independientemente del automóvil? ¿Puede reutilizar exactamente el mismo motor en otro automóvil? Si es así, probablemente desee la agregación. De lo contrario, querrás una composición porque ‘ no te preocupas por los motores que no ‘ t forman parte de los coches, ni te preocupas por reutilizar motores .
- lo que falta es un ejemplo de implementación para una comprensión completa …
- ¿Qué pasa con el empleado cuando una empresa deja de operar? Empleado y personas son entidades diferentes, ¿verdad? Entonces, ¿puedo decir que la empresa está compuesta por empleados?
Respuesta
De http://en.wikipedia.org/wiki/Object_composition
La agregación difiere de la composición ordinaria en que no implica propiedad. En composición, cuando el objeto propietario es destruido, también lo son los objetos contenidos. En conjunto, esto no es necesariamente cierto. Por ejemplo, una universidad posee varios departamentos (por ejemplo, química) y cada departamento tiene varios profesores. Si la universidad cierra, los departamentos dejarán de existir, pero los profesores de esos departamentos seguirán existiendo. Por tanto, una Universidad puede verse como una composición de departamentos, mientras que los departamentos tienen una agregación de profesores. Además, un profesor puede trabajar en más de un departamento, pero un departamento no puede ser parte de más de una universidad.
Entonces, mientras tenga una relación de propiedad con la composición el objeto de propiedad también se destruye cuando el propietario lo es: una agregación (y los objetos contenidos) pueden existir de forma independiente.
–
Actualización: Disculpas – esta respuesta es demasiado simplista en retrospectiva.
@Curtis Batt proporciona una excelente definición en su respuesta: Agregación vs Composición
Comentarios
- En el ejemplo que cita, la composición es de uno a muchos y la agregación también tiene una relación de uno a muchos implícita, aunque aquí también podría ser una relación de varios a varios para la agregación (podemos suponer que es posible que un profesor pueda enseñar en varios departamentos). Mientras que un departamento no puede formar parte de varias universidades. La composición implica propiedad, mientras que la agregación no va más allá de la relación. La cita es correcta pero el comentario no.
- ¡No tiene nada que ver con la destrucción! UML no define el sistema de recolección de basura.
- Creo que el enlace de wikipedia está obteniendo votos positivos, pero esta es una definición terrible, como @bold señaló que estas relaciones no tienen nada que ver con GC. Esto también se desmorona cuando un objeto es el componente de otros dos objetos, como la bola en una rótula que une dos miembros artificiales. La relación de los componentes trata sobre la dependencia funcional.
- Estoy de acuerdo en que mi respuesta es muy deficiente, pero también lo es el artículo de WikiPedia …
- La diferencia entre composición y agregación es clara. El problema con la agregación es que ‘ no está claro en qué se diferencia de la asociación ordinaria.
Respuesta
-
La composición es una asociación
-
La agregación es una asociación
-
La composición es una asociación fuerte (si la vida del objeto contenido depende totalmente del objeto contenedor, se llama asociación fuerte)
-
La agregación es una asociación débil (si la vida del objeto contenido no depende del objeto contenedor, se llama asociación débil)
Ejemplo:
class Contained { public void disp() { System.out.println("disp() of Contained A"); } } public class Container { private Contained c; //Composition Container() { c = new Contained(); } //Association public Contained getC() { return c; } public void setC(Contained c) { this.c = c; } public static void main(String[] args) { Container container = new Container(); Contained contained = new Contained(); container.setC(contained); } }
Comentarios
- ¿Cuál es la diferencia entre agregación y asociación que no es ni composición ni agregación?
Respuesta
No hay una explicación única. Diferentes autores significan cosas diferentes por agregación. La mayoría no quiere decir nada específico con esto.
Comentarios
- Este es la respuesta correcta. ‘ lo he leído en dos libros, uno de ellos es Martin Fowler ‘ s UML Distilled .
- martinfowler.com/bliki/AggregationAndComposition.html
Responder
La composición (mezcla) es una forma de combinar objetos simples o tipos de datos en otros más complejos. Las composiciones son un componente fundamental de muchas estructuras de datos básicas
La agregación (colección) difiere de la composición ordinaria en que no implica propiedad. En composición, cuando el objeto propietario es destruido, también lo son los objetos contenidos. En agregación, esto no es necesariamente cierto
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ Aggregation ║ Composition ║ ╠═══════════╬═════════════════════════╬═══════════════════════╣ ║ Life time ║ Have their own lifetime ║ Owner"s life time ║ ║ Relation ║ Has ║ part-of ║ ║ Example ║ Car has driver ║ Engine is part of Car ║ ╚═══════════╩═════════════════════════╩═══════════════════════╝
Ambos denotan relación entre objetos y solo difieren en su fuerza.
Notaciones UML para diferentes tipos de dependencia entre dos clases
Composición : dado que el motor es parte del automóvil, la relación entre ellos es la composición. Así es como se implementan entre las clases de Java.
public class Car { //final will make sure engine is initialized private final Engine engine; public Car(){ engine = new Engine(); } } class Engine { private String type; }
Agregación : Dado que la Organización tiene a Person como empleados, la relación entre ellos es Agregación. Así es como se ven en términos de clases de Java
public class Organization { private List employees; } public class Person { private String name; }
Comentarios
- esto no ‘ parece ofrecer algo sustancial sobre los puntos señalados y explicados en las 12 respuestas anteriores
- Estoy bastante seguro de que los libros pueden existir sin bibliotecas. ¡Mal ejemplo!
- Aquí la Lista de Empleados es parte del Objeto de Organización. ¿Cómo puede ser esto agregación?
- ¿En qué se diferencia la asociación de la agregación?
- Me encanta esta respuesta. Finalmente me explicó correctamente cuál es la diferencia entre agregación y composición.
Respuesta
la agregación es una simple colección, como una bolsa de canicas
la composición implica dependencias internas / funcionales, como las bisagras de una caja
los coches agregan pasajeros; entran y salen sin romper la funcionalidad del automóvil
los neumáticos son componentes; retire uno y el automóvil ya no funciona correctamente
[nota: ¡el neumático de repuesto es un agregado! ]
Respuesta
Siempre veo la composición como «necesita un», es decir, un coche necesita un motor, y veo la agregación como «cosas relacionadas con un propósito». Por lo tanto, siguiendo con la analogía del automóvil, mi agregación puede representar un viaje que puede implicar unir un automóvil y pasajeros. El viaje no es propietario del automóvil ni los pasajeros, estoy agregando datos que están relacionados para un escenario específico. Cuando se completa el viaje, el automóvil y los pasajeros continúan. Cuando se apaga un automóvil, el automóvil y su motor normalmente se destruyen juntos.
Respuesta
¿Qué tal este simple ejemplo? :
Una matriz de objetos es una composición. Una matriz de punteros a objetos es una agregación.
Si elimino el primero, su contenido desaparece con él. El segundo, por otro lado, puede desaparecer sin afectar la existencia de sus miembros a menos que exista un método específico que borre cada objeto cuando se borre su puntero.
Comentarios
- esto no ‘ no parece agregar nada sustancial a los puntos hechos y explicados en 11 respuestas anteriores
- Respetuosamente en desacuerdo, @gnat. Este es un ejemplo útil de cómo el Se podrían implementar dos. La gente aprende mejor con ejemplos.(Vine aquí para comprobar mi comprensión de que un miembro de puntero probablemente sea una agregación y un miembro de objeto una composición. Esta es la única respuesta para abordar directamente eso).
Responder
Semánticamente, todos los conjuntos están hechos de subconjuntos, ¿verdad? Por lo tanto:
-
La agregación es cuando esos subconjuntos existen independientemente del conjunto padre. Como monitor se puede desconectar de la computadora para conectarse a otro.
-
La composición es cuando esos subconjuntos dependen de la existencia del conjunto padre. Como una hoja es parte de un árbol o el hígado es parte de un cuerpo.
Estos conceptos hablan del tipo de dependencia entre dos objetos o clases, conceptualmente. Directamente en un programa, en una agregación, cuando el objeto padre se deshace, los objetos agregados también deben eliminarse. En el mismo escenario para una composición, los objetos hijo compuestos persistirán y luego el objeto padre se dispensa.
Deja una respuesta