Agregação ou composição?

Boa noite.

Neste exato momento, estou tendo aula de Análise e Projeto Orientado a Objetos. O professor deu o seguinte exemplo:

Computador --> Memória

Esse tipo de relacionamento, na opinião de vocês, é agregação ou composição? Por quê?

P.S. - isso não é trabalho de faculdade. Apenas não concordo com a classificação que o professor deu. Após algumas opiniões, eu posto o que ele disse.

[quote=tnaires]Boa noite.

Neste exato momento, estou tendo aula de Análise e Projeto Orientado a Objetos. O professor deu o seguinte exemplo:

Computador --> Memória

Esse tipo de relacionamento, na opinião de vocês, é agregação ou composição? Por quê?

P.S. - isso não é trabalho de faculdade. Apenas não concordo com a classificação que o professor deu. Após algumas opiniões, eu posto o que ele disse.[/quote]

Oi Tarso

Pra mim isso se trata de uma Agregação, já que tirando uma memória do computador ela continua existindo e pode ser colocada em outro computador… :smiley:

Pelo menos acho que essa seria a opinião que andei vendo por ai…

http://www.ericksasse.com.br/agregao-x-composio/
http://www.javafree.org/topic-862928-Associacao-Composicao-e-Agregacao.html
http://www.plugmasters.com.br/sys/materias/667/1/Escolha-o-que-usar,-Agrega��o-ou-Composi��o
http://www.guj.com.br/posts/list/70434.java

Bem, a seguinte situação ilustra uma agregação: voce tem uma classe Familia e uma segunda classe Pessoa, todos sabem que uma familia é composta por muitas pessoas (uma Collection de pessoas), sendo assim, temos uma relação de agregacao entre as classes Familia e Pessoa, analogamente ocorre o mesmo com as classes Computador e Memoria e nada impede que um computador possua um conjunto contendo uma unica Memoria (minha maquina é assim…rsrr).

Ate

[quote=André Fonseca]Oi Tarso

Pra mim isso se trata de uma Agregação, já que tirando uma memória do computador ela continua existindo e pode ser colocada em outro computador… :smiley:

Pelo menos acho que essa seria a opinião que andei vendo por ai…

http://www.ericksasse.com.br/agregao-x-composio/
http://www.javafree.org/topic-862928-Associacao-Composicao-e-Agregacao.html
http://www.plugmasters.com.br/sys/materias/667/1/Escolha-o-que-usar,-Agrega��o-ou-Composi��o
http://www.guj.com.br/posts/list/70434.java[/quote]
Eu juraria de pé junto que seria composição, mas depois da aula conversei com o professor e percebi que eu estava errado.

Eu pensava que composição ocorria quando o todo não poderia existir sem suas partes. No exemplo, não faz sentido a existência de um computador sem a sua memória - ele não funciona. Aí onde estava o meu equívoco: na composição, é a parte que não pode existir sem o todo, e não o contrário. Por exemplo, não há razão de existência para os itens de uma nota fiscal sem sua nota correspondente. Nesse caso, uma nota é composta de itens.

Conforme você mencionou - e conforme seus links apontam - na agregação o todo pode existir sem a parte. Logo, no caso do Computador --> Memória, a resposta certa é agregação.

Essa definição não está precisa. Tanto agregação e composição são classes de um relacionamento TEM-UM. No caso de Família e Pessoa, tudo depende da seguinte pergunta: uma pessoa existe sem uma família? Caso sim, é agregação; caso contrário, composição.

Pessoal,

Agregação ou Composição depende do domínio que você está estudando/modelando.

[ ] 's

Bom, conversei um pouco com uma amigo e ele me disse que soa dois conceitos há muito tempo utilizado por analistas quando estao modelando um sistema. Na verdade Composicao e Agregacao sao dois tipos distintos de uma Associacao. Encontrei um material que pode nos ajudar:

http://www.plugmasters.com.br/sys/materias/667/1/Escolha-o-que-usar,-Agrega��o-ou-Composi��o

