http://visualogren.tr.gg/

TÜRKİYE CANIM FEDA


   
 
  Üye Ol
 
=> Daha kayıt olmadın mı?

Formumuzdan daha iyi faydalanmak için üye olun ve daha fazla içerik görün

Üye Ol - Delphi'de Interface Hazırlamak ve Kullanmak

Burdasın:
Üye Ol => Delphi => Delphi'de Interface Hazırlamak ve Kullanmak

<-Geri

 1 

Devam->


gece krallığı
(şimdiye kadar 41 posta)
01.01.2009 18:17 (UTC)[alıntı yap]
Interface Hazırlamak ve Kullanmak

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:
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.

Nasıl ki class�lar �class� anahtar kelimesi ile başlıyorsa Interface�ler ise Interface anahtar kelimesi ile başlamaktadır. Genel alışkanlıkla Interface�lerin adlarının başına �I� harfi konulmaktadır. Nasıl ki Delphi�de bu sınıflar TObject sınıfından türetiliyorsa Interface�ler de IUnknown adlı Interface�den türetilmektedir. Interface anahtar kelimesine herhangi bir Interface adı yazılmazsa bunun IUnknown olduğu varsayılır.

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:
type
IArayuz = Interface(IUnknown)
End;


Kod:
type
TMatematik = class(TInterfacedObject, IArayuz)
End;


Şimdi bu Interface�in bir metoda sahip olmasını sahip olmasını sağlayacağım. �Topla� adını verdiğim metot integer tipinde 2 parametreye sahip olacak ve geriye yine integer bilgi gön¬derecektir. Interface�lerde işaret edilen metotların yalnızca imzaları bulunur, metodun ne yaptığı veya işlevi hakkında bilgi olmaz.


Kod:
type
IArayuz = Interface(IUnknown)
Function Topla(X, Y : Integer): Integer;
End;



Bu şartlarda proje çalıştırılırsa hata meydana gelir. Çünkü bu arayüzü uygulayan �TMatematik� adlı Class�ın �Topla� adında ve integer tipinde 2 parametreye sahip bir metodu olması gerekir. Bu düşünce ile �TMatematik� Class�ını aşağıdaki gibi düzenledim.


Kod:
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;

Bu şartlarda uygulama çalıştırılırsa hata meydana gelmez. Çünkü �TMatematik� Class�ı uyguladığı Interface�in gereklerini yerine getirmiş oldu. Bu Class�ta Topla() metodunun parametre olarak aldığı bilgileri toplayıp geriye göndermesini sağladım. Başka bir sınıfta ise metot dahilinde yapılan işlem farklı olabilir. Tekrar etmek gerekirse Interface�ler yalnızca metotların adları, geriye gönderdikleri bilginin türü ve parametrelerinin sayısı ve tipiyle ilgilenirler. Bunu göstermek bu arayüzü uygulayan ikinci bir Class hazırladım. Bu Class�ta Topla() metoduna farklı bir işlem yaptırdım.


Kod:
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;

Bu metot farklı bir işlem yapsa bile Interface�in gereklerini yerine getirmektedir. Yukarıda Interface hazırlarken IUnknown adlı standart Interface�i mirasçı olarak seçtim. Hazırlamak istediğiniz Interface mevcut bir Interface miras olarak alabilir. Aşağıda verilen örnek Interface uygulayan Class�ların 3 metoda sahip olmaları gerekir.


Kod:
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;



Bütün konular: 40
Bütün postalar: 41
Bütün kullanıcılar: 4
Şu anda Online olan (kayıtlı) kullanıcılar: Hiçkimse crying smiley
 
 
  40510 ziyaretçi (66046 klik)  
 
wardom.org http://visualogren.tr.gg/ Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol