Nesne yönelimli programlama ve php sınıf yapısı

php-oopNesne yönelimli programlama büyük projelerde ve ekip çalışmasında birçok avantajı bulunan bir yaklaşımdır. Nesne yönelimli yazılımda nesneler, sınıflar (class) tarafından temsil edilir. Sınıfları metot (method) ve özellikler (property) oluştururlar. Sınıfların içinde tanımlanan fonksiyonlara metot, değişkenlere ise özellik denir.

Nesne yönelimli programlamada sınıflar birbiriyle etkileşime geçebilirler. Nesne yönelimli yaklaşım bize kapsülleme (sarmalama (encapsulation)), kalıtım (inheritance), çok biçimlililk (polymorphism), soyut sınıflar (abstract) ve arayüz (interface) kullanımı gibi avantajlar sağlar.

Teorik detayların içinde boğulmadan, anlamayı kolaylaştırmak için şunu söyleyebilirim ki: Resimle ilgili bir sınıf yazıyorsak resim nesne, resmin boyutu özellik ve resmi küçültme işlemi metottur denebilir.

Php Sınıf Yapısı

<?php
class Araba {

}
?>

En temel sınıf yapısı bu şekildedir. Şimdi sınıfımıza özellik ve metotlar ekleyelim.

<?php
class Araba {

 public $renk;
 
 public function renkGetir() {
 return $this->renk;
 }

}
?>

Sınıfımızın bu halinde size yabancı gelen $this, içinde bulunduğu nesneyi belirtir. Geçerli sınıfta tanımlı özellik (değişken) ve metotlara (fonksiyon) $this değişkeni ve -> işaretiyle erişiriz. Özelliğimizin ve metodumuzun başında bulunan public sözcüğü erişim belirtecidir.

Erişim Belirteçleri

Erişim belirteçleri php 5 ile gelen önemli özelliklerdendir. Erişim belirteçleri özellik ve metotların görünürlüğünü belirlerler. Üç adet erişim belirteci bulunur: Public, private ve protected.

Public: Varsayılan erişim belirtecidir. Eğer özellik ya da metot tanımlarken erişim belirteci belirtmezseniz metot veya özellik public olacaktır. Elemanlara (metot veya özellik) sınıfın içinden ve dışından erişilebilir.
Protected: Sınıf elemanlarına, elemanların tanımlandığı sınıftan ve alt sınıflardan erişilebileceği anlamına gelir.
Private: Sınıf elemanlarına sadece tanımlandığı sınıf içinden erişilebilir.

Sınıf Nesnesi Oluşturmak

Oluşturduğumuz sınıfları kullanabilmemiz için sınıf nesnesi yaratmamız gerekir. Bunu new anahtar sözcüğünü kullanarak yaparız. Sınıf nesnesini yarattıktan sonra özelliklere ve metotlara erişebiliriz.

<?php
class Araba {

 public $renk;
 
 public function renkGetir() {
 return $this->renk;
 }

}

$araba = new Araba(); // nesnemizi oluşturuyoruz
$araba->renk = 'Kırmızı'; // özelliğimize değer atıyoruz
echo $araba->renkGetir(); // metodumuzu çağırıyoruz
?>

Renk özelliğini public olarak belirttiğimiz için sınıfın dışından erişim sağlayabildik. Eğer public yerine private olarak belirtseydik: “Fatal error: Cannot access private property Araba::$renk” hatası alırdık (aynı durum protected için de geçerlidir).

Yapılandırıcılar (Constructors) ve Yok Ediciler (Destructors)

Yapılandırıcılar (constructors), sınıf nesnesi yaratıldığında otomatik olarak çalışır ve nesnelerin başlangıç durumları için yapılması gereken işlemleri yaparlar. Yapılandırıcı metotlar:

<?php
function __construct() {

}
?>

Şeklinde tanımlanırlar. Araba sınıfımıza yapılandırıcı metot ekleyelim ve nasıl çalıştığını görelim.

<?php
class Araba {

 public $renk;
 
 function __construct() {
 echo 'Araba sınıfı için nesne oluşturuldu';
 }
 
