andrielc:
Este codigo é o que voce cita a ser usado? Seguindo a estrutura de interface para os tipos de Pessoa, , assim cada pessoa teria seus metodos particulares ...
O Java nao deixa criar interface estendendo Role.
public interface ChefeEquipe extends Role { //erro no Java
...
}
Vc teria que criar o tipo Role em um arquivo à parte.
Como voce citou sobre Heranca, e voce pode ver no ultimo diagrama que enviei aqui, que utilizei heranca para modelar as tarefas, duas camadas ainda... creio que, agora isso é um crime com pena de morte. Voce poderia dar uma ideia/comentar de como poderia ser reformulado essa etapa?
Veja bem, não é realista pensar que iremos modelar seu sistema todo aqui. O que dá para lhe ensinar são as ferramentas e os conceitos. São sempre os mesmos. Aplica os mesmos conceitos que aplicou à pessoa, na tarefa.
Por isso que eu falei que seu modelo é conceptual. Conceptualmente aquilo seria assim. OO e tudo mais. Mas no mundo real não é tão simples.
O Projeto tem tarefas e as tarefas são de diferentes tipos. Logo, precisamos de um TipoDeTarefa. Um certo tipo pode ter uma ciclo de vida , etc... Vc sempre tem que pensar que seu modelo pode não ser util, ou seja, nem todos os modelos conceptuais podem ser implementados. Talvez vc precise de mais entidades que ajudem a melhorar o modelo. Por exemplo se todas as tarefas tiverem fases , então todas seria iguais, com a mesma estrutrua. E ai é só uma questão de saber quantas fases tem a tarefa baseado no seu tipo.
Isto é um traballho de imaginação. Abstração, sinteses. Repetido várias vezes até que seja aceitável. Quanto mais homogéneo for o modelo ( ou seja, quanto menos importante for o tipo) melhor. Porque na prática não será simples vc ter 3 tipos de tarefa que fazm 3 coisas diferentes. É melhor ter 3 tipos que fazem tudo igual o que elas fazem diferente são parametros, são propriedades a tarefa (composição) e não caracteristicas da tarefa (herança).
Se uma pessoa participa de tarfas então a tarefa tem uma lista de pessoas. Simples. Se a lista é vazia porque não são preciso pessoas para a terefa , tudo bem. A estrutura de dados suporta várias configurações. Mas se vc cria duas classes Tarefa A e B e uma tem pessoa e a outra não, começa a ficar esquisito. Vc terá tod a hora que controlar qual o tipo de classe que está usando , etc.. às vezes precisamos disto, mas quanto mais puder evitar melhor. E para evitar seu modelo tem que ser mais robusto (robustez é a qualidade de poder ser usado para coisas para as quais não foi planejado.) Se o seu modelo de dados atende seu modelo conceptual , otimo, mas seria melhor se ele atender mais do que isso. Se vc restringe seu modelo a ser o que vc quer agora, mais tarde vc irá se arrepender. Deixe aberto e deixe o resto do sistema colaborar para controlar as regras. As regras não estão só nas entidades, estão nos serviços, nos validadores, nos repositorios , etc..
As ferramentas são sempre as mesmas
1) desacoplar dados que não pertencem juntos e não pulverizar dados que vão juntos.
2) usar o minimo de herança possível
3) usar o máximo de composição possível.
A ideia é como peças de lego. Tenha poucas peças base e faça outras peças partindos das básicas. Não especialize (herança) as básicas. Para especializar as outras, componha-as de forma diferente a partir das mesmas bases. eu sei que isto é meio abstrato, mas modelagem é abstrato. É como uma linguagem, se vc não sabe as palavras fica dificil expressar o que quer dizer.
Leia mais sobre os principios SOLID e alguma coisa de desing patterns, mas especialmente não acredite que aquele boneco que vc desenhou é como eu sistema vai ser de verdade. Aquilo é só um conceito.