2ª Camada
public class PessoaFisica extends Pessoa.
public class PessoaJuridica extends Pessoa.
3ª Camada
public class Recepcionista extends PessoaFisica
public class Dentista extends PessoaFisica
Minha dúvida é a seguinte: Eu só criei a classe Recepcionista e Dentista, filhas de PessoaFisica pois ambas tem campos extras. O dentista tem CRO e cota, já o recepcionista em vez de cota tem salario. Na minha base de dados penso em ter uma tabela “recepcionista” e outra “dentista”. O que ocorre é que preciso ainda da Classe Paciente, que tem os mesmos campos da Classe PessoaFisica, sem nenhum a mais. Eu devo fazer um Paciente extends PessoaFisica ? E no banco eu crio a tabela paciente ?
Sim, embora fisicamente todas as pessoas físicas possam ser pacientes, nem todas serão em teu sistema, certo?
Paciente terá, ao menos, o tipo sanguíneo como atributo a mais que uma pessoa física (visto que, é bem raro solicitar o tipo sanguíneo de uma recepcionista ou dentista).
Mas como disse o paciente não tem nenhum atributo a mais do que PessoaFisica, mas nem todas as Pessoas físicas São pacientes. Neste caso eu tenho que ter uma classe só para Paciente mesmo que este não tenha mais nenhum campo. Correto?
Cara, no meu entender, tem sim.
Um paciente precisa ter em seu cadastro:
Tipo sanguíneo
Fator RH
Religião (algumas religiões impedem certos tratamentos médicos/odontológicos)
Alergia a medicamentos
E, sendo assim, você é obrigado a criar uma classe que contemple tais diferenciais.
Aliás, se você fizer com que Paciente e PessoaFisica compartilhem apenas os atributos de PessoaFisica, está cometendo um grave erro de modelagem.
Amigo, eu sei que tivermos uma Classe Pessoa que tenha mais atributos do que PessoaFisica eu sou obrigado a “estende-la”. Porém estou SUPONDO apenas que o Paciente não tenha nenhum atributo a mais, eu devo estende-lo mesmo assim ?
Primeiro que eu acho a abordagem de herança inviável neste caso, prefiro composição.
Porém, se você vai partir para esse lado e terá dentista e recepcionista, por que não fazê-lo?
Herança nem sempre é uma boa solução.
Vamos supor que amanhã seja criado um novo tipo de pessoa no Brasil, PessoaFisicoJuridico, que tem responsabilidades de empresa, mas direitos de pessoa física. Como você vai adequar teu modelo?
“Ah, eu penso nisso no futuro”. Errado, você precisa criar uma estrutura muito mais capaz de ser expandida que ser diminuída. Deixar para depois é apostar no escuro e quase sempre traz problemas.
Muito polêmico esse assunto, mas não vou entrar em detalhes sobre isso. Mas vamos lá, não consigo enxergar a composição neste caso, só a herança. Como ficaria a composição ? De
Toda herança pode ser substituída por composição/agregação.
Basta que, ao invés de você manter um extends, você coloque um atributo do objeto que seria tua superclasse na classe que deseja.
E algumas leituras:
Então pelo que entendi ficaria mais ou menos assim:
Dentista TEM UMA PessoaFisica
Recepcionista TEM UMA PessoaFisica
Paciente TEM UMA PessoaFisica
ainda tem a classe PessoaJuridica
No Banco de dados teriamos:
1 - Tabela dentista com seus campos + id_pessoa_fisica
2 - Tabela recepcionista com seus campos + id_pessoa_fisica
3 - Tabela paciente com seus campos + id_pessoa_fisica
4 - Tabela pessoa_fisica com seus campos.
5 - Tabela pessoa_juridica com seus campos.
Olha, puxando de outro tópico sobre Hibernate, veja como ficou:
Posso misturar Herança + Composição da seguinte forma:
vou ter uma tabela: Pessoa, PessoaFisica e PessoaJuridica. Onde essas 2 ultimas terão referência para tabela PEssoa.
Depois vou ter uma composição com Dentista, Funcionario, Paciente com a Tabela PessoaFisica. Pois o Dentista, Funcionario e Paciente são o ID da PessoaFisica.