Nesne Arayüzleri: “Interface” (OOP)

Interface(Arayüz) nedir?

Bir sınıftan kalıtımla almak güçlü bir mekanizmadır, asıl kalıtımın gücü bir arayüzden kalıtımla almasında yatar. Bir sınıf kalıtımla sadece bir sınıftan türetilebilir ancak bu kısıtlama kalıtımla arayüzden türetme söz konusu olduğunda ortadan kalkar yani bir sınıf birden çok arayüzden kalıtımla türeyebilir. Arayüzler sınıflar gibi kod ve veri içermez, sadece tanım içerir. Aslında soyut sınıflar arabirimlere benzerler ancak soyut sınıflar kod ve veri içerebildikleri için arayüzlerden ayrılır.

Neden Arayüz (Interface) kullanırız?

Interface sayesinde türettiğimiz sınıflarımızda zorunlu olmasını istediğimiz methodları atlayamayız. Atlayamayız çünkü atladığımızda hata alırız.

Interface (Arayüz) nasıl tanımlanır?

Arayüz tanımlarken class, struct gibi terimlerin yerine interface terimi kullanılır.


interface kus{

// tanımlanacak methodları artık belirleyebilirsiniz.

public function ucmak();

public function yemek();

public function buyumek();

}

Kafanızda daha rahat canlanması açısından somut örneklemeye gayret ettim. Örnek arayüzümüz olarak kuş seçtim. Kuşun temel işlevlerini prototip olarak tanımladım. Burada dikkat edilmesi gereken nokta arayüzler gövde barındırmazlar. Arayüzler (interface) içerisinde sabitler tanımlayabilirsiniz. Sabitlerin davranışları normal sınıflarda nasılsa arayüzlerde de aynıdır.

Şimdi de kuşun temel canlılık özelliklerini belirlediğimiz arayüzümüzü kullanalım.


class muhabbetKusu implements kus{

public function ucmak(){

echo ‘Uçma İşlevi’;

}

public function yemek(){

echo ‘Yemek İşlevi’;

}

public function buyumek(){

echo ‘Büyüme İşlevi’;

}

}

Arayüzde tanımladığımız methodları dahil ettiğimiz sınıfımızda kullanmak zorundayız. Aksi takdirde hata alırsınız.

Ayrıca ihtiyacınız olduğunda sınıfınıza birden fazla arayüz dahil edebilirsiniz. Bunları aşağıda abstract methodlar ile arasındaki farkları maddelerken de anlatmaya çalıştım.

Önemli Not: Abstract ve Interface sınıflarımızı örnekleyemeyiz. Sadece türetmek istediğimiz sınıflarımızda rehberlik etmesini sağlayabiliriz.

 

Interface (Arayüz) ile Abstract (Soyut) Methodlarının Arasındaki Farklar

  • Arayüzler veri kod içermez. Sadece method tanımlarını içerirler. Abstract’lar ise veri, kod içerebilir.
  • Interface içerisinde yeni bir method tanımladığımızda bu arayüzü kullanan bütün sınıflarımızda yeni eklenen methodu belirtmek zorundayız. Abstract içerisinde tanımladığımız yeni methodu ve özelliği otomatik olarak bu soyut sınıf ile türetilmiş bütün sınıflar kazanmış olur. Tek tek tanımlamamız gerektirmez.
  • Interface ile çoklu kalıtım yapabilirsiniz fakat abstract sınıfı ile çoklu kalıtım gerçekleyemezsiniz. Yani bir sınıfınıza birden fazla interface ekleyebilirsiniz. Ancak bir tane abstract ekleyebilirsiniz.
  • Interface içerisinde tanımlanacak bütün methodlar public olmak zorundadır. Abstract’ta böyle bir kısıtlama yok. Normal sınıf kuralları geçerli.
  •   Abstract class’lar interface’lere göre daha hızlı çalışırlar.
  • Arayüzler (interface) sihirbaz methodlar barındıramaz. (__construct, __clone methodlarından bahsediyorum)
  • Arayüzler bir sınıf veya yapıdan türetilemez. Arayüzler sadece arayüzlerden türetilebilir. Bunun sebebi de yukarıda bahsettiğim gibi arayüzlerin gövde barındıramamasından kaynaklıdır.

Dipnot: Yazımda kitaptan ve/veya telif ihlaline sebep olacak herhangi bir kaynaktan direkt alım yapmadım. Tamamen kendi kullanımım üzerine türettiğim yorumlardır.

Yazıyı hazırlarken yararlandığım kaynaklar

Uzmanlar için PHP (Mehmet Şamlı) Kodlab Yayınları
Nesne Arayüzleri – php.net

Bu yazı PHP, Programlama kategorisine gönderilmiş ve , , , , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

Nesne Arayüzleri: “Interface” (OOP) için 4 cevap

  1. Caner der ki:

    Oldukça güzel yazmışsın valla çok saol

  2. mert der ki:

    bu konu hakkında tüm forumlara bakdm ama bu senin anlatımında sonunda anladım valla 😀 eline sağlık

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir