Oğuz Esen Resmi Fan Clup İndir-Dinle 2011
Delphi de Interface Hazırlamak ve Kullanmak 112

Join the forum, it's quick and easy

Oğuz Esen Resmi Fan Clup İndir-Dinle 2011
Delphi de Interface Hazırlamak ve Kullanmak 112
Oğuz Esen Resmi Fan Clup İndir-Dinle 2011
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Delphi de Interface Hazırlamak ve Kullanmak

Aşağa gitmek

Anket Delphi de Interface Hazırlamak ve Kullanmak

Mesaj tarafından Mc Zindan Ankara Style Cuma Nis. 30, 2010 2:11 pm

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 Çizelgesi Kod Dili: php
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 Çizelgesi Kod Dili: php
type
IArayuz = Interface(IUnknown)
End;





Kod Çizelgesi Kod Dili: php
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 Çizelgesi Kod Dili: php
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 Çizelgesi Kod Dili: php
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 Çizelgesi Kod Dili: php
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 Çizelgesi Kod Dili: php
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;
Mc Zindan Ankara Style
Mc Zindan Ankara Style
Admin
Admin

Mesaj Sayısı : 3104
Aktiflik Puanı : 13215
Kayıt tarihi : 26/11/09
Yaş : 31
Nerden : ankara

http://www.amasyateknoloji.tk

Sayfa başına dön Aşağa gitmek

Sayfa başına dön

- Similar topics

 
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz