Arayüzler (Interface)

Arayüzler yararlı mı zararlı mı?

  • Zaman kaybı

    Oy: 1 5,6%
  • Kod kalabalığı

    Oy: 0 0,0%
  • Kodlama sırasında çok kolaylık sağlıyor

    Oy: 17 94,4%

  • Oy verenlerin toplamı
    18
Merhaba sevgili okurlar, bu yazımda sizlere çokça karıştırılan Arayüz (Interface) mantığını anlatacağım. Örnekler yine C# üzerinden olacaktır.

Arayüzleri Neden Kullanırız?

Size bir senaryo üzerinden açıklamak istiyorum.

Kullanıcı denilince aklınıza belirli şeyler gelir değil mi? Mesela kullanıcı adı, ismi, telefonu gibi. Peki yetkili personel denince aklınıza ne gelir? Normal kullanıcıların dışında yetkisi, sorumlu olduğu bölümler gibi ayırıcı özellikleri vardır. Burada dikkatinizi çekmek istediğim yer ortak noktalar. Yani normal bir kullanıcı da olsa yetkili personel de olsa ortak noktaları var.

Arayüzleri bu ortaklıkları tekrar tekrar tanımlamamak ve belirli bir şablon üzerinden gitmek için kullanıyoruz.

Arayüz Nedir?

Genellikle miras alma (kalıtım) işlemlerinde kullanılan bir şablon sınıfıdır. Burada tanımlanan özellikler (property) genellikle bir erişim anahtarı (public, private vb.) almazlar ve tanımlamaları yapılmaz. Tanımlamaları kalıtımı gerçekleştiren sınıf yapar.

Kalıtım gerçekleştiğinde arayüzde tanımlanan tüm özelliklerin tanımlamalarının yapılması gerekmektedir. Buna bir örnek vereyim, siz bir telefon ürettiniz ama içinde bir işletim sistemi yok. Yani bu telefon kullanılamaz, eğer içine bir işletim sistemi yüklerseniz kullanmaya başlayabilirsiniz. Burada telefonu arayüze, işletim sistemini miras alan sınıfa benzetebiliriz.

C# Arayüzleri​

[CODE lang="csharp" title="C#"]public interface IKullanici //Arayüz sınıfımız.
{
string KullaniciAdi { get; } //Şablonumuzda sadece okunabilir bir değer tipi verdik, erişim belirtmedik.
string KullaniciTelefon { get; }
int KullaniciYas { get; }
void Kaydet();
}

public class Kullanici : IKullanici //Arayüzden kalıtımı sağladık, miras aldık.
{
//Ortak Özellikler
public string KullaniciAdi { get; set; }
//Public olduğunu belirttik ve hem okunabilir hem de yazılabilir bir değer tipi verdik.
//Buradan şablondaki get set kuralına uymamız gerekmediğini anlıyoruz.
public string KullaniciTelefon { get; set; }
public int KullaniciYas { get; set; }
public void Kaydet()
{
Console.WriteLine("Kullanıcı kaydı başarılı!");
}

//Farklı Özellikler
public int KullaniciSeviye { get; set; }
//Burada duralım, seviyeyi neden şablonda belirtmedik?
//Önceden de anlattığım gibi, şablonu sadece ortak özellikler için kullanıyoruz. Burası sadece normal kullanıcıya özel bir alan.
}

public class Personel : IKullanici //Personel sınıfımızı da arayüzümüzden türettik.
{
//Ortak Özellikler
public string KullaniciAdi { get; set; }
public string KullaniciTelefon { get; set; }
public int KullaniciYas { get; set; }
public void Kaydet()
{
Console.WriteLine("Personel kaydı başarılı!");
}

//Farklı Özellikler
public int PersonelYetkiNo { get; set; }
public int PersonelBolumNo { get; set; }
}[/CODE]

Bir duralım, sadece birkaç özellik için ayrı bir arayüz oluşturmak mantıksız geliyor değil mi? Aslında tam olarak öyle değil.

[CODE lang="csharp" title="C#"]static void Main(string[] args) //Program.cs içindeki ana metod.
{
IKullanici kullanici = new IKullanici(); //Böyle bir tanımlama geçersizdir. Arayüzler tek başına türetilemez.
IKullanici kullanici1 = new Kullanici();
/*
Geçerlidir. Bir şablonu kullanarak onu miras alan sınıfları türetebiliriz.
Burada dikkatinizi çekmek isterim, kullanıcıya ait tanımladığımız seviye değeri kullanici1 değişkeni için gözükmeyecektir.
Yani sadece şablonda tanımladığımız ortak özelliklere erişebiliriz, hemen karamsarlığa düşmeyin. Hala ortak özellikleri kullanabilirsiniz.
Örneğin şablonda Kaydet() fonksiyonu olursa bunu yine çağırabiliriz.
*/
Kullanici kullanici2 = new Kullanici(); //kullanici1'den farklı olarak farklı özelliklere de erişebiliriz.

IKullanici[] kullanicilar = {new Kullanici(), new Personel()}; //Bu dizi tanımlaması ile tüm kullanıcıları tutup işlem yapabiliriz.
}[/CODE]

Böylece arayüzlerin ne kadar yararlı olabileceğini görmüş oluyoruz.

1616805204557.png


Bu grafikten de anlaşıldığı üzere arayüzlerin erişme performansının normal sınıflara göre daha az olduğunu görüyoruz.

Özetle​

Mantığı tekrardan anlatmak gerekirse, bir arayüz tanımlıyoruz ve ayrı bir sınıf açıp bu arayüzü miras alıyoruz. Bunu yaptıktan sonra arayüzde yazıp tanımlamadığımız tüm özelliklerin tanımlamasını sınıfta yapıyoruz. İstersek bu sınıfa arayüzden farklı olan özellikleri de ekleyebiliriz. Önemli olan birden çok sınıfımızdaki ortak yönleri bu arayüzlerde tutmak.

Bu yazının da sonuna gelmiş bulunmaktayız, umarım tatmin edici bilgiler vermişimdir.
Bir başka yazıda daha görüşmek üzere, iyi forumlar. :)

Yorumlar

Gösterilecek yorum bulunamadı.

Blog girdisi detayları

Ekleyen
Evilmonster
Okuma süresi
2 dakika okuma
Görüntüleme
643
Son güncelleme
Değerlendirme
5,00 yıldız 1 değerlendirme

Yazılım kategorisindeki diğer girdiler

Evilmonster adlı kullanıcının diğer girdileri

Bu girdiyi paylaş

Geri
Yukarı