sei que o java nao aceita herança multipla, entao fiquei meio que na dúvida.
eu tenho a classe pessoaFisica que herda pessoa, ate ai tudo bem
agora vou ter a classe Funcionario, que vai ter os dados de PessoaFisica e Departamento.
a duvida é,
na hora de criar a classe Funcionario
1-herdo os dados de PessoaFisica e coloco Departamento como um atributo
2-coloco PessoaFisica e Departamento como atributo.
eu acho o 1 caso mais correto, porem, queria a opiniao de vcs
A classe funcionário herdaria de Departamento? Isso significaria que Funcionario é uma especialização de Departamento, acha isso correto?
Como é o relacionamento? Um funcionário está alocado em um departamento? Se for assim, vai ser um atributo.
Seu Funcionario vai ser uma especialização de PessoaFisica? Você precisa de dados de pessoa física para seu funcionário? Então é.
É importante primeiramente entender qual a necessidade de criar uma classe funcionário e uma classe pessoa física:
Em algum momento haverá um cadastro ou algo do genero onde você vai precisar reaproveitar os dados de somente pessoa física? se sim bom ai temos que manter como está feito e buscar uma solução, porém talvez você não precise criar estas duas classes, e a classe PessoaFisica poderia se juntar com a classe Funcionario tornando-se uma única classe onde teria todos os dados de pessoa física e mais os dados de departamento, eu particularmente não consigo ver um caso em que seja diferente disso.
Acredito que a melhor solução é esta e o problema está na sua modelagem das classes.
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1094580938504398L;
private int id;
private String nome = "";
private CpfCnpj documento = new CpfCnpj();
private Date nascimento;
.....
}
public class PessoaFisica extends Pessoa {
private static final long serialVersionUID = 10945832438504390L;
private String rg;
private EstadoCivil estadoCivil;
private Escolaridade escolaridade;
private CursoSuperior cursoSuperior;
private Profissao profissao;
private Sexo sexo;
....
}
tenho este exemplo pra ficar mais facil
Pessoa<-PessoaFisica = significa que PessoaFisica herda pessoa
Pessoa<-PessoaFisica<-Funcionario
a classe Funcionario e Departamento eu ainda nao criei, porem, ela vai ter o atributo Departamento, id, salario por exemplo
e os mesmo dados de PessoaFisica Funcionario deve ter, por isso pensei da heranca.
e como Funcionario tem que pertencer a um departamento, eu pensei em Departamento como atributo
Na classe Pessoa vc tem um atributo documento que é do tipo CpfCnpj, isso tá estranho porque vc tem uma classe que descreve 2 coisas ao mesmo tempo.
Na classe PessoaFisica tem o atributo sexo. Tá dando a impressão que só quando a pessoa se torna pessoa física é que ela ganha um sexo. Talvez fosse melhor vc mover esse atributo para a classe Pessoa.
As relações das classes tambem não parece bacana.
Talvez essa classe PessoaFisica não deva existir, e se existir talvez deva exisitir tambem a classe PessoaJuridica. Temos que pensar nisso.
Sugestão.
a) Monte as classes Pessoa, PessoaFisica, Funcionario, Departamento ( se já montou blz).
b) Associe Pessoa à PessoaFisica (se exisitir), associe Pessoa a PessoaJuridicia (se existir), associe a classe Pessoa ou PessoaJuridica (verificar o contexto) à classe Departamento.
P.S. A classe Pessoa deixou de ser super classe para dimiuir o acoplamento (pesquinar no google e no guj sobre o assunto herança vrs agregação).
Sei que faltou alguns detalhes mas acho que isso vai colocar o papo em uma direção mais interessante.
Sempre prefira composição (colocar um atributo para fazer o serviço). Só use herança quando ou não restar outra saída, ou você tiver a mais completa, total e absoluta certeza que deve fazer isso.
Aliás, recentemente o James Gosling disse que se pudesse voltar na época que ele estava começando o java, ele teria retirado a herança. Herança normalmente acaba criando mais problemas do que resolvendo.
1-sim pode ser os 2, estou usando um jar onde ele ja tem todos os tipos de validacoes e conversoes brasileiras, agora nao me recordo o nome mas depois eu posto aqui, e documento é uma atributo mais generico mesmo, pra guardar CPF ou CPNJ, a principio, eu ir criar uma classe Documentos e adiconar uma lista de Documentos como atributo, para guartar todos os tipos de documentos(cpf,cnpj, RG, IM,IR e outros que possam ser solicitados so sistema, mas como o cliente disse que nao necessita de outros eu deixei desta forma)
2-sim sexo é uma atributo de pessoa fisica, e so pessoa fisica tem sexo
3-por que nao parece bacana?
4-sim, pessoa juridica existe, porem, nao coloquei no exemplo para simplificar
sobre “herança vrs agregação” ja vou dar uma olhada no google
victorwss
bem, isso eu nunca tinha escutado, tem algum artigo falando do pq a herança ser tao demoniaca?
Sempre prefira composição (colocar um atributo para fazer o serviço). Só use herança quando ou não restar outra saída, ou você tiver a mais completa, total e absoluta certeza que deve fazer isso.
Aliás, recentemente o James Gosling disse que se pudesse voltar na época que ele estava começando o java, ele teria retirado a herança. Herança normalmente acaba criando mais problemas do que resolvendo.[/quote]
[quote=krusst] 1-sim pode ser os 2, estou usando um jar onde ele ja tem todos os tipos de validacoes e conversoes brasileiras, agora nao me recordo o nome mas depois eu posto aqui, e documento é uma atributo mais generico mesmo, pra guardar CPF ou CPNJ, a principio, eu ir criar uma classe Documentos e adiconar uma lista de Documentos como atributo, para guartar todos os tipos de documentos(cpf,cnpj, RG, IM,IR e outros que possam ser solicitados so sistema, mas como o cliente disse que nao necessita de outros eu deixei desta forma)
2-sim sexo é uma atributo de pessoa fisica, e so pessoa fisica tem sexo
3-por que nao parece bacana?
4-sim, pessoa juridica existe, porem, nao coloquei no exemplo para simplificar [/quote]
Foco em seus pontos:
Entendi, mas…eu acho estranho classes com esses nomes CpfCnpj, dá a impressão de que tem algo errado (tipo algo que faz tudo), talvez uma interface, enum etc… pudesse deixar mais orientado a objeto.
Verdade rsrsrsrs.
As associações entre as classes não me pareceu boas, acheia associação melhor que herança na classe PessoaFisica NESTE SEU CASO.
Deveria ter colocado porque esse tema é recorrente e a classe PessoaJuridica sempre está presente, não que tenha que estar é claro.
Acho que já tem topico(s) sobre o assunto aqui no guj dá uma olhada rápida antes.