Duvida OO

6 respostas
E

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??

6 Respostas

hiram

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

Lavieri

que tal pensar assim ?

public class Usuario {
    private Pessoa pessoa;
    private String login;
    private String senha;
    
    //... restante da classe
}

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

Pessoa fulano = findByName("Fulano");

if (fulano.isFuncionario()) {
    Funcionario fun = fulano.getFuncionario();
     //...
}

if (fulano.isUsuario())
    //... etc etc etc
E

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???

Lavieri

é 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…

E

Muito obrigado Lavieri, esclareceu bem minha duvida, valeu…

H

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

Criado 13 de março de 2009
Ultima resposta 14 de mar. de 2009
Respostas 6
Participantes 4