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…
Pelo menos acho que essa seria a opinião que andei vendo por ai…
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).
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.
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:
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.
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.
[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!
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
[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.
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.