Object Oriented Programming

Merhaba, bu yazmızda Php’de OOP(Object Oriented Programming) yani Nesne Yönelimli Programlama bölümünde 4.yazımızı paylaşacağız. Bu yazıda abstraction (soyutlama) ve interface (arayüz) işlemlerini göreceksiniz.Önceki yazımızı okumadıysanız tıklayarak okuyabilirsiniz. Tanımlar :

abstract : Belirtilecek olan herhangi bir sınıfı, soyut sınıf haline dönüştürmek için kullanılır.

interface : Belirtilecek olan herhangi bir sınıfı, soyut arayüz sınıfı haline dönüştürmek için kullanılır.

implements : Daha önceden oluşturulmuş olan herhangi bir arayüz sınıfını, ilgili sınıfa tanımlamak / uygulamak için kullanılır.

Tanımlama kuralları :

abstract :

  • Soyut metodlar içerebilir.
  • Normal metodlar içerebilir.
  • Özellikler içerebilir.
  • Sabitler içerebilir.
  • Public, private veya protected tanımlaması yapılabilir.
  • Herhangi bir sınıf sadece tek bir abstract’dan türeyebilir.

interface :

  • Soyut metodlar içerebilir.
  • Sadece public görünürlüğüne sahip olmak kaydıyla normal metodlar içerebilir.
  • Sabitler içerebilir.
  • Herhangi bir sınıfta birden fazla interface (arayüz) kullanılabilir.

Örnekler :

Örnek 1 :

<?php
abstract class Deneme{
      abstract function tanim($parametreicerigi);

    }

    class Test extends Deneme{

    }
?>

Yukarıdaki örnekte hata döndürür, çünkü soyut sınıf içerisinde bulunan metodlar mutlaka soyut sınıftan türeyen alt sınıflarda bulunmalıdır.

Örnek 2 : Örnek 1’in doğru hali

<?php
  abstract class Deneme{
    abstract public function tanim($parametreicerigi);
  }

  class Test extends Deneme{
    public function tanim($parametreicerigi){

    }
  }
?>

Örnek 3 :

<?php
    abstract class Tema{
          abstract public function HeaderAlani($arkaplanrengi, $headerlogosu, $headerbanneri);
          abstract public function BodyAlani($icerik);
          abstract public function FooterAlani($copymetni);
      }

      class UstAlan extends Tema{
          public function HeaderAlani(){

          }
          public function BodyAlani(){

          }
          public function FooterAlani(){

          }
      }
?>

Yukarıdaki örnekte hata döndürür, çünkü eğer abstract sınıf tanımlanıyorsa içerisindeki metodlara türeyen sınıfta mutlaka kullanılmalı ama bu örnekte kullanılmadı.

Örnek 4 : Örnek 3’ün hatasız hali

<?php
  abstract class Tema{
        abstract public function HeaderAlani($arkaplanrengi, $headerlogosu, $headerbanneri);
        abstract public function BodyAlani($icerik);
        abstract public function FooterAlani($copymetni);
    }

    class UstAlan extends Tema{
        public function HeaderAlani($arkaplanrengi, $headerlogosu, $headerbanneri){

        }
        public function BodyAlani($icerik){

        }
        public function FooterAlani($copymetni){

        }
    }
?>

Örnek 5 : Özellik kullanılabilir

<?php
  abstract class Deneme{

        public $isim = "Uğur";
        public const soyisim = "Kabak";

      }

      class Test extends Deneme{

      }
?>

Örnek 6 : public, private veya protected kullanılabilir

<?php
abstract class Deneme{

        public $isimbir = "Uğur";
        public const soyisimbir = "Kabak";

        private $isimiki = "Uğur";
        private const soyisimiki = "Kabak";

        protected $isimuc = "Uğur";
        protected const soyisimuc = "Kabak";

      }

      class Test extends Deneme{

      }
?>

Örnek 7 : interface kullanımı

<?php
interface Deneme{

        public function tanim($parametreicerigi); 
                                                  
    }

    class Test implements Deneme{

    }
?>

Yukarıdaki kod hata değeri döndürür, çünkü soyut arayüz sınıfı içerisinde bulunan metodlar mutlaka soyut arayüz tanımlanan sınıflarda da bulunmalıdır.

Örnek 8 : Örnek 7’nin doğru kullanım şekli

<?php
interface Deneme{

        public function tanim($parametreicerigi);

    }
    class Test implements Deneme{
       function tanim($parametreicerigi){

       }
    }
?>

Örnek 9 :

<?php
interface Crud{
        public function Olusturma($tablodegeri, $benzersizkimlik);
        private function Okuma($tablodegeri, $benzersizkimlik);
        protected function Duzenleme($tablodegeri, $benzersizkimlik);
        public function Silme($tablodegeri, $benzersizkimlik);
      }
      class Test implements Crud{
          public function Olusturma($tablodegeri, $benzersizkimlik){

          }
          public function Okuma($tablodegeri, $benzersizkimlik){

          }
          public function Duzenleme($tablodegeri, $benzersizkimlik){

          }
          public function Silme($tablodegeri, $benzersizkimlik){

          }
      }
?>

Yukarıdaki örnek hata döndürür, çünkü interface (arayüz)’de kullanılan özellikler mutlaka public olmalıdır. Private veya protected kullanılamaz.

Örnek 10 : Örnek 9’un doğru hali

<?php
  interface Crud{
        public function Olusturma($tablodegeri, $benzersizkimlik);
        public function Okuma($tablodegeri, $benzersizkimlik);
        public function Duzenleme($tablodegeri, $benzersizkimlik);
        public function Silme($tablodegeri, $benzersizkimlik);
      }

      class Test implements Crud{
          public function Olusturma($tablodegeri, $benzersizkimlik){

          }
          public function Okuma($tablodegeri, $benzersizkimlik){

          }
          public function Duzenleme($tablodegeri, $benzersizkimlik){

          }
          public function Silme($tablodegeri, $benzersizkimlik){

          }
      }
?>