Agregação vs composição
On Fevereiro 12, 2021 by adminEu entendo o que é composição em OOP, mas não consigo ter uma ideia clara do que é agregação. Alguém pode explicar?
Resposta
Regras simples:
- A “possui” B = Composição: B não tem significado ou propósito no sistema sem A
- A “usa” B = Agregação: B existe independentemente (conceitualmente) de A
Exemplo 1:
Uma empresa é uma agregação de pessoas. Uma empresa é uma composição de contas. Quando uma empresa deixa de fazer negócios, suas contas deixam de existir, mas seu pessoal continua a existir.
Exemplo 2: (muito simplificado)
Um editor de texto possui um buffer (composição). Um Editor de Texto usa um Arquivo (agregação). Quando o Editor de Texto é fechado, o Buffer é destruído, mas o próprio Arquivo não é destruído.
Comentários
- Portanto, um carro é um agregado ou um composição de suas partes?
- E como a agregação difere de qualquer outro relacionamento entre dois tipos de entidades?
- @reinierpost Na realidade , um carro é um agregação de partes, e as partes são simplesmente uma agregação de moléculas … No entanto, em um modelo , tudo depende de seus requisitos. É importante tratar o motor como uma entidade separada para que você possa rastrear sua vida útil independentemente do carro? Você pode reutilizar exatamente o mesmo motor em outro carro? Em caso afirmativo, você provavelmente deseja agregação. Caso contrário, você deseja uma composição porque você não ‘ não se preocupa com os motores que não ‘ fazem parte dos carros, nem se preocupa com a reutilização dos motores .
- o que está faltando é um exemplo de implementação para um entendimento completo …
- E o funcionário quando uma empresa para de fazer negócios? Funcionários e pessoas são entidades diferentes, certo? Então, posso dizer que a empresa é composta de funcionários?
Resposta
De http://en.wikipedia.org/wiki/Object_composition
A agregação difere da composição normal porque não implica propriedade. Na composição, quando o objeto proprietário é destruído, o mesmo ocorre com os objetos contidos. Em agregação, isso não é necessariamente verdade. Por exemplo, uma universidade possui vários departamentos (por exemplo, química), e cada departamento tem vários professores. Se a universidade fechar, os departamentos não existirão mais, mas os professores desses departamentos continuarão existindo. Portanto, uma Universidade pode ser vista como uma composição de departamentos, enquanto os departamentos têm uma agregação de professores. Além disso, um professor pode trabalhar em mais de um departamento, mas um departamento não pode fazer parte de mais de uma universidade.
Então – enquanto você tem uma relação de propriedade com a composição do objeto de propriedade também é destruída quando o proprietário é – uma agregação (e os objetos contidos) podem existir independentemente.
–
Atualização: Desculpas – esta resposta é muito simplista em retrospectiva.
@Curtis Batt fornece uma definição excelente em sua resposta: Agregação vs composição
Comentários
- No exemplo que você cita, a composição é um-para-muitos e a agregação também tem um relacionamento um-para-muitos implícito, embora aqui também possa ser uma relação muitos-para-muitos para a agregação (podemos supor que um professor pode ensinar em vários departamentos). Considerando que um departamento não pode fazer parte de várias universidades. Composição implica propriedade, enquanto a agregação não vai além do relacionamento. A citação está correta, mas o comentário não.
- não tem nada a ver com destruição! UML não define o sistema de coleta de lixo.
- Eu acho que o link da wikipedia está recebendo votos positivos reflexivos, mas esta é uma definição terrível – como @bold apontou, esses relacionamentos não têm nada a ver com GC. Isso também se desfaz quando um objeto é o componente de dois outros objetos, como a bola em uma junta esférica que une dois membros artificiais. O relacionamento do componente é sobre dependência funcional.
- Eu concordo que minha resposta está faltando severamente – mas o artigo da WikiPedia também …
- A diferença entre composição e agregação é clara. O problema com a agregação é que ‘ não está claro como é diferente da associação comum.
Resposta
-
A composição é uma associação
-
A agregação é uma associação
-
A composição é uma associação forte (se a vida do objeto contido depende totalmente do objeto recipiente, é chamada de associação forte)
-
A agregação é uma associação fraca (se a vida do objeto contido não depende do objeto recipiente, ela é chamada associação fraca)
Exemplo:
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); } }
Comentários
- Qual é a diferença entre agregação e associação que não é nem composição nem agregação?
Resposta
Não há uma explicação única. Diferentes autores significam coisas diferentes por agregação. A maioria não significa nada específico com isso.
Comentários
- Isso é a resposta correta. Eu ‘ li em dois livros, um deles sendo Martin Fowler ‘ s UML destilado .
- martinfowler.com/bliki/AggregationAndComposition.html
Resposta
Composição (mistura) é uma maneira de combinar objetos simples ou tipos de dados em outros mais complexos. As composições são um bloco de construção crítico de muitas estruturas de dados básicas
Agregação (coleção) difere da composição comum no sentido de que não implica propriedade. Na composição, quando o objeto proprietário é destruído, o mesmo ocorre com os objetos contidos. Na agregação, isso não é necessariamente verdade
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ 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 denotam relacionamento entre o objeto e diferem apenas em sua intensidade.
Notações UML para diferentes tipos de dependência entre duas classes
Composição : Como o Motor é parte do Carro, a relação entre eles é Composição. Veja como eles são implementados entre as classes 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; }
Agregação : Uma vez que a Organização tem Pessoa como funcionários, o relacionamento entre eles é Agregação. É assim que eles se parecem em termos de classes Java
public class Organization { private List employees; } public class Person { private String name; }
Comentários
- isso não ‘ não parece oferecer nada substancial em relação aos pontos feitos e explicados nas 12 respostas anteriores
- Livros com certeza podem existir sem bibliotecas. Mau exemplo!
- Aqui, a Lista de funcionários faz parte do Objeto da organização. Como isso pode ser agregação?
- Qual é a diferença entre associação e agregação?
- Adoro esta resposta. Finalmente, me explicou de maneira adequada qual é a diferença entre agregação e composição.
Resposta
a agregação é simples coleção, como um saco de mármores
a composição implica dependências internas / funcionais, como as dobradiças de uma caixa
os carros agregam passageiros; eles entram e saem sem quebrar a funcionalidade do carro
os pneus são componentes; remova um e o carro não funcionará mais corretamente
[nota: o pneu sobressalente é um agregado! ]
Resposta
Sempre vejo a composição como “precisa de”, ou seja, um carro precisa de motor, e vejo a agregação como “coisas relacionadas com um propósito”. Continuando com a analogia do carro, minha agregação pode representar uma viagem que pode envolver a reunião de um carro e de passageiros. A viagem não possui o carro ou os passageiros, estou agregando dados relacionados a um cenário específico. Quando a viagem termina, o carro e os passageiros continuam. Quando um carro termina, o carro e o motor são normalmente destruídos juntos.
Resposta
Que tal este exemplo simples :
Uma matriz de objetos é uma composição. Uma matriz de ponteiros para objetos é uma agregação.
Se eu excluir o primeiro, seu conteúdo desaparecerá com ele. O segundo, por outro lado, pode desaparecer sem afetar a existência de seus membros, a menos que haja um método específico que exclua cada objeto conforme seu ponteiro é excluído.
Comentários
- isto não ‘ não parece adicionar nada substancial sobre os pontos feitos e explicados nas 11 respostas anteriores
- Discordo respeitosamente, @gnat. Este é um exemplo útil de como o dois poderiam ser implementados. As pessoas aprendem melhor com exemplos.(Vim aqui para verificar meu entendimento de que um membro ponteiro provavelmente era uma agregação e um membro objeto uma composição. Esta é a única resposta para tratar disso diretamente.)
h2> Resposta
Semanticamente, todos os conjuntos são feitos de subconjuntos, certo? Portanto:
-
A agregação é quando esses subconjuntos existem independentemente do conjunto pai. Pois um monitor pode ser desconectado do computador para ser conectado a outro.
-
A composição é quando esses subconjuntos dependem da existência do conjunto pai. Assim como a folha é parte de uma árvore ou o fígado é parte de um corpo.
Esses conceitos falam sobre o tipo de dependência entre dois objetos ou classes, conceitualmente. Diretamente em um programa, em uma agregação, quando o objeto pai é descartado, os objetos agregados também devem ser descartados. No mesmo cenário para uma composição, os objetos filho compostos irão persistir e o objeto pai será dispensado.
Deixe uma resposta