abracao.

edit…

li rapido, intendi errado e falei merda…

[quote=igorCouto]Pessoal,

Agregação ou Composição depende do domínio que você está estudando/modelando.

[ ] 's

[/quote]
É verdade. Mas qual seria a situação onde Computador --> Memória poderia ser classificado de outra forma que não fosse agregação?

Minha opinião…

Acredito que o Vini Fernandes está apontando para a direção correta.

No modelo estatico, em dado momento da analise tudo entre as entidades não passa de associações; a medida que o estudo começa a evoluir o desenvolvedor adiciona mais detalhes semanticos a estas associações, no caso associação por agregação ou por composição (simplificado fica apenas agregação ou composição).

Na associação por agregação os agregados deixam de existir quando a entidade que os agrega deixa de existir no caso da composição quando a entidade que os compõe deixa de existir eles continua existindo.

O problema dos exemplos é que isso tudo é apenas conceitos que abstrai aspectos da realidade se vc se apoiar 110% no mundo “real” muitas vezes a coisa pode ficar confusa.

flws

Se a memória não tem identidade e existe apenas para descrever este computador. Quando o computador é excluído, ela vai junto.

depende qual memoria… se for processador -> registradores a existencia dos registradores não fazem sentido sem o processador… então seria uma composição…

O exemplo por acaso está ambíguo? Processador, registradores? Estamos falando de computador e memória RAM. Além disso, um registrador continua existindo pois pode ser reutilizado em outro computador. Não é composição.

Desculpem a vacilada inverti as idéias, no meu ultimo post sobre o assunto: :oops:

Corrigindo…

Na associação por agregação os agregados continuam existindo quando a entidade que os agrega deixa de existir no caso da composição quando a entidade que compõe deixa de existir os componentes que compõe deixam de existir tambem.

flws

[quote=fantomas]Desculpem a vacilada inverti as idéias, no meu ultimo post sobre o assunto: :oops:

Corrigindo…

Na associação por agregação os agregados continuam existindo quando a entidade que os agrega deixa de existir no caso da composição quando a entidade que compõe deixa de existir os componentes que compõe deixam de existir tambem.

flws

[/quote]
Exato.
Agregação -> as partes existem sem o todo.
Composição -> as partes não existem sem o todo.

No caso de termos classes como: Funcionario, Departamento e Empresa, o q seria correto, composição ou agregação?

A professora disse q era agregação, mas vcs disseram aqui que na agregação a parte existe sem o todo, e pra mim um Departamento não existe se não estiver em uma empresa!

Ou estou entendendo errado?

Agradeço se puderem me esclarescer!

(Y)

O funcionário existe caso saia da Empresa? Sim
Departamento existe fora da empresa? Não
Empresa tá no topo…

Cri uma modelagem assim:

Empresa possui uma lista de Departamentos. Não sei se você está falando de modelagem de banco, mas se for.
Coloque uma tabela para representar o relacionamento entre Funcionário --> Departamento

NO banco: Empresa 1 >> n Departamento | Funcionário 1 >> n FuncionarioDepartamento n >> 1 Departamento
Nas classes: Empresa possui uma lista de Departamento, um Departamento possui uma lista de Funcionários

Complementando:

http://www.jguru.com/faq/view.jsp?EID=51520

abs

[quote=mayracarmeli]No caso de termos classes como: Funcionario, Departamento e Empresa, o q seria correto, composição ou agregação?

A professora disse q era agregação, mas vcs disseram aqui que na agregação a parte existe sem o todo, e pra mim um Departamento não existe se não estiver em uma empresa!

Ou estou entendendo errado?

Agradeço se puderem me esclarescer!

(Y)[/quote]

Voce e todo mundo entende isso errado. E o motivo é a primeira regra OO: não tentar modelar objetos do mundo real.

[quote=tnaires][quote=André Fonseca]Oi Tarso

Pra mim isso se trata de uma Agregação, já que tirando uma memória do computador ela continua existindo e pode ser colocada em outro computador… :smiley:

