Interface(Arayuz) Saglamis Oldugu Kolayliklar

Yazar: Sinan BARAN
Kategori: .NET Framework
Eklenme Tarihi: 23.8.2009 10:36:11



Merhaba arkadaşlar bu makalemde object oriented kavramlarından en önemli yapı olan interface'i ele alacağız.

    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)

 


Sinan BARAN

Sinan BARAN 2007 yılından itibaren .Net teknolojisi ile çalışmalarda bulunmaktadır.Birçok  orta ve ileri düzey projelerde yeralmıştır.Sinan BARAN şu anda BilgeAdam Bilgi Teknolojileri Akademisinde Yazilim Eğitmeni olarak çalişmaktadır.

Kadir AÇIKGÖZ - 4.9.2009 0
eline saglık. bir cok soru isaretine cevap buldum. tsk.

Yorumunuz