Finalmente após a aula do cap5 comecei a entender o famoso Jargão "Favoreça composição no lugar de herança" pois em minha mente Herança e Composição são dois mecanismos diferentes utilizados para propósitos diferentes e neste curso me foi finalmente apresentado um exemplo prático, pois na internet as pessoas só ficam dizendo use herança no lugar de composição e nunca mostram um exemplo concreto. Tenho um sistema que fiquei tentado em usar herança, mas ai envolveria herança e JPA oque aumentaria ainda mais a minha dor de cabeça, esqueçamos a JPA, como eu implementaria a seguinte situação utilizando a composição?
Meu sistema tem as classes Licitacao, AdesaoRegistroPreco, ContratacaoDireta e RDC e a classe Contrato que pode ocorrer em razão de uma das classes citadas acima, pensei em criar um Enum Tipo Contrato, mas só isso não é suficiente pois preciso guardar o procedimento que originou o contrato.
Na minha visão de composição eu teria que ter 4 classes de contrato,cada um composto de um tipo de procedimento,por exemplo:
public class ContratoLicitacao{
private Licitacao licitacao;
public ContratoLicitacao(Licitacao licitacao){
this.licitacao = licitacao;
}
}
que na realidade implicaria em criar 4 tabelas no banco de dados ,uma para cada tipo de contrato, imagina um relatório de todos os contratos da prefeituraXpto, eu teria que percorrer 4 tabelas.
A outra alternativa mesmo e usar herança, com o discriminador do tipo de contrato, oque na pratica seria uma tabela, totalmente fora de normatização e pelo menos 3 colunas com null por linha.
Qual caminho seguir?