Olá, pessoal!
Peço desculpas se estiver postando a minha dúvida no fórum errado, ou se já houver um tópico respondendo-a. Mas, a verdade é que nem sei qual seria o melhor assunto para ela.
Vi um exemplo, uma vez, assim:
public class Uf {
private String id;
private String nome;
private String sigla;
}
public class Cidade {
private String id;
private String nome;
private Uf uf;
}
Na classe Cidade havia um atributo “uf” que recebia o objeto Uf inteiro. Como eu poderia fazer o mesmo entre as classes Empresa e Funcionario, por exemplo?
Na classe Empresa, eu teria um List - até aí, tudo bem. Mas, na classe Funcionario, ao invés de um atributo que recebesse apenas o CNPJ desta empresa, seria correto receber o objeto Empresa todo?
No exemplo que vi, o Hibernate lida com o atributo “uf” de forma totalmente transparente. Mas, no dia a dia, essa abordagem é comum?
Brigadão!
Alessandro.
Primeiro, pense na relação entre funcionário e empresa. Uma empresa possui N funcionários. Um funcionário tem N empresas? Tem uma só? Não tem nenhuma?
Se for coerente, você pode criar um atributo empresa, que nada mais é que uma instância de objeto da classe Empresa, dentro da classe Funcionario. Isso é conhecido como agregação. Caso o relacionamento seja forte a ponto de um funcionário não existir sem uma empresa, passa a se chamar composição.
Sim seria bom você colocar todo o objeto inteiro de referencia a empresa
Isso não faria muita diferença por que as variáveis guardam o endereço de memoria em que o objeto se encontra não o objeto em se, então se uma de suas preocupações seria que você taria armazenando um objeto inteiro em cada funcionário, não se preocupe, você pode ter 100k funcionário com o objeto da empresa que o gasto de memoria será exatamente o mesmo, tirando isso é até bom você fazer isso pois fica mais fácil de você recupera a empresa relativa ao funcionário
acima temos uma melhor explicação
Obrigado, pessoal, pelos esclarecimentos!
Machado, obrigado pelas definições! Não sabia conceituar bem o meu problema, mas agora farei mais pesquisas sobre composição e agregação, do ponto de vista de OO.
Victor, a minha preocupação não era mesmo quanto ao consumo, mas quanto à elegância do código e boas práticas. Pensando um pouco mais sobre a essência da minha dúvida, como ficaria uma relação de um para um?
Por exemplo, Empresa contém Veículos e contém Funcionários, mas Veículo V está relacionado exclusivamente com Funcionário F e vice-versa. Neste caso, ainda do ponto de vista da elegância e boas práticas, eu poderia armazenar todo o Veículo como um atributo de Funcionário e todo o Funcionário como um atributo de Veículo?
Brigadão novamente!
Alessandro.
até onde sei isso pode ser bom você armazenar pois assim você não vai precisar utilizar de métodos de busca/procura para pegar o veiculo da pessoa X, ou vice verça
VerSa, por favor, não assassine o português.
Entendo que se cada carro está associado a um funcionário, você pode ter apenas o funcionário como atributo do carro, pois, nem todo funcionário terá um carro, mas todo carro terá um funcionário, certo?
Obrigado novamente, Victor e Machado!
Machado, entendi a lógica que você explicou. Muito obrigado! Seguirei essa linha de pensamento ao modelar minhas classes a partir de agora.
Um forte abraço a todos e muito obrigado pela atenção!
Alessandro.
Camarada, essa análise é específica para este caso. O interessante da OO é que para várias situações, existem várias possibilidades. Não há uma bala de prata, é preciso ver cada situação isoladamente.