 public function renkGetir() {
 return $this->renk;
 }

}

$araba = new Araba(); // nesnemizi oluşturuyoruz
?>

Sınıf nesnesini oluşturduğumuzda yapılandırıcı metot çalıştı ve ekrana “Araba sınıfı için nesne oluşturuldu” çıktısını verdi. Sınıfımızı aşağıdaki şekilde değiştirelim.

<?php
class Araba {

 // sınıf özelliğini tanımlıyoruz
 public $renk;
 
 // yapılandırıcı metodu oluşturuyoruz
 function __construct($renk) {
 $this->renk = $renk;
 }
 
 // renkGetir metodunu oluşturuyoruz
 public function renkGetir() {
 return $this->renk;
 }

}

$araba = new Araba('Kırmızı'); // nesnemizi oluşturuyoruz
echo $araba->renkGetir(); // metodumuzu çağırıyoruz
?>

Yapılandırıcı metodu oluştururken geçirdiğiniz parametreleri, sınıf nesnesini yaratırken de yapılandırıcı metoda göndermeniz gerekir. Bu sebeple sınıfımızı oluştururken yapılandırıcıya geçirdiğimiz $renk parametresine “Kırmızı” değerini atadık.

Yok ediciler de (destructors), yapılandırıcıların tam tersi olarak sınıfın çalışması bittiğinde yapılması gereken işlemleri yapmakla yükümlüdürler. Yok ediciler:

<?php
function __destruct() {

}
?>

Şeklinde tanımlanır.

<?php
class Araba {

 function __construct() {
 echo 'Sınıf nesnesi yaratıldı <br />';
 }

 function __destruct() {
 echo 'Sınıf nesnesi yok edildi';
 }

}

$araba = new Araba(); // nesnemizi oluşturuyoruz
?>

Sınıfımızı bu şekilde çalıştırdığımızda nesne yaratıldığı zaman yapılandırıcı, nesne yok edildiği zaman da yok edici metodun çalıştığını görürsünüz.

Kalıtım (Inheritance)

Kalıtım, bir sınıfın özellik ve metotlarını başka bir sınıfa aktarmasını ve aktarılan elemanların alt sınıf tarafından kullanılmasını sağlar. Herhangi bir sınıf başka bir sınıfın elemanlarını miras alırken extends deyimini kullanır. Bu durumda elemanlarını devreden sınıf üst sınıf, üst sınıfın elemanlarını devralan sınıf da alt sınıf olarak adlandırılır.

Araba sınıfımıza ek olarak bir de Motosiklet sınıfı oluşturalım. Motosiklet sınıfımız Araba sınıfının alt sınıfı olsun. Motosiklet sınıfımız için nesnemizi oluşturalım ve Araba sınıfına ait elemanları kullanalım.

<?php
class Araba {

 // sınıf özelliğini tanımlıyoruz
 public $renk;
 
 
 // $renk özelliğini getiren metot
 public function getRenk() {
 return $this->renk;
 }

}

/*
Motosiklet sınıfımız araba sınıfının elemanlarını miras alıyor
*/
class Motosiklet extends Araba {

 // sınıf özelliğini tanımlıyoruz
 public $tekerlek;
 
 // $tekerlek özelliği getiren metot
 public function getTekerlek() {
 return $this->tekerlek;
 }

}

$motor = new Motosiklet(); // nesnemizi oluşturuyoruz
$motor->renk = 'Siyah'; // Araba sınıfının özelliğine erişiyoruz
$motor->tekerlek = 2;
echo $motor->getRenk() . '<br />'; // Araba sınıfına ait metodumuzu çağırıyoruz
echo $motor->getTekerlek(); // metodumuzu çağırıyoruz

?>

Gördüğünüz gibi alt sınıfımızda üst sınıfımıza ait elemanları kullanabiliyoruz.

Kafa karışıklığına yol açmaması için örnekleri çok basit tutmaya çalıştım. Sınıf yapılarına giriş için şimdilik bu kadar yeterli. Bu konuda yeni yazılar yazıp konunun detaylarına girmeyi düşünüyorum.

Henüz Yorum Yapan Olmadı

Yorum Yapın