Bom gente, desculpem-me pelo título pouco significativo, mas não consegui pensar em nada melhor.
Minha dúvida é a seguinte:
Eu trabalho com algoritmos de otimização e gostaria de implementar uma interface única de uma classe abstrata Algoritmo (ou talvez apenas uma interface mesmo). Esta classe teria algo como os métodos abstratos init(), executar() e getSolucao(). Mais ou menos assim:
public abstract class Algoritmo {
public abstract void init(Dados dados, Parametros);
public abstract void executar();
public abstract Solucao getSolucao();
}
Bem, poderíamos ter algumas variações disso, como implementar o Template Method() no método executar, chamando os outros métodos… sei lá.
A questão é que para problemas diferentes, eu tenho Dados e Solucao diferentes; e para algoritmos diferentes, Parametros diferentes. Por exemplo:
public class Parametros {
private long tempoMax;
private double alfaQualquer;
}
public class ParamAlgoritmoGenetico extends Parametros {
private int tamPop;
private double taxaMutacao;
}
ou seja, membros novos, que Parametros não tem acesso. Como fazer algo do tipo abaixo sem gambiarra (como casting)?
...
// Caixeiro Viajante
Problema prob = Problema.getInstance("CV");
// objeto da classe DadosCV
Dados dados = prob.formatDados();
dados.ler(arquivo);
// Algoritmo genético
Algoritmo alg = Algoritmo.getInstance("AG");
// objeto de ParamAlgoritmoGenetico
Parametros param = alg.getParam();
alg.init(dados,param);
alg.executar();
// objeto da classe SolucaoCV
Solucao sol = prob.formatSolucao();
sol.setSolucao(alg.getSolucao());
...
Eu sei que não fui muito claro, mas se vocês tentarem me ajudar, eu ficarei muito grato!
Abraços,
Victor