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.
Não, Não. Pelo que entendi, agregação é a forma que eu recebo esse valor ou seja no set ou construtor.
public void setEndereco(Endereco endereco){
this.endereco = endereco;
}
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
[quote=gilluan]Não, Não. Pelo que entendi, agregação é a forma que eu recebo esse valor ou seja no set ou construtor.
public void setEndereco(Endereco endereco){
this.endereco = endereco;
}
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[/quote]Opa, valeu pelo apoio.
E como ficaria o set/construtor de um cara que utilize composição?
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.
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.
[quote=Hebert Coelho][quote=gilluan]Não, Não. Pelo que entendi, agregação é a forma que eu recebo esse valor ou seja no set ou construtor.
public void setEndereco(Endereco endereco){
this.endereco = endereco;
}
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[/quote]Opa, valeu pelo apoio.
E como ficaria o set/construtor de um cara que utilize composição?[/quote]
public class Cliente{
private long id;
private String nome;
private Endereco endereco;
public Cliente(long id, String nome, Endereco endereco){
this.id = id;
this.nome = nome;
this.endereco = endereco;
}
//getters e setters
}
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.