Entendo qual é a composição do OOP, mas não consigo ter uma ideia clara do que é a agregação. Alguém pode explicar?
object-oriented
Vinoth Kumar CM
fonte
fonte
De http://en.wikipedia.org/wiki/Object_composition
Portanto - enquanto você tem um relacionamento de propriedade com a composição, o objeto de propriedade também é destruído quando o proprietário é - uma agregação (e os objetos contidos) pode existir independentemente.
-
Atualização: Desculpas - esta resposta é simplista demais em retrospectiva.
c.batt fornece uma excelente definição em sua resposta: Agregação x Composição
fonte
Não existe uma explicação única. Diferentes autores significam coisas diferentes por agregação. A maioria não significa realmente nada específico.
fonte
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 contêiner, isso é chamado de associação forte)
A agregação é uma associação fraca (se a vida do objeto contido não depende do objeto do contêiner, isso é chamado de associação fraca)
Exemplo:
fonte
Composição (mistura) é uma maneira de combinar objetos simples ou tipos de dados em objetos mais complexos. As composições são um componente essencial de muitas estruturas básicas de dados
A agregação (coleção) difere da composição comum, pois 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
Ambos denotam relação entre objeto e diferem apenas em sua força.
Notações UML para diferentes tipos de dependência entre duas classes
Composição : Como o Motor faz parte do Carro, o relacionamento entre eles é Composição. Aqui está como eles são implementados entre as classes Java.
Agregação : Como a Organização tem Pessoa como funcionários, o relacionamento entre eles é Agregação. Aqui está como eles se parecem em termos de classes Java
Fonte
fonte
agregação é uma coleção simples, como um saco de bolas de gude
composição implica dependências internas / funcionais, como as dobradiças de uma caixa
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!]
fonte
Eu sempre vejo a composição como 'precisa de um', ou seja, um carro precisa de um motor e a agregação como 'coisas relacionadas a um propósito'. Portanto, mantendo a analogia do carro, minha agregação pode ser representar uma jornada que pode envolver a aproximação de um carro e passageiros. A jornada não é de carro ou de 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 seu motor são normalmente destruídos juntos.
fonte
Semanticamente, todos os conjuntos são feitos de subconjuntos, certo? Portanto:
A agregação ocorre quando esses subconjuntos existem independentemente do conjunto pai. Como 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. Como uma folha é parte de uma árvore ou 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 descarta, os objetos agregados também devem ser descartados. No mesmo cenário para uma composição, os objetos filho compostos persistirão e o objeto pai será dispensado.
fonte
Que tal esse 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 exista um método específico que exclua cada objeto à medida que o ponteiro é excluído.
fonte