terça-feira, 25 de setembro de 2007

Por que usar Interface?


Para poder esplicar melhor e de maneira mais clara de porque utilizar interface, vamos conhecer o que é uma interface.
Interface é uma classe que possui métodos que não são implementados, por essa razão não podem ser instanciados. Então você me pergunta para que serve, uma de suas melhores aplicações é na compatibilização de mecanismos, pelo simples motivo de obrigar a sub-classes a implementarem esses métodos.
Assim como classes normais derivam de TObject, interfaces derivam de IInterface que esta definada em system, todas interfaces devem começar com "I".
Aplicação prática
Imagine um sofware de frente de caixa, onde poderia utilizar vários modelos de hardware para uma mesma atividade, então em vez de sair enchendo seu fonte de if's, que tornam a manutenção do software em uma grande dor de cabeça, usa-se interface deixando seu fonte mais claro e não influênciando em nas classes prontas, seria somente modificado as classes específicas.


Cine & Foto - Submarino.com.br

Exemplo sintaxe:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
// An interface definition
IVehicle = Interface(IInterface)
// Properties and their functions
function GetAge : Integer;
function GetMiles : Integer;
property age : Integer read GetAge;
property miles : Integer read GetMiles;

// Non-property function
function GetValue : Currency;
end;

// Implement this interface in a car class
// Note that TInterfaceObject defines QueryInterface, _AddRef
// _AddRef functions for us
TCar = Class(TInterfacedObject, IVehicle)
private
fAge, fMiles : Integer;
fCarType : string;
function GetAge : Integer;
function GetMiles : Integer;
public
property age : Integer read GetAge;
property miles : Integer read GetMiles;
property carType : string read fCarType;

// Non-property function
function GetValue : Currency;
published
constructor Create(age, miles : Integer; carType : string);
end;

// The form class itself
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

// Car constructor
constructor TCar.Create(age, miles: Integer; carType: string);
begin
// Save parameters
fAge := age;
fMiles := miles;
fCarType := carType;
end;

// Get the age of the car
function TCar.GetAge: Integer;
begin
Result := fAge;
end;

// Get the mileage of the car
function TCar.GetMiles: Integer;
begin
Result := fMiles;
end;

// Calculate the car value
function TCar.GetValue: Currency;
begin
Result := 10000.0 - ((age * miles)/10.0);
end;

// Main line code
procedure TForm1.FormCreate(Sender: TObject);
var
car : TCar;
begin
// Create a car!
car := TCar.Create(1, 2076, 'Honda Jazz');

// Show the current value of this car
ShowMessageFmt('My %s car is %d years old, %d miles, value %m',
[car.carType, car.age, car.miles, car.GetValue]);
end;

end.

  © Blogger template 'Perfection' by Ourblogtemplates.com 2008

Back to TOP