Composição, Agregação e Associação

Olá a todos!
Sou iniciante em Java e tenho algumas dúvidas.
Já naveguei pelo GUJ e por outros sites e ainda não consegui encontrar uma definição precisa (conceitual) sobre o que seriam e quais as diferenças entre Composição, Agregação e Associação.
Se alguém puder me ajudar eu agradeceria muito.

Thiagolgf

Associação

A associação é uma das formas mais simples de relacionamento entre classes e ocorre quando existe uma classe que possui um atributo de outra classe(objetos ou array de objetos ).

Este tipo de relacionamento também é conhecido por relacionamento ?tem um(a)?.

Por exemplo, quando uma associação entre a classe ?Pessoa? e a classe ?Endereco?, diz que uma pessoa ?tem um? endereço.

Agregação:

A agregação é uma forma de associação caracterizada por um relacionamento do tipo parte-todo, em que uma das pontas da associação é a parte é o todo.

Por exemplo as classes Turma, Estudante e Instrutor, o Estudante é ligado a Turma, o Instrutor também e ligado a Turma.
Ou seja Turma é um todo, enquanto os Estudantes e o Instrutor são partes do todo.
A Turma é ?Hierarquicamente? superior? aos Estudantes e ao Instrutor,
Ou seja, a Turma contém os Estudantes e o Instrutor. Visto de outra forma, os Estudantes e o Instrutor fazem parte da turma.

Composição

Composição é um tipo de associação ainda mais forte que agregação. A composição também é um relacionamento caracterizado como parte / todo, mas, neste caso, o todo é responsável pelo ciclo de vida da parte.
Por exemplo a classe Departamento ligada a Escola , se o objeto da classe Escola for destruído, todos os departamentos devem ser excluídos também.

Abraços.

Fica com DEUS.

5 curtidas

Associação eu entendi.

Quanto à Agregação e Composição percebi que a diferença é mínima (sutil). Na Composição se o todo é destruído, a parte também é. Já na Agregação se o todo é destruído, a parte ainda pode continuar existindo.

É isso mesmo?

Thiagolgf

Isso mesmo.

Agregação -> as partes pode existem sem o todo.
Composição -> as partes não existem sem o todo.

Abraços.

Fica com DEUS.

Só uma observação, que dentro do Java e linguagens de programação em geral, a implementação desses conceitos é a mesma. Não tem como dizer só olhando para a declaração de uma classe se a relação dela com seus atributos é de agregação ou composição.

Fexx, muito obrigado pela explicação!

Bruno, essa seria a minha próxima pergunta. Te agradeço pela nota.

Dúvida solucionada.

Thiagolgf

Realmente não tem só conhecendo o projeto, por isso na duvida use associação simples mesmo.