Php Oop Dersleri 8 – Nesne arayüzleri

Php oop dersleri eğitim setine uzun bir aradan sonra devam ediyoruz. Yaklaşık bir kaç konu sonra oop derslerine son verip örnek uygulamalar yapcaz ve kısmet olursa da videolarla konuyu iyice özümseyeceğiz.

Bir önceki yazımızda oop mimarisinde soyut sınıflar konusunu ele almıştık. Bu yazımızda ise nesne arayüzlerinden orijinal adıyla interface classlardan bahsedeceğiz. Hemen nesne arayüzleri nedir ne değildir kısa bir tanımlama ile konumuza giriş yapalım.

Nesne arayüzleri: Bir sınıf içerisinde zorunlu bir şekilde kullanılmasını istediğimiz metot ve argümanları barındıran sınıflara denir. 

Nesne arayüzleri diğer sınıf tanımlamalarından farklı olarak interface anahtar sözcüğü ile tanımlanır. Örneğin:


<?php

interface arayuz {

}

?>

Aslına bakarsanız nesne arayüzleri ve soyut sınıflar birbirine çok benzer hatta çok karıştırılır. Nesne arayüzlerini soyut sınıflardan farklı kılan şey nesne arayüzleri içerisinde yalnızca tanımlama metotları kullanılır ve tüm metotlar public olarak tanımlanmak zorundadır. Interface’ler new komutuyla çağırılamazlar. Yalnızca genişletilerek kullanılabilir. Burada bir diğer fark ise nesne arayüzleri extends anahtar kelimesiyle değil implements anahtar kelimesiyle kullanılır. Yine burada bir fark daha var ki oda şu eğer bir interface başka bir interface’den türeyecekse extends komutu normal bir sınıf bir interface’den türeyecekse implements komutu kullanılır. Kafanızın çok karıştığının farkındayım ve hemen bir örnek ile bu karışıklığı giderelim.


<?php

   interface Arayuz {

   }


   interface BaskaBirArayuz extends Arayuz {

   }

   class Arayuzler implements BaskaBirArayuz {

   }

?>

Interface’ler new komutuyla çağırılamazlar dedik ve ona da çok kısa bir örnek verelim.


<?php

   interface Arayuz{

   }

   new Arayuz();

?>

Bu şekilde bir kullanım hata oluşturur.

Nesne arayüzleri neden kullanılır ?

Interface’lerin türkçe manasıyla arayüz anlamına gelmesi interface’lerin genellikle tema motorlarında yada tema yapımında kullanıldığı gibi bir algı oluşturmuştur ancak olay burada biraz daha farklı. Interface’ler tabii ki tema yapımında da kullanılabilir ancak nesne arayüzlerini bununla sınırlamak doğru değildir. Nesne arayüzleri genellikle modelleme yapılmak istenildiğinde ve birden çok yazılımcının geliştirdiği projelerde standart bir yapı ortaya konulmak istenildiğinde kullanılır. Eğer bir sınıf bir interface’den türetilmiş ise türetilen interface’ye uygun kod yazmaya bizi zorlar böylelikle standart bir yapı oluşturulur. Bu kadar ön bilgi ve somut örnekten sonra basit bir interface yazalım.


<?php


   interface Arayuz {

      const Qwerty = 1;

      public function set($name);

   }

   interface BaskaArayuz extends Arayuz {
      public function get();
   }

   class Veri implements BaskaArayuz {

      private $name;

      public function set($name){
          $this->name = $name;
     }

     public function get(){
        return $this->name;
     }

   }

   $interface = new Veri();
   $interface->set('Php oop dersleri');
   echo $interface->get();

?>

Şimdi ne yaptığımıza şöyle bir bakalım. Arayuz adında bir interface oluşturduk ve içerisinde set metodumuzu birde Qwerty adında bir sabit tanımladık. Daha sonra BaskaArayuz adında bir interface daha oluşturduk ve bu interface’yi Arayuz ile genişlettik ve get metodumuzu ekledik. Daha sonra Veri adında bir sınıf oluşturup bu sınıfımızı da “implements”  komutuyla BaskaArayuz interface’sinden türettik ve içine get,set metodumuzu ve name argümanını ekledik. Eğer Veri sınıfı içerisinde get ve set metodlarımızı tanımlamasaydık tıpkı soyut sınıflar konumuzda olduğu gibi PHP derleyicimiz hata verecekti. Peki Arayuz içinde ki sabit değişken ne olacak ? Aslında onu oraya öylesine koymadım 😀 Burada bir istisnaya değinmek istiyorum. Nesne arayüzleri içerisinde yalnızca const komutuyla oluşturulan değerlerin türetilen sınıf içerisinde kullanılması zorunlu değildir. Son olarak ise $interface değişkenine Veri sınıfını atadık ve set ve get metodlarını kullandık.

Temel olarak nesne arayüzlerinin çalışma mantığı bu şekildedir arkadaşlar. Nesne arayüzlerini ilk öğrendiğim zamanlar bana çok gereksiz gelmişti aslında ancak zamanla kullandıkça öğrenmeye çalıştıkça nesne arayüzlerini daha iyi kavramış oldum ve gerçekten önemli olduğunu anladım. Siz benim gibi yapmayın 😀 Php oop dersleri eğitim setimizin nesne arayüzleri konusu bu kadar arkadaşlar sorularınızı yorum olarak sorabilirsiniz görüşmek üzere kendinize iyi bakın…

Bir Cevap Yazın

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