Duvida OO

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…

http://www.guj.com.br/posts/list/15/120701.java