Boa noite pessoal, estou tentando modelar um sistema para controle de biblioteca.
Dae tenho o seguinte: uma classe Pessoa. Tenho tambem as classes Usuario, Fornecedor, Autor, Funcionario , todas elas herdam de Pessoa.
Até alí tudo bem , so que um Funcionario pode ser tambem Usuario e Autor. Como modelar essa situacao?? Alguem me ajuda??
Eduardo, o que você acha sobre ter uma instância de Usuário e Autor dentro de Funcionário?
Certamente existe uma solução mais bem modelada pra isso evitando a repetição do código dos métodos de Usuário e Autor em Funcionário.
Vou continuar pensando e posto algo… :roll:
Excelente pergunta.
[]s
que tal pensar assim ?
[code]public class Usuario {
private Pessoa pessoa;
private String login;
private String senha;
//... restante da classe
}[/code]
desta forma vc fica com a relação…
Todo usuario tem 1 pessoa
Uma pessoa pode ter ou não um usuario…
relação de 1 - 0…1
…
O mesmo raciocinio serve para o resto…
Ate pq, um funcionário pode ser Autor, Usuário e Fornecedor ao mesmo tempo…
assim vc pode guardar os dados referente a uma Pessoa dentro da classe pessoa…
pode separar as informações de usuário, autor e fornecedor em outras classes separadas… e fazer o link de todas elas com pessoa…
manter bi-direcional as relações… e assim vc pode verificar coisas como
[code]Pessoa fulano = findByName(“Fulano”);
if (fulano.isFuncionario()) {
Funcionario fun = fulano.getFuncionario();
//…
}
if (fulano.isUsuario())
//… etc etc etc[/code]
Opa. Acho que e por ali mesmo. O interesante que fazendo um diagrama ER vc chega nessa solucao bem rapido. Acho que da proxima vez fou fazer meus diagramas ERs antes do diagrama de classes. O que vcs acham??? isso ta certo ou errado???
é valido desde que seu ER fique OO … se vc tem mais facilidades com Banco de dados, pode pensar nas tabelas, e verificar sua viabilidade para um modelo de OO, e caso precise fazer modificações…
Herança é algo muito perrigoso, por amarrar totalmente a sua classe, eu sempre antes de fazer uma herença eu verifico c não é melhor via interface, ou quebrar o objeto em partes menores…
Sua primeira ideia é pensar, poxa vida, Uma Funcionário é uma Pessoa, logo herda desta, Usuario tb é uma pessoa, logo herda desta, Fornecedor…
Porem há outra forma de pensar, onde vc imagina, Uma Pessoa pode criar um login e senha, e passar a ganhar um ID de usuario, assim um usuario não é uma pessoa, e sim, um registro, um registro de uma pessoa… assim a Pessoa é dono do usuario… por isso passa pra dentro da classe…
O mesmo racicinio pode ser aplicado a Funcionario e Fornecedores, onde essas duas coisas nada mais é que um Vinculo, que pode ser um contrato, um cracha ou outro objeto, por isso Ser funcionario é ligar a Pessoa a Uma empresa, e o helo é o funcionario, assim o que vc precisa é que pessoa possa contar com um objeto funcionario, com as caracteristicas principais, salario, data de adesao, etc etc etc… o mesmo ocorre para fornecedor, e assim vc chega na solução de separa as classe e não usar herença…
eu sempre evito herança, herda uma classe é amarrar de + uma classe…
Muito obrigado Lavieri, esclareceu bem minha duvida, valeu…