Customizar fórmulas

Olá,

alguém conhece algum pattern que auxilie na construção de fórmulas para cálculos de regras de negócio ?

Estou querendo que o usuário advanced da aplicação possa alterar as fórmulas de um determinado cálculo.

Por exemplo.

Fórmula cálculo para tirar a média de um determinado aluno:
Parâmetros:
N1 = Nota Primeira Prova
N2 = Nota Segunda Prova
TP = Trabalho Prático
SE = Seminário

Um determinado professor deseja que a média da turma dele, a partir desses parãmetros seja dessa forma:
média = (N1 + N2 + TP + SE )/4

Já um outro professor deseja de uma outra forma, e com parâmetros diferentes:
N1 = Nota Primeira Prova
N2 = Nota Segunda Prova
N3 = Nota Terceira Prova

média = (N12 + N23 + N3*5 )/10

Existe algum Pattern que se adequa a esse tipo de problema ?

Resumindo para um determinado tipo de cálculo eu teria uma lista de parâmetros (numéricos), uma fórmula (operações aritméticas) relacionando parâmetros e um retorno numérico resultada do cálculo.

Oi Fabrício,

Me parece que você quer construir um parser bastante simples.
Talvez dar uma olhada em intepreter e visitor (GoF) ajude.

Abraços,

Hunn … verdade, o Interpreter pode ajudar :slight_smile:
Vai ter que existe um esquema que irá interpretar e converter as expressões, como se fosse um analisador léxico, identificar o que são símbolos de operação matemática e o que são variáveis (parâmetros). Deve existir uma linguagem própria pra isso.

Agora no que o Visitor pode ajudar ? :roll:

Alguém já usou http://www.ognl.org/ ?

Se você tiver uma definição precisa para isso, você pode usar o JFlex http://jflex.de. Como o seu caso parece bem simples, no entanto, talvez dê para se virar com o pacote de expressões regulares de Java.

Pode te ajudar a desacoplar o lógica de processamento dos nodos da árvore sintática da implementação deles.

Abraços,

Giuliano

Sim ,esse caso é o mais simples, mas tem mais fórmulas, e tem outras fórmulas que depedem de condições para se tomar outras decisões.

Se você estiver com preguiça de escrever o parser e tiver uma gramática pronta para a sua linguagem de expressões, você pode usar o CUP para gerar o parser para você.

O JFlex tem um ponto de integração com o CUP, daí você leva, numa tacada só, parser e analisador léxico (eles geram a árvore sintática para você, te poupando dos detalhes chatos que esse tipo de processamento envolve).

http://www2.cs.tum.edu/projects/cup/

Daí a única coisa que você tem que de fato implementar é o código de processamento da árvore.

Abraços,

tá cara, vou pensar numa outra forma mais simples aqui aí depois eu mando pra cá

Tá chamando minha solução de complicada, é?
O JFlex é fácil de usar, tá bom? :x

hehehehe, não cara, vc me ajudou bastante!!! anotei esses links aqui, vou dar uma olhada neles depois :wink: