Delphi konulu kaynaklarda en az sözü edilen konulardan birisi Interface'lerdir. Interface'lerin Delphi'de nasıl hazırlanıp kullanıdığı konusunda ön bilgi vermek için Delphi 2007 for Win32 kitabımın 2 sayfasını buraya aldım.
Değişik programcılar tarafından geliştirilen Class’lar farklı işlemleri yapıyor olsalar bile bazı ortak noktalara sahip olabilirler. Örneğin her Class’ın sıralama yapan bir metoda veya “Firma” adına sahip bir özelliğe sahip olması istenebilir. Bu gibi sorunların çözümü Interface hazırlamaktan geçiyor. Interface’lerde metot imzaları olmaktadır.
Bu konuda teknik bilgi vermek yerine hemen basit bir örnek yapacağım. Bu amaçla üzerinde çalıştığım projedeki ilk formu temsil eden Class’ın yer aldığı kod dosyasında aşağıdaki gibi “TMatematik” adında bir class ve “IArayuz” adında bir Interface hazırladım. Form1 temsil eden Class’ın Click() metodunda ise matematik class’ının örneğini hazırladım.
Kod: Tümünü seç
type
TForm1 = class(TForm)
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
IArayuz = Interface(IUnknown)
End;
Type
TMatematik = class(TObject)
End;
Var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormClick(Sender: TObject);
Var
Nesne : TMatematik;
begin
Nesne := TMatematik.Create;
end;
end.
Bu şartlarda TMatematik adını verdiğim Class’a bu arayüz uygulansa bile değişen bir şey olmaz. Çünkü IArayuz adını verdiğim Interface herhangi bir olay, metot veya özelliğe sahip değildir. Interface’lerin Class’lara nasıl uygulandığını aşağıda görebilirsiniz.
Kod: Tümünü seç
type
IArayuz = Interface(IUnknown)
End;
type
TMatematik = class(TInterfacedObject, IArayuz)
End;
Kod: Tümünü seç
type
IArayuz = Interface(IUnknown)
Function Topla(X, Y : Integer): Integer;
End;
Kod: Tümünü seç
type
TMatematik = class(TInterfacedObject, IArayuz)
Function Topla(Sayi1, Sayi2 : Integer): Integer;
End;
implementation
function TMatematik.Topla(Sayi1, Sayi2: Integer): Integer;
begin
Topla := Sayi1 + Sayi2;
end;
Kod: Tümünü seç
type
TDeneme = class(TInterfacedObject, IArayuz)
Function Topla(Sayi1, Sayi2 : Integer): Integer;
End;
implementation
function TMatematik.Topla(Sayi1, Sayi2: Integer): Integer;
begin
Topla := Sayi1 + Sayi2;
end;
function TDeneme.Topla(Sayi1, Sayi2: Integer): Integer;
Var
X, Y : Integer;
begin
X := Sayi1 * Sayi1;
Y := Sayi2 * Sayi2;
Topla := X + Y;
end;
Kod: Tümünü seç
type
IIslemler = Interface(IUnknown)
Function Bolme(X, Y : Integer): Integer;
Function Carpma(X, Y : Integer): Integer;
End;
type
IArayuz = Interface(IIslemler)
Function Topla(X, Y : Integer): Integer;
End;
type
TMatematik = class(TInterfacedObject, IArayuz)
Function Topla(Sayi1, Sayi2 : Integer): Integer;
Function Bolme(Sayi1, Sayi2 : Integer): Integer;
Function Carpma(Sayi1, Sayi2 : Integer): Integer;
End;