Pelo menos acho que essa seria a opinião que andei vendo por ai…

http://www.ericksasse.com.br/agregao-x-composio/
http://www.javafree.org/topic-862928-Associacao-Composicao-e-Agregacao.html
http://www.plugmasters.com.br/sys/materias/667/1/Escolha-o-que-usar,-Agrega��o-ou-Composi��o
http://www.guj.com.br/posts/list/70434.java[/quote]
Eu juraria de pé junto que seria composição, mas depois da aula conversei com o professor e percebi que eu estava errado.

Eu pensava que composição ocorria quando o todo não poderia existir sem suas partes. No exemplo, não faz sentido a existência de um computador sem a sua memória - ele não funciona.
[/quote]

Composição ocorre quando o todo existe quando é formado pelas partes. Numa implementação, o todo é forçado e ter os componentes. É muito claro quando vc precisa de passar B para A no construtor de A , isso é uma composição.
O exemplo claro são os conjuntos de animais : uma manada é composta de bois. Os bois existe per se, a manada só existe quando eles são compostos.

Este ideia de Composição/componente é um pouco diferente do componentes (vulgo) que usamos em frases como “o computador é formado pelos seus componentes”. A frase que vc citou é comumente utilizada para explicar composição,mas é fraca para distinguir alguns casos como este.

Um computador sem memória não existe ( não importa se funciona). Porque um computador é, por definição, definido como algo que tem memória. Se não tem memoria, não é mais um computador. O que quero dizer é que o vinculo é logico, não fisico.

Não. Vc estava certo para começo de conversa. A nota existe quando é formada pelos itens. Sem itens não ha nota. Ou seja, a nota são os itens (a manada são os bois). Da mesma forma o computador são o processador e a memoria. O que não é o computador é chamado de periférico (um computador funciona sem monitor e até sem placa gráfica, mas não sem CPU e memoria (repare que CPU e memoria são até abstrações em si mesmas )

A nota existe quando é formada por itens. Os itens existem por si mesmos, independentemente de como são “compostos” já que eles são abstrações de um evento real :a venda/compra de um produto.

[quote]
Conforme você mencionou - e conforme seus links apontam - na agregação o todo pode existir sem a parte. Logo, no caso do Computador --> Memória, a resposta certa é agregação.[/quote]

Eu discordo. Um monte de peças não forma um computador. Um computador existe quando as peças certas estão presentes (funcionando ou não).

Outro exemplo : As pessoas têm membros ou são formadas por membros ? Elas têm membros. Elas não deixam de existir se membros forem amputados. E corpo humano , têm membros ou é formado por membros ? Ele é formado por membros. É por isso que se chama “membro” (!). Repare, parece a mesma coisa, mas não é. Existe a associação (errada, mas proposital no exemplo)
de que uma pessoa é o mesmo que corpo humano. Não é. Na realidade uma pessoa tem um corpo (associação) e um corpo é composto de membros (composição). Porque existe uma relação 1-1 Pessoa-Corpo é fácil confundir ( é por isso que ficção cientifica não é entendida por todos ela joga muito com essas diferenças subliminares)
Claro, alguem pode dizer estou usando a definição “pura” de corpo humano e que arrancar um braço não faz o corpo deixar de existir, contudo, existe uma outra forma de entender a composição.

A é composto por B quando 1 objeto de B só pode pertence a um 1 objeto de A num dado momento. Ou seja, não podem ser partilhado. Itens de nota, memorias e membros não podem ser partilhados. É por isso que é uma composição. Não ha itens pertencendo a duas notas simultaneamente.

Pode existir um contexto em que isto seja possivel (membros de corpos roboticos, irmãos siameses) e assim, como alguem disse, a diferença é sutil e muda conforme o contexto.

No fim depende da ppr definição de computador no contexto da pergunta. E esse contexto é deixado em aberto,e exatamente para gerar polémica (porque é esse o objetivo do professor). num caso real não existe essa duvida, pois se existe ela é sanada imediatamente.