| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2009 01:20:53
|
mayracarmeli
Smalltalk
Membro desde: 09/10/2009 01:10:26
Mensagens: 1
Offline
|
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)
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2009 08:18:32
|
xdraculax
Java Ninja
Membro desde: 12/01/2009 16:12:54
Mensagens: 286
Offline
|
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
This message was edited 1 time. Last update was at 09/10/2009 08:19:22
|
-Atenha-se a resolver o problema, e não criticar opiniões.
-Você percebe que está programando d+, quando está escrevendo identado!
-Não precisa estar certo, basta acreditar. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/10/2009 13:35:18
|
Alexandre Gazola
JavaTeenager
![[Avatar]](/images/avatar/07845cd9aefa6cde3f8926d25138a3a2.jpg)
Membro desde: 23/07/2004 14:48:23
Mensagens: 176
Localização: Rio de Janeiro
Offline
|
Complementando:
http://www.jguru.com/faq/view.jsp?EID=51520
abs
|
Alexandre Gazola
Blog: http://alexandregazola.wordpress.com
"Que proveito tem o homem ganhar o mundo inteiro e perder a sua alma?" (Mc. 8:36)
"Buscai, em primeiro lugar, o Reino de Deus e a sua justiça, e todas essas coisas vos serão dadas por acréscimo" (Mt. 6:33) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/10/2009 14:40:22
|
mochuara
GUJ Master
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline
|
mayracarmeli wrote: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)
Voce e todo mundo entende isso errado. E o motivo é a primeira regra OO: não tentar modelar objetos do mundo real.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/10/2009 16:00:24
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
tnaires wrote:
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.
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.
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.
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.
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.
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.
This message was edited 1 time. Last update was at 13/10/2009 16:03:55
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/10/2009 23:28:09
|
rodrigoy
GUJ Ranger
![[Avatar]](/images/avatar/cf79ae6addba60ad018347359bd144d2.jpg)
Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline
|
Vamos aos exemplos clássicos.
Agregacão: Simplesmente é um relacionamento do tipo "Parte-Todo" e isso não vai mudar praticamente nada no seu código. Agregação simplesmente é uma informação do projeto [ Rumbaught]. Na dúvida, não use. É isso mesmo que estou falando. Se for gerar confusão no seu projeto não use, pois Agregação não tem semântica na UML.
Exemplo Clássico:
Explicação: Simplesmente uma Equipe é o Todo e as Pessoas são as Partes. Nada muda se você simplesmente tirar aquele diamante dali.
Composição: é o relacionamento mais forte da UML. A idéia da Composição é que o conjunto todo de classes é como se fosse uma única coisa. Uma instância das partes não pode ser compartilhada e quando a classe forte (da do diamante) morre todos os compostos morrem junto.
Exemplo Clássico:
Um item pedido não pode estar associado a dois pedidos simultaneamente. Quanto o pedido morre os itens também morrem.
http://martinfowler.com/bliki/AggregationAndComposition.html
This message was edited 1 time. Last update was at 20/10/2009 23:28:31
|
Rodrigo Yoshima
www.ASPERCOM.com.br
Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro
Débito Técnico Blog: blog.aspercom.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 18:55:25
|
pgnt
Debugger
![[Avatar]](/images/avatar/4c6ec11e967c21b14b970b16579cdf13.png)
Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline
|
Deixei um exemplo em outro tópico http://www.guj.com.br/posts/list/85835.java#1010350, e gostaria de trazer aqui pra botar lenha na fogueira
Antes, uma das coisas que causam confusão é onde se toma a referência, seja a PARTE ou o TODO.
Tudo bem que a PARTE que não faz sentido sem o TODO seja uma composição, mas e o contrário?
Quando um TODO perde sentido sem a PARTE, que tipo associação temos?
-----------
O caso que postei se trata de ERRATAS de LIVROS.
A ERRATA pode ou não existir no LIVRO, se pensarmos no TODO (LIVRO) este não depende/não é necessariamente composto pela PARTE (ERRATA).
Mas uma vez que esta ERRATA (PARTE) exista, ela passa a compor o TODO (LIVRO).
Sob a perspectiva do TODO, a errata é agregada, onde necessáriamente não faz parte do LIVRO (que pode existir sem ERRATA).
Sob a perspectiva da PARTE, a ERRATA tem uma relação de composição com o LIVRO, já que ela sozinha não tem sentido.
Tomamos a consideração o TODO ou a PARTE na associação?
Como vocês modelariam este caso?
Valeu!
Abs
This message was edited 1 time. Last update was at 11/03/2010 18:56:39
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/03/2010 10:17:16
|
fabioEM
GUJ Master
Membro desde: 13/09/2007 13:34:23
Mensagens: 1041
Offline
|
Então de acordo com mo que foi dito;
homem --> pernas
é uma agregação de fato um homem pode viver sem pernas?è isso mesmo?
This message was edited 1 time. Last update was at 14/03/2010 10:19:29
|
"Um pouco de ciência nos afasta de Deus. Muito, nos aproxima." (Louis Pasteur)
Conheçam Sócrates: http://www.youtube.com/watch?v=SlJSF-V6yBA
Conheçam a obra social Célio Lemos: http://www.oscl.org.br/site/
Conheçam o Projeto: http://www.youtube.com/watch?v=9-k818tfG6M&feature=youtu.be
Sun Certified Java Programmer 1.5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/03/2010 10:57:55
|
paulofafism
JavaEvangelist
![[Avatar]](/images/avatar/d26b10ca0de48de1619fcefc39d00d64.jpg)
Membro desde: 02/05/2006 15:30:50
Mensagens: 475
Offline
|
Vamos aos exemplos clássicos.
Agregacão: Simplesmente é um relacionamento do tipo "Parte-Todo" e isso não vai mudar praticamente nada no seu código. Agregação simplesmente é uma informação do projeto [ Rumbaught]. Na dúvida, não use. É isso mesmo que estou falando. Se for gerar confusão no seu projeto não use, pois Agregação não tem semântica na UML.
Exemplo Clássico:
Explicação: Simplesmente uma Equipe é o Todo e as Pessoas são as Partes. Nada muda se você simplesmente tirar aquele diamante dali.
Composição: é o relacionamento mais forte da UML. A idéia da Composição é que o conjunto todo de classes é como se fosse uma única coisa. Uma instância das partes não pode ser compartilhada e quando a classe forte (da do diamante) morre todos os compostos morrem junto.
Exemplo Clássico:
Um item pedido não pode estar associado a dois pedidos simultaneamente. Quanto o pedido morre os itens também morrem.
http://martinfowler.com/bliki/AggregationAndComposition.html
Excelente explicação, simples e direta
|
Paulo Vinícius Moreira Dutra
Perfil Linkedin
Lattes
Paulo Viníciu's Blog
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/03/2010 14:44:15
|
pgnt
Debugger
![[Avatar]](/images/avatar/4c6ec11e967c21b14b970b16579cdf13.png)
Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline
|
Entao fabioEM, o problema é que:
Do ponto de vista do TODO (Homem) está certo dizer que é uma agregação, já que ele pode existir sem a PARTE (perna).
Mas do ponto de vista da PARTE (perna) é uma composição, já que uma perna sozinha não tem sentido de ser e nem ser aplicada a outro homem.
Por isso volto a perguntar qual a referência ideal que devemos ter na modelagem, a PARTE ou o TODO?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/03/2010 16:03:54
|
Diego Marinho
JavaChild
Membro desde: 21/02/2008 14:46:41
Mensagens: 130
Localização: Recife
Offline
|
? Agregação e Composição
? Fonte freqüente de confusão!
? Agregação: indica que a relação entre duas classes é do
tipo é-parte (ex.: o motor é parte do carro. As rodas são
parte do carro)
? Composição: indica que a relação entre dois objetos é do
tipo é-todo (ex.: um ponto pertence a um círculo. Não existe
o círculo sem aquele ponto)
? Se o círculo for excluído, o ponto é excluído junto!
?Recomenda-se sempre usar composição...
|
Keep my head in clouds. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/03/2010 17:05:32
|
pgnt
Debugger
![[Avatar]](/images/avatar/4c6ec11e967c21b14b970b16579cdf13.png)
Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline
|
Ok Diego, e no caso que postei sobre LIVRO e ERRATA?
Um livro pode existir sem errata mas, se houver errata e o livro for excluído, as erratas vão junto.
Se o livro pode existir sem errata = agregação (essa é a perspectiva do TODO)
Se a errata é excluída junto com o livro = composição (essa é a perspectiva da PARTE)
Erratas de livros caem em qual caso?
This message was edited 3 times. Last update was at 14/03/2010 17:08:37
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/03/2010 21:00:21
|
Diego Marinho
JavaChild
Membro desde: 21/02/2008 14:46:41
Mensagens: 130
Localização: Recife
Offline
|
Cara neste caso, vai depender da regra de negócio aplicado a sua necessidade. O exemplo que dei é um exemplo genérico e ponderável. De maneira geral (pensando de maneira macro), um livro pode sim, existir sem errata. Agora uma errata não pode existir sem um livro(Agregação), entende. Agora dependendo da regra de negócio aplicado ao "seu negócio", vai depender. Tem que ter o "feeling" para perceber isso. Mas vc está indo bem, apenas pense nesta forma e adque a sua solução. A UML não visa complicar e sim deixar o mais simples possível, como linguagem universal de "expressão" em soluções para expressar uma solução de software, objeto e seu desenho mental. Qualquer dúvida sugiro ler o livro mais famoso, escrito pelos "pais" da UML. Com o nome de: Guia do Usuário - Grady Booch; Ivar Jacobson; James Rumbaugh. []'s.
This message was edited 1 time. Last update was at 14/03/2010 21:03:03
|
Keep my head in clouds. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/03/2010 23:24:29
|
pgnt
Debugger
![[Avatar]](/images/avatar/4c6ec11e967c21b14b970b16579cdf13.png)
Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline
|
Valeu Diego.
Se a referência é relativa, eu modelaria a relação errata - livro como dependência por conta dos registros de erratas serem apagadas junto com o livro, apesar disso não ser verdade sob a perspectiva do todo.
Acho que é um caso mais para a Filosofia do que pra TI rs
abs
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/03/2010 11:52:51
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
pgnt wrote:Ok Diego, e no caso que postei sobre LIVRO e ERRATA?
Um livro pode existir sem errata mas, se houver errata e o livro for excluído, as erratas vão junto.
Se o livro pode existir sem errata = agregação (essa é a perspectiva do TODO)
Se a errata é excluída junto com o livro = composição (essa é a perspectiva da PARTE)
Erratas de livros caem em qual caso?
Existem 3 principais tipos de relação em OO. E nenhum deles têm relação com integridade referencial. OO não é banco de dados.
Quando vc pergunta "se houver errata e o livro for excluído, as erratas vão junto" isso não faz sentido em OO.
A relações possiveis : Associação , Agregação e Composição.
Associação é o simples Tem-Um. Em UML é a linha sem losangulos.
Agregação é uma associação em que não ha referencia recursiva. Ou seja, Se A contém B, B não contém A, nem mesmo através de C.
Composição é uma agregação em que o ciclo de vida dos filhos é controlada pelo pai.
Uma errata não pode viver sem o livro, e o livro tem erratas. Erratas são de livros, ou seja, duas erratas relativas ao mesmo texto podem acontecer em livros diferentes. Portanto Um livro tem várias erratas associadas e um errata tem um livro associado. Porque a errata tem referencia ao livro, não é uma agregação nem uma composição.
quando o livro é removido, a sua associação à erratas desaparece. Porque o livro foi removido, a errata não se relaciona a ninguem, logo ela é inconsistente e é removida tb. A integridade referencial não depende apenas do tipo de associação.
Em linguagem moderna , Livro é um Agregado. Neste sentido, Errata está contida dentro de livro. Remover o livro remove todo o que está "dentro" dele, é como ao remover o livro, o nome dele é removido.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
|
|