Yazılımda Arayüz (Interface) Nedir?

Yazılımda Kalıtım Nedir başlıklı yazımızda kalıtım ile ilgili örnek yaparken Arayüz (Interface) kavramına ihtiyaç duyduğumuzu farkettik. Çok zor olmayan Yazılımda arayüz (interface) kavramı fazlasıyla karıştırılabilmektedir.

Arayüz (Interface)

Arayüz (Interface) farklı sınıflardan nesnelerin birbirleri arasında kategorize edilmesini sağlayan bir soyut tür çeşididir. Birbirleri arasında kategorize edilmeye basit bir örnek verecek olursak; Bir marketin deposuna yola çıkan ürünlerin hepsinin bir tırda olduğunu varsayalım. Tırın içinde bulunan ürünlerden bazıları şampuan, el kremi, elma, armut, tıraş köpüğü olduğunu varsayalım. Bu ürünlerin hepsini birer sınıfmış gibi değerlendirecek olursak: Elma, armudun meyve; el kremi, şampuan, tıraş köpüğü ürünlerinin ise Kozmetik Arayüz (Interface) kimliğine sahip olduğunu anlarız. Demek ki günlük yaşantımızda da sıkça arayüzleri kullanıyoruz.

Arayüz (Interface) Nasıl Kullanılır?

Arayüzleri tanımlayacak olursak: Arayüz (Interface) kullanan sınıfın, zorunlu olarak içermesi gereken özellikleri ve metotları belirler. Yani Arayüz içinde tanımlanan metot ve özellikler mutlaka arayüzü kullanan sınıfta kullanılması zorunlu hale gelir. Bu ne işimize yarayacak diye düşünürsek; geliştirdiğimiz sistemde sınıfların kullanıcı adı, şifre özelliklerinin olmasının zorunlu olduğunu (Yazılım Geliştirme Süreçlerinden) planlama aşamasında belirlediğimizi varsayalım. Bir IOturum isimli Arayüz oluşturup istediğimiz sınıflara bu arayüzü uygularsak (implementation) hedeflediğimiz durumu başarmış oluruz.

Arayüz (Interface) Özellikleri Nelerdir?
  1. Arayüz (Interface)’de metot ve özelliklerin gövdesi yazılamaz.
  2. Arayüzler (Interface) Java, C# ve genelde interface anahtar sözcüğü ile tanımlanırlar. Bir arayüzde özellik, metot, indeksleyici, temsilci, olay bildirimi yapılabilir.
  3. Arayüz tanımlamalarında zorunlu olmasa da başa “I” harfinin eklenmesi tanımlanan ismin arayüz olduğunun anlaşılmasını oldukça kolaylaştırır. Aynı zamanda bu durum kodda okunabilirliği bir görünüm elde etmemizi sağlar.
  4. Arayüzler ile referanslar (nesneler) oluşturulabilir, ama new anahtar sözcüğü kullanılamaz.
  5. Arayüz referansları tek başına anlam ifade etmez fakat kendisini kullanan bir sınıf nesnesinin referansı atanabilir.
  6. Bu durumda arayüz referansı ile arayüzde bulunan metot ya da özellikler hangi sınıf referansı tutuluyorsa oradan çağrılabilir.

Şimdi bu saydığımız özellikleri örneklerle inceleyelim ve daha sonra da Yazılımda Kalıtım Nedir? yazımızdaki örnekle konuyu bitirelim. alan programlama öğelerinin zaman içinde değişme olasılığı düşük öğeler olması gerekir. Buna göre, arayüz tanımları gerçekleştirimci ile kullanıcının paylaştığı ve sabit olma özelliği bulunan altyordam imzaları ile simgesel sabit tanımlarını barındırabilir.

Arayüz Özelliklerinin Örnekleri

Hadi gelin anlattığımız tüm arayüz (interface) özelliklerini bir C# kod parçacığında inceleyelim.

interface IUcak
     {
         double uzunluk { get; set; }
         double agirlik { get; set; }
         void UcusMod();
     }
class Maket1 : IUcak
     {
         public double uzunluk { get ; set; }
         public double agirlik { get; set; }
          public void UcusMod()
         {
         Console.WriteLine(uzunluk+" cm uzunluğundaki "+agirlik+" gram Maket1 ucuyor.");     
         }
     }
