Interface(Arayüz)

.Net’in 5 temel tipinden (class,interface,delegate,struct,enum) biridir. Çoklu kalıtım ihtiyacını gidermek amacı ile kullanılırlar. Interface’leri, yetenek kazandıran şablonlar olarak tanımlayabiliriz. Bir başka deyişle; tüm üyeleri abstract olan sınıflara benzetilebilirler. 


Bir sınıf birden fazla sınıftan kalıtılamaz, ancak bir sınıfa birden fazla interface’i implement etmek mümkündür. Genelde kullanım amaçları, uygulandığı tiplere bazı kurallar koymak ya da bazı yetenekler kazandırmaktır. Örneklere başlamadan önce abstract kavramını incelemenizde fayda var diye düşünüyorum.
! Interface’ler de, kalıtım yapar gibi  ‘ : ’ işareti ile uygulanırlar. ‘ : ‘ işaretinden sonra bir sınıf gelirse, buna “kalıtmak” ya da “extend etmek” deriz. Eğer bir interface gelirse, buna “uygulamak” veya “implement etmek” deriz.
Temel özellikleri;
  1. Tüm üyeleri abstract olmak zorundadır. (Üyeleri tanımlarken bizim belirtmemize gerek yoktur. Zaten default olarak abstact’tırlar.)
  2. Uygulandığı sınıf, o interface’in tüm üyelerini ezmek zorundadır.
  3. Üyeleri tanımlarken access modifier (erişim belirleyici) yazamayız. Üyeler default olarak public’tir.
Şimdi basit bir örnek üzerinde inceleyelim.
Örnek;
Aslan, Kaplan, At ve Inek adında 4 tane sınıf tasarlayalım. İçerisine herhangi bir üye tanımlaması yapmayacağız.
class Aslan
{
}
class Kaplan
{
}
class At
{
}
class Inek
{
}


   
Şimdi de Etçil ve Otçul adında iki sınıf tasarlayalım. Bu sınıflarımızı abstract olarak tanımlayacağız. Çünkü amaçları, yukarıda yazdığımız sınıflara base class olmaktır.
abstract class Etcil
    {
        public abstract void BeslenmeSekli_1();
    }

    abstract class Otcul
    {
        public abstract void BeslenmeSekli_2();
    }


    En başta tanımladığımız 4 sınıfı, türlerine göre Etcil ve Otcul sınıflarından kalıtalım;
class Aslan:Etcil
    {
        public override void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class Kaplan:Etcil
    {
        public override void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class At:Otcul
    {
        public override void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Inek:Otcul
    {
        public override void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }


   
Şimdi de Ayi adında bir sınıf tasarlayalım. Bildiğiniz gibi ayılar hem otçul hem de etçil hayvanlardır. Yani hem etçil hem de otçul sınıfından kalıtım yapmamız gerekecek. Ancak .Net mimarisi çoklu kalıtıma izin vermez. İşte bu noktada interface'ler imdadımıza yetişecektir. Etcil ve Otcul sınıflarını interface olarak tasarlayıp, sınıflarımıza uygulayalım.
public interface IEtcil
    {
        void BeslenmeSekli_1();
    }

    public interface IOtcul
    {
        void BeslenmeSekli_2();
    }

.Net’de interface adlandırmaları büyük ‘I’ harfi ile başlar. Bu bir zorunluluk değildir ancak standartlara uymak açısından, bu tip adlandırmalar tercih etmek daha doğru olur.
class Aslan : IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class Kaplan : IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class At : IOtcul
    {
        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Inek : IOtcul
    {
        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Ayi : IOtcul, IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }

        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }


Görüldüğü gibi, interface kullanarak sorunumuzu çözmüş olduk. Bu sayede Ayi sınıfımıza hem etçil hem de otçul olma özelliğini kazandırmış olduk.

Yorum Gönder Blogger

 
Üst