x@ndy:
Acho que você está usando herança de maneira errada! Para usar herança as classes que herdam “são a a classe ancestral”. Mas o ser um pode ser um problema. Olhe o exemplo abaixo:
- Totó é um beagle
- Beagle é um cachorro
- Cachorro é um animal
- Beagle é uma raça
- Cachorro é uma espécie.
Combinando 1 e 2 eu tenho que “Totó é um cachorro” e a 2 e 3 juntas daria "Beagle é um animal"
A frase 1, 2 e 3 juntas daria “Totó é um animal”!
Agora se a gente juntar as frases 1 e 4 daria “Totó” é uma raça" e a frase 2 e 5 daria “Beagle é uma espécie”!
O problema é que estamos confundindo generalização com classificação e isso é muito comum, até mesmos profissionais experientes se confundem. No caso acima o correto seria:
-
Totó é um um cachorro
-
Cachorro é um animal
-
Beagle é uma raça
-
Especie contém animais
Então poderiamos fazer que cachorro TER UMA RACA, assim Totó poderia SER CLASSIFICADO como um Beagle!
Essa é a diferença entre SER UM e TER UM, SER CLASSIFICADO COMO UM!
No seu caso acredito que Pesquisador pode ser classificado como tendo uma Profissão! Assim como uma pessoa pode ter mais de uma profissão um pesquisador também poderia ter mais de uma, podendo ao mesmo tempo ser um professor e um bolsista!
SEMPRE PRIORIZE A COMPOSIÇÃO A HERANÇA!
No seu caso acredito até mesmo que Pesquisador seja uma profissão. Acredito que esteja faltando uma terceira classe em seu domínio, algo como funcionário. Um funcionário tem uma profissão ou várias, ou seja, um funcionário pode ser classificado como um professor, um bolsista, um pesquisador ou até mesmo os três ao mesmo tempo!
PS: O Exemplo eu li a algum tempo em um livro do Martin Fowler, se não me engano foi no UML Essencial
É então talvez eu estaria violando o princípio de Liskov, entretanto, abrindo o jogo,
eu tenho um exercício da faculdade, que pensei o problema seria herança múltipla( letra a. ), então tenho que defender esse princípio via código em java,
na teoria, eu sei que deve utilizar interface, mas na prática não sei como fazer isso, pois nunca precisei fazer isso.
O exercício pode ser visualizado abaixo:
Um professor do curso X de uma universidade privada no período noturno se torna um bolsista do curso Y no período matutino da mesma Universidade.
a) A situação citada causa que tipo de problema em um projeto de sistema de software? Explique. Qual seria a solução para este problema?
b) Represente a solução em um diagrama de classes. Explique.
c) Apresente a estrutura básica de código em JAVA, C# ou C++ para implementar a solução.
O que você acha da minha ideia? Qual a sua opinião perante a esse exercício?
Muito obrigado!
Att, André Vieira