class Program
     {
         static void Main(string[] args)
         {
             IUcak ucak1 = new Maket1();
             ucak1.agirlik = 30;
             ucak1.uzunluk = 155;
             ucak1.UcusMod();
             Console.ReadLine();
         }
     }

Öncelikle IUcak isimli arayüzümüzü tanımlama kısmında 2. ve 3. özellikte anlatılanlara uygun şekilde yaptık. Ardından arayüzümüzün içerisinde 1. özellikte bahsettiğimiz şekilde metot ve özellikleri gövdesiz yazdık. Class program içerisinde bulunan main fonksiyonumuzda 4. ve 5. özelliği kullanarak bir nesne oluşturduk. Son olarak 6. özelliğimizi de IUcak referansı ile Maket1 sınıfından oluşturduğumuz ucak1 isimli nesneyi ucak1.UcusMod(); fonksiyonuyla kullandık. Böylece Arayüz (Interface) ile ilgili anlattığımız bütün özelliklerimizi kullandık.

Artık Yazılımda Kalıtım Nedir? yazımızda yarım kalan sorumuzu çözebiliriz 🙂

Kısaca hatırlayacak olursak firma bizden o güne kadar ürettiği tüm robotların özelliklerini tek bir robotta toplamak istediğini iletmişti. Hadi gelin bu soruyu asıl olması gerektiği gibi arayüzleri en verimli şekilde kullanarak birlikte çözelim.

     interface IXC1321
     {
         void UcabilmeMod();
         void GozlerdenAtesMod();
         void UzayanKolBacakMod();
     }
     interface IXC2321 : IXC1321
     {
         void GorunmezlikMod();
     }
     interface IXC3321 : IXC1321
     {
         void DenizaltiMod();
     }
     interface IXC4321 : IXC3321, IXC2321, IXC1321
     {
     }
//Buraya kadar ürünlerimizin arayüzünü oluşturdurduk
     public class XC1321 : IXC1321
     {
         public void GozlerdenAtesMod()
         {
         }
         public void UcabilmeMod()
         { 
         }
         public void UzayanKolBacakMod()
         {   
         }
     }
//Burada ise örneğin XC1321 ürününe onun için düzenlenen arayüzü implement ettik ve aynı işlemi ddiğerleri içinde uyguladık
     public class XC2321 : IXC2321
     {
         public void GorunmezlikMod()
         {
         }
         public void GozlerdenAtesMod()
        {
         }     
        public void UcabilmeMod()
        {
         }
         public void UzayanKolBacakMod()
        {
         } 
     } 
// XC3321 ürününe IXC3321 arayüzünü ekledik 
public class XC3321 : IXC3321
     {
         public void DenizaltiMod()
         {
         }
         public void GozlerdenAtesMod()
         {
         }
         public void UcabilmeMod()
         { 
         }
         public void UzayanKolBacakMod()
         {
         }
     } 
//son ürün olan bütün özelliklerin barınmasını istediğimiz robota da oluşturdğumuz IXC4321 arayüzünü ekledik
public class XC4321 : IXC4321 
     {     
       public void DenizaltiMod()
       {     
       } 
       public void GorunmezlikMod()
       {
       }
       public void GozlerdenAtesMod()     
      {     
      }     
      public void UcabilmeMod()     
      {     
      }     
      public void UzayanKolBacakMod()     
      {     
      } 
     } 
class Program 
  {     
      static void Main(string[] args)     
      {
      //Burada da ürünümüzü oluşturduk.     
      IXC4321 xc4321 = new XC4321();
      xc4321.DenizaltiMod();
      xc4321.GorunmezlikMod();
      xc4321.GozlerdenAtesMod();
      xc4321.UcabilmeMod();
      xc4321.UzayanKolBacakMod();                
      Console.ReadLine();     
      } 
  }

Gördüğünüz gibi arayüzleri nasıl en verimli biçimde kullanırız öğrenmiş olduk. Bu yazımla ilgili herhangi bir sorunuz olursa aşağıdan sorabilirsiniz. Hepinize sağlıklı ve yazılımlı günler dilerim 🙂 C355