Componentes - interface vs abstract

Top  Previous  Next

unit InterfacesTEste;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

 

type

  // Modo 1 - usando interface

  IBaseECF = Interface(IInterface)

    procedure Mostra;

  end;

 

  TNCR = Class(TInterfacedObject, IBaseECF)

  public

    procedure Mostra;

  end;

 

  TSweda = Class(TInterfacedObject, IBaseECF)

  public

    procedure Mostra;

  end;

 

  // Modo 2 - usando abstract

  TBaseECF2 = class(TObject)

    Nome: string;

    procedure Mostra;   virtual; abstract;

    constructor Create;

    destructor Destroy;

  end;

 

  TNCR2 = Class(TBaseECF2)

  public

    procedure Mostra; override;

    constructor Create;

  end;

 

  TSweda2 = Class(TBaseECF2)

  public

    procedure Mostra; override;

    constructor Create;

  end;

 

  // form

  TForm2 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    procedure Button2Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

  end;

 

var

  Form2: TForm2;

 

implementation

 

{$R *.dfm}

 

// ------------------------------------- modo 1

 

procedure TNCR.Mostra;

begin

  ShowMessage('NCR');

end;

 

procedure TSweda.Mostra;

begin

  ShowMessage('SWEDA');

end;

 

// ------------------------------------- modo 2

 

constructor TBaseECF2.Create;

begin

  //

end;

 

destructor TBaseECF2.Destroy;

begin

 

end;

 

constructor TNCR2.Create;

begin

end;

 

procedure TNCR2.Mostra;

begin

  ShowMessage('NCR2');

end;

 

constructor TSweda2.Create;

begin

end;

 

procedure TSweda2.Mostra;

begin

  ShowMessage('SWEDA2');

end;

 

// -------------------------------------------------------------- exemplo 1

 

procedure TForm2.Button1Click(Sender: TObject);

var

  NCR  : TNCR;

  Sweda: TSweda;

  Base : IBaseECF;

begin

  NCR  := TNCR.Create;

  Sweda:= TSweda.Create;

 

  Base := NCR;

  Base.Mostra;

 

  Base := SWEDA;

  Base.Mostra;

 

  Base := nil;

//  NCR.Free;    nao permite!!

//  Sweda.Free;

end;

 

// -------------------------------------------------------------- exemplo 2

 

procedure TForm2.Button2Click(Sender: TObject);

var

  NCR2  : TNCR2;

  SWEDA2: TSWEDA2;

  Base  : TBaseECF2;

begin

  NCR2  := TNCR2.Create;

  SWEDA2:= TSWEDA2.Create;

 

  Base := NCR2;

  Base.Mostra;

 

  Base := SWEDA2;

  Base.Mostra;

 

  NCR2.Free;

  SWEDA2.Free;

end;

 

{

   vantagem do modo 2:

     permite implementar algumas rotinas no objeto base

 

}

 

end.