IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  digitalpanel

Etiketlenen Kullanıcılar

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 16 Şubat 2009, 16:29   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Delphi'de Interface Hazırlamak ve Kullanmak




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
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
type IArayuz = Interface(IUnknown) End;

Kod Çizelgesi Kod Dili: php
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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;

Alıntıdır.










 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet sohbet
Cevapla

Etiketler
delphide, hazirlamak, hazırlamak, interface, kullanmak, ve


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
valiz hazırlamak. Desmont IF Sözlük 7 23 Haziran 2022 14:50
Et suyu hazırlamak Sarya Merak Ettikleriniz 2 17 Ocak 2022 22:10
"Direksiyon başında telefon kullanmak alkollü araç kullanmak kadar tehlikeli" AngeL Haber Arşivi 0 04 Ekim 2014 16:21
Ergenliğe Hazırlamak Lucifer Ergen Sağlığı 0 05 Aralık 2011 03:24
rapor hazırlamak ? Serzenis mIRC Scripting Sorunları 1 09 Ağustos 2007 23:44