Uma dúvida que sempre me recorre. Tenho uma classe Cliente, e uma Endereco. Em Enderco tenho como atributos, rua, bairro, cidade, etc. E em Cliente tenho nome, cpf,etc…, endereco.
Qual a associação correta entre elas, associação simples, agregação ou composição? E como a classe Cliente ficaria em Java, dependendo do tipo de associação usada?
Pense da seguinte forma, um endereço é algo fundamental a um cliente, de tal forma que um objeto cliente não pode existir sem um endereço?
Se a resposta for não, o cliente existe sem um endereço, a associação é agregação (aquela do losango branco).
A classe java teria o atributo endereço e seus getters e setters.
Se a resposta for sim, um cliente não pode existir sem um endereço, a associação é uma composição (aquela do losango colorido).
A classe java teria que ter o endereço passado no construtor, pois, é a única forma de garantir que um atributo obrigatório foi definido.
G
gilluan
Eu prefiro composição, ficaria mais ou menos assim
publicclassCliente{privatelongid;privateStringnome;privateEnderecoendereco;//getters e setters}
Me corrijam se estiver errado, é sempre bom novas opniões.
H
Hebert_Coelho
gilluan:
Eu prefiro composição, ficaria mais ou menos assim
publicclassCliente{privatelongid;privateStringnome;privateEnderecoendereco;//getters e setters}
Me corrijam se estiver errado, é sempre bom novas opniões.
Por curiosidade, como ficaria o agregação?
D
drsmachado
Em partes está correto, faltou definir como esta relação se estabelece. Aqui e aqui tem mais detalhes.
D
drsmachado
Hebert Coelho:
gilluan:
Eu prefiro composição, ficaria mais ou menos assim
publicclassCliente{privatelongid;privateStringnome;privateEnderecoendereco;//getters e setters}
Me corrijam se estiver errado, é sempre bom novas opniões.
aproveitando, que tenho sua atenção, gostaria de parabeniza-lo pela iniciativa de vários exemplos e tutoriais de JPA e Hibernate,
me ajudaram e me ajudam bastante no dia a dia.
Se eu tiver entendido errado, aproveitando gostaria que você deixasse mais claro o meu entendimento.Rsss
H
Hebert_Coelho
gilluan:
Não, Não. Pelo que entendi, agregação é a forma que eu recebo esse valor ou seja no set ou construtor.
aproveitando, que tenho sua atenção, gostaria de parabeniza-lo pela iniciativa de vários exemplos e tutoriais de JPA e Hibernate,
me ajudaram e me ajudam bastante no dia a dia.
Se eu tiver entendido errado, aproveitando gostaria que você deixasse mais claro o meu entendimento.Rsss
Opa, valeu pelo apoio.
E como ficaria o set/construtor de um cara que utilize composição?
T
TiagoSena
Hebert Coelho:
Isso depende de como você irá utilizar.
Pessoa só pode ter um endereço? Um para Um
Pessoa pode ter vários endereços? Um para Muitos
Endereço poderá ter várias pessoas? Muitos para muitos
Eu estou aprendendo assim também na faculdade.
Tipo depende de como o requisito está falando que tem que ser.
Eu gosto muito de fazer a mesma coisa das várias formas que pode ter no requisito
pois ajuda a abrir nossa mente para modos diferentes de ver as coisas.
Thanks
M
MarkKnopfler
Composição ou agregação não é algo que vc escreve em código, e sim uma forma das classes se relacionarem. A composição também é chamada de “agregação forte” ou “relacionamento todo-parte” e se caracteriza por:
a existência de um depende da existência do outro. O objeto “parte” não tem existência solta, ele está sempre associado ao objeto “todo” (contêiner)
cada “todo” tem as suas “partes” associadas, não compartilha instâncias com outros
o todo e a parte são instanciados/destruídos juntos
O exemplo clássico é a Venda e seus Itens. Não há venda sem itens, e não há item sem venda. Cada item pertence a apenas uma venda.
Agora o relacionamento entre cliente e endereço será sempre de agregação, pois o cliente não é composto por um ou mais endereços. O endereço tem existência independente do cliente. O cliente pode mudar de endereço, ou pode morrer e deixar de existir. E o mesmo endereço pode ter vários clientes morando nele.
Fazendo um paralelo com os bancos de dados, um relacionamento um-para-muitos frequentemente é uma composição na orientação a objetos, mas nem sempre. Agora, um relacionamento muitos-para-muitos do banco de dados sempre será uma agregação no modelo de objetos.
G
gilluan
Hebert Coelho:
gilluan:
Não, Não. Pelo que entendi, agregação é a forma que eu recebo esse valor ou seja no set ou construtor.
aproveitando, que tenho sua atenção, gostaria de parabeniza-lo pela iniciativa de vários exemplos e tutoriais de JPA e Hibernate,
me ajudaram e me ajudam bastante no dia a dia.
Se eu tiver entendido errado, aproveitando gostaria que você deixasse mais claro o meu entendimento.Rsss
Opa, valeu pelo apoio.
E como ficaria o set/construtor de um cara que utilize composição?
publicclassCliente{privatelongid;privateStringnome;privateEnderecoendereco;publicCliente(longid,Stringnome,Enderecoendereco){this.id=id;this.nome=nome;this.endereco=endereco;}//getters e setters }
estou fazendo errado?
L
lauro91
Olá pessoal, obrigado pelas mensagens, estou tirando muitas dúvidas. No entanto sempre me surgem mais, em especial se tratando de modelagem. Deêm uma olhada no exercício e critiquem, os atributos, as classes, etc.