Artigo Clube Delphi 76 - Implentando fórmulas na aplicação

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (3)  (0)

Saiba como agregar valor ao seu sistema através da personalização de cálculos internos.

Esse artigo faz parte da revista Clube Delphi Edição 76. Clique aqui para ler todos os artigos desta edição

Componentes

Implementando fórmulas na aplicação

Agregando valor ao seu sistema através da personalização de cálculos internos

Customização é uma das palavras da vez e a cada dia mais o mercado exige que os produtos além de ter qualidade, sejam flexíveis, personalizados e tenham preços competitivos. Agora, como fazer para oferecer um sistema de qualidade, com preço competitivo e que sirva para diversos clientes com regras de negócios diferentes?

A resposta é: parametrização. Uma das maneiras de parametrizar o sistema é possibilitar que os cálculos sejam definidos através de fórmulas criadas pelos próprios clientes. E para demonstrar como utilizar fórmulas dentro de um sistema, neste artigo criaremos uma aplicação simples de compra e venda onde os cálculos do valor total do movimento e do item serão obtidos através do resultado da fórmula parametrizada.

Será usado o Evaluator da biblioteca de componentes JEDI, que é um avaliador de expressões para realizar o cálculo das fórmulas do programa, ou seja, ela decodifica e substitui expressões por seus respectivos valores numéricos.

Além disso, teremos uma tela para cadastro da fórmula digitada herdada de um formulário básico de cadastro, demonstrando assim também como utilizar herança de formulários dentro do Delphi.

Obs.: O objetivo deste artigo é demonstrar como tornar uma aplicação flexível e personalizável, não se atendo a princípios básicos, como criar um banco de dados, fazer conexão com banco, criar formulários na aplicação ou relacionamentos Master/Detail.

A classe TEvaluator

A classe TEvaluator é definida na unit JclExprEval da biblioteca JEDI e é uma classe avaliadora de expressões. Ela, assim como as outras classes de avaliadores de expressão da JCL, é descendente da classe TEasyEvaluator, também definida na mesma unit. A declaração das duas classes está descrita na Listagem 1.

Listagem 1. Declaração das classes TEasyEvaluator e TEvaluator

...

TEasyEvaluator = class(TObject)

 private

   FOwnContext: TExprHashContext;

   FExtContextSet: TExprSetContext;

   FInternalContextSet: TExprSetContext;

 protected

   property InternalContextSet: TExprSetContext

     read FInternalContextSet;

 public

   constructor Create;

   destructor Destroy; override;

   procedure AddVar(const AName: string;

     var AVar: TFloat32); overload;

   procedure AddVar(const AName: string;

     var AVar: TFloat64); overload;

   procedure AddVar(const AName: string;

     var AVar: TFloat80); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat32); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat64); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat80); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat80Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TUnary32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TUnary64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TUnary80Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TBinary32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TBinary64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TBinary80Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TTernary32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TTernary64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TTernary80Func); overload;

   procedure Remove(const AName: string);

   procedure Clear;

   property ExtContextSet: TExprSetContext

    read FExtContextSet;

 end;

 TEvaluator = class(TEasyEvaluator)

 private

   FLexer: TExprSimpleLexer;

   FParser: TExprEvalParser;

 public

   constructor Create;

   destructor Destroy; override;

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?