Implementando uma Interface no Lazarus

Vou apresentar aqui muito sutilmente um caso de construção de uma interface em Lazarus.

Qual a diferença entre uma interface e uma classe.

A Interface é como um contrato, onde se estabelece as conexões de saída (Métodos e propriedades) que serão utilizadas. Nela voce não precisa criar código, pois só estabelece quais serão as conexões.

Ao criar uma classe, vc estabele as conexões porem tem que realizar uma série de codificações (implementation) que de fato não seriam necessárias. Pois a codificação fica a cargo da classe filha.

Exemplo de projeto

Desenvolvi uma interface no projeto da API da impressora.

GIT do Projeto

https://github.com/marcelomaurin/LIBESCPOS

Exemplo de uso

Na unit imp_generico.pas, estabelecemos a interface, que será herdada das demais classes.

  { TIMP_GENERICO }
  TIMP_GENERICO = interface
    ['{045F6EED-2C11-447D-A7DC-09DB995367C2}']

     function getserial : string;
     procedure setserial(value : string);

     function InitPrint(): string;
     function NewLine(): string;
     function LineText(Info : string): string;
     function Negrito(): string;
     function Normal(): string;
     function Sublinhado(): string;
     function DoubleTexto(): string;
     function beep(): string;
     function Guilhotina(): string;
     function AcionaGaveta(): string;
     function Barra1D(Info : string): string;
     function Barra2D(info : String): string;
     function loadImagem(X,Y : integer; Info : String): string;
     function imprimeImagem(X,Y : integer): string;
     property Serial : String read getserial  write setserial;
end;                     

No fonte imp_ELGINI9.pas, chamamos a interface, criando os métodos, realmente propostos na interface.

type

 { TIMP_ELGINI9 }

 TIMP_ELGINI9 = class(TInterfacedObject,TIMP_GENERICO)
     FCOLUNA : integer;
     FSERIAL : String;

 private
     function getserial : string;
     procedure setserial(value : string);


 public
     constructor create();
     destructor destroy();

     function NewLine(): string;
     function InitPrint(): string;
     function LineText(Info : string): string;
     function beep(): string;
     function Negrito(): string;
     function Normal(): string;
     function Sublinhado(): string;
     function DoubleTexto(): string;
     function Guilhotina(): string;
     function AcionaGaveta(): string;
     function Barra2D(Info : string): string;
     function Barra1D(Info : string): string;
     function loadImagem(X,Y : integer;Info : String): string;
     function imprimeImagem(X,Y : integer): string;
     function Centralizado(): string;
     function PaginaM616(): string;
     function CorPg618(): string;
     function HabilitaArmazenaDados(): string;
     function Armazenadados( Info : string): string;
     function ImprimeQRCODEArmazenado(): string;
 published
     property Serial : String read getserial  write setserial;
end;

var
  IMPELGINI9: TIMP_ELGINI9;

implementation          

Omiti a implementation, para que o artigo não fique demasiado longo.