Módulos Básicos e Acoplamento

       

      Foi construida uma unidade seguindo as normas da orientação para objetos chamada USE. (Unidade de Sistema Especialista) Nesta unidade não é declarada nenhuma variável global ou local nem foi instanciada nenhuma classe. Estruturas de memória são todas locais e declaradas em métodos sendo sua vida limitada à execução de cada método.

       

      A classe normalmente instanciada em uma aplicação que use a unidade USE é a classe TMotorCmd. TMotorCmd pode executar todos os comandos descritos no manual do usuário.

       

      TMotorCmd é descendente de TMotorStr que é descendente TMotor.

       

      TMotor é uma classe que incorpora um sistema especialista em que as regras são conjuntos de words e os fatos são representados por words. Vale observar que a comunicação com pessoas usando words é no mínimo constrangedora. Para este fim, foram construidas duas camadas (cascas implementadas como classes descendentes) permitindo uma comunicação por strings de caracteres.

       

      Segue a declaração da classe TMotor:

      type TMotor = object  { motor que trabalha com words }
                    BRegras:TBaseRegras;
                    BFatos:TBaseFatos;
                    OnFindFact:TOnFindFact;
      
                    constructor Init(POnFindFact:TOnFindFact);
                    destructor Done;
                    procedure SetaFato(F:TFato);
                    function EFato(F:TFato):boolean;
                    { testa fato }
                    procedure Run;
                    procedure AddRegra(R:TRegra);
                    { adiciona uma regra }
                    end;
      
      
      Segue a declaração da classe TMotorStr:
      
      type TMotorStr = object (TMotor)  { motor com casca para                   
                                          strings }
                         SW:TIntStr; { converte strings em words }
      
                         constructor Init(POnFindFact:TOnFindFact);
                         destructor Done;
                         procedure SetaFatoStr(FS:string);
                         function EFatoStr(FS:string):boolean;
                         procedure AddRegraStr(RS:string);
                         function GetRegraStr(R:TRegra):string;
                         { transforma TRegra em String }
                         end;
      
      
      Segue a declaração da classe TMotorCMD:
      
      
      type TMotorCmd = object (TMotorStr) 
      { motor por linha de comando }
                         function ExecCmd(S:string):boolean; 
                         { executa um comando }
      
                         function LoadFromFile(FileName:string):boolean;
                         { le um arquivo de comandos }
                         end;
      
      Em camadas:

      TmotorCmd

      TmotorStr

      Tmotor

      Base de Fatos e Base de Regras