Dúvida sobre OO [resolvido]

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.