Merhaba
arkadaşlar bu makalemde object oriented kavramlarından en önemli yapı olan
interface'i ele alacağız.
Öncelikle interface
yapısından birazcık bahsedelim. Interface ara yüz anlamına gelir. Çoklu
yapıtların temel özelliklerini barındıracak bir yapıdır.
İçerisindeki
sadece özellik tanımları barındırır.
Tanımların erişim
belirleyicileri yoktur.(internal, public, private, protected
vs...) implements edildiği sınıfta public erişim
belirleyicisini default olarak alır.
Interface’ler içerisinde
değişken
tanımlanamaz.
Interface içerisinde oluşturulan
bütün özellikler implementes edildiği
sınıfta tümü ile kullanılmak zorunludur.
Not: Interface’ler (“I”) Belirteci ile başlar.(Zorunlu
değildir sadece bir belirteçtir.
Projelerde iş
kurallarıdır. ). Örneğin ICanli, IArayuz, IKisi gibi (“I”) buradan
yapının direk olarak interface olduğunu
anlayabiliriz.
Interfaceler’de
Kullanılabilir Üyeler
- Özellikler
(Properties)
- Metotlar
(Methods)
- Olaylar (Events)
İndeksleyiciler
(indexers) sahiptirler.
Inerfacelerde
kesinlikle kullanilamiyacak üyeler.
- Yapıcılar
(constructors)
- Yok ediciler
(destructors)
- Alanlar (fields)
Örnek bir interface
yapısı
public interface IArayuz
{
string Ad { get;
set; }
void Calistir();
string MessageBox(string
Mesaj);
string this[int IndexNo] { get; set; }
}
Şimdi neden interface ihtiyacı
duyarım?
· Projelerde If
else-Swich Case yapılarından kurtarır.
· Olayı daha sağlam
ve okunaklı hale getirir
· Çoklu Kalıtım
· Çok
Biçimlilik
Nerelerde Interface kullanılır.
Örnek Senaryo: 3 araba markası (Class)
olsun bunlar Bmw, Audi, Mercedes ve birde method’umuz olsun
ve Marka classlarini ortak alacak bir parametre tipi tabi ki object
public void
ArabaModel(object m)
{
}
Class’larimizi
Formun Load olayında tanimliyalim.
MERCEDES m = new MERCEDES() {
Model = 2000 };
Audi a = new Audi() { Model
= 2001 };
BMW b = new BMW() { Model
= 2009 };
ArabaModel(m);
ArabaModel(a);
ArabaModel(b);
Seklinde verip Method içerisinde
verilen parametrenin model degereini görmek istiyorsak...
public void
ArabaModel(object m)
{
if (m is MERCEDES)
{
MessageBox.Show(((MERCEDES)m).Model.ToString());
}
else if (m is Audi)
{
MessageBox.Show(((MERCEDES)m).Model.ToString());
}
else if (m is BMW)
{
MessageBox.Show(((MERCEDES)m).Model.ToString());
}
}
Bu şekilde bir işlem yapmamız
gerekiyor. Tabi olayın içerisine karar yapıları girdiği için biraz karmaşık
hale geliyor. İşte bu
durumda Interface yapılarına ihtiyaç duyarız.
Simdi olayı interface ile
gerçekleştirelim bakalım ne kadar sürecek. Sadece Model property’sini ele
aldığım için
public interface
IAraba
{
int Model { get;
set; }
}
Interface, oluşturacağım
araba markalarını bu Interface’den Implements edeceğim için Bütün sınıfların
ıcerısındeki özellikleri biliyorum O halde hadi bakalım oops
MERCEDES m = new MERCEDES() {
Model = 2000 };
Audi a = new Audi() { Model
= 2001 };
BMW b = new BMW() { Model
= 2009 };
ArabaModel(m);
ArabaModel(a);
ArabaModel(b);
public void
AramaModel(IAraba m)
{
MessageBox.Show(m.Model.ToString());
}
Evet, farkı gördünüz
olayı biraz daha Kolay hale getirdik, biraz demek saçma olur değildi
arabanın ortak özelliği olan Model Properts’ini IAraba ınterface’ınde tanımladım.
Çünkü Marka ile işlem yapacağım
zaman birçok markanın gelebilme durumunu göze aldım o halde Interface ile oluşturduğum
IAraba yapısını parametre olarak kullandım. Çünkü Interface içerisindeki tüm
yapılar diger Class’larda var Burada asil can âlici nokta biraz daha ilerde, öncelikle
su yapıların içeriğini biraz daha açalım.
sadece 1 tanesini ele
alarak kodu gostrecegim.
|
class MERCEDES:IAraba
{
public int
Model
{
get {}
set {}
}
}
|
class MERCEDES:IAraba
{
private int
_Model;
public int
Model
{
get
{ return _Model; }
set
{_Model = value;}
}
}
|
Evet, neden bu kadar
kolay oldu sorusuna gelince… Bunu’da şöyle
açıklayalım.
MERCEDES m = new MERCEDES() {
Model = 2000 };
Aslinda Soyle’de
yapabilirdik
IAraba m = new MERCEDES()
{Model=2001 };
Burada şöyle
bir özellik var,IAraba özellikler barındırıyordu, Mercedes Bu özellikleri
kullanarak içerisinde değer saklıyordu. İşte
bu özelikler IAraba’dan geldiği için Mercedes Class’ı IAraba Interface’ıne
özellik değerlerini devir ediyor bu saatten sonra IAraba Mercedes gibi
davranmaya başlıyor.
ArabaModel(m);
public void
AramaModel(IAraba m)
{
MessageBox.Show(m.Model.ToString());
}
Son
örnek IAraba Dizisi ıcerısıne kendisinden ımplements alan Sınıflar verilebiliyor:)

Örnek uygulamayı indirmek
için
Interface.rar
(34,40 kb)