Örnekle PHP Nesne Yönelimli Programlama (OOP'ler) kavramı Eğitimi
OOP nedir?
Nesneye Dayalı, uygulamayı çalışanlar, arabalar, banka hesapları vb. gibi gerçek dünya nesneleri etrafında modelleyen bir yazılım geliştirme yaklaşımıdır. Bir sınıf, gerçek dünya nesnesinin özelliklerini ve yöntemlerini tanımlar. Bir nesne bir sınıfın oluşumudur.
Nesne yöneliminin üç temel bileşeni;
- Nesneye yönelik analiz – sistemin işlevselliği
- Nesne yönelimli tasarım – sistemin mimarisi
- Nesneye yönelik programlama – uygulamanın uygulanması
Nesneye Yönelik Programlama İlkeleri
OOP'un üç temel ilkesi;
- Encapsulation – bu, uygulama ayrıntılarını gizlemek ve yalnızca yöntemleri açığa çıkarmakla ilgilidir. Kapsüllemenin temel amacı şudur;
- Yazılım geliştirme karmaşıklığını azaltın – uygulama ayrıntılarını gizleyerek ve yalnızca işlemleri açığa çıkararak, bir sınıfı kullanmak kolaylaşır.
- Bir nesnenin dahili durumunu koruyun – sınıf değişkenlerine erişim, get ve set gibi yöntemlerle sağlanır; bu, sınıfı esnek ve bakımı kolay hale getirir.
- Sınıfın dahili uygulaması, sınıfı kullanan kodun kırılması endişesi olmadan değiştirilebilir.
- miras – bu sınıflar arasındaki ilişkiyle ilgilidir. İlişki ebeveyn ve çocuk şeklini alır. Çocuk, ebeveyn sınıfında tanımlanan yöntemleri kullanır. Mirasın temel amacı;
- Yeniden kullanılabilirlik: Birden fazla çocuk aynı ebeveynden miras alabilir. Veritabanına veri ekleme, güncelleme ve silme gibi ortak işlevler sağlamamız gerektiğinde bu çok kullanışlıdır.
- Polimorfizm – bu, tek bir forma ama birçok farklı uygulama yoluna sahip olmakla ilgilidir. Polimorfizmin temel amacı;
- Uygulamaların bakımını basitleştirin ve onları daha genişletilebilir hale getirin.
OOP'ler Concepts PHP'de
PHP nesne yönelimli bir kodlama dilidir; yukarıdaki ilkelerin tümünü destekler. Yukarıdaki ilkelere;
- Encapsulation – “get” ve “set” yöntemleri vb. kullanılarak
- miras – extends anahtar sözcüğünü kullanarak
- Polimorfizm – apps anahtar sözcüğünün kullanımı yoluyla
Artık OOP ile ilgili temel bilgiye ve bunun nasıl desteklendiğine sahibiz. PHP, yukarıdaki ilkeleri uygulayan örneklere bakalım
UML nedir?
Birleşik Modelleme Dili UML, nesne yönelimli sistemleri tasarlamak ve belgelemek için kullanılan bir tekniktir.
UML bir takım belgeler üretir, ancak nesne yönelimli php programlama için çok önemli olan sınıf diyagramına bakacağız.
Sınıf Diyagramı Örneği
Sınıf Diyagramı Anahtarı
- The Üst kutu sınıf adını içerir
- The orta kutu sınıf değişkenlerini içerir
- The alt kutu sınıf yöntemlerini içerir
- The eksi (-) işaret anlamına gelir özel kapsam
- The artı (+) işareti kamusal kapsam anlamına gelir
- The doğramak (#) işareti korunan kapsam anlamına gelir
PHP'de sınıf nasıl oluşturulur
Class anahtar sözcüğü PHP'de bir sınıfı tanımlamak için kullanılır. Aşağıda PHP'de sınıf oluşturma kuralları verilmiştir.
- Sınıf adı bir harfle başlamalıdır
- Sınıf adı PHP'ye ayrılmış bir sözcük olamaz
- Sınıf adı boşluk içeremez
Diyelim ki hayvanları temsil etmek için bir sınıf oluşturmak istiyoruz.
Tüm hayvanlarda ortak olan özellikleri belirleyerek başlayacağız.
- Tüm hayvanlar otobur, karnaval vb. gibi bir aileye aittir.
- Bütün hayvanlar yemek yer
Aşağıdaki şemada hayvanın şeması gösterilmektedir
Şimdi hayvan sınıfımızı kodlayalım
<?php class Animal { private $family; private $food; public function __construct($family, $food) { $this->family = $family; $this->food = $food; } public function get_family() { return $this->family; } public function set_family($family) { $this->family = $family; } public function get_food() { return $this->food; } public function set_food($food) { $this->food = $food; } } ?>
İŞTE,
- “özel $aile, $yiyecek” değişkenlere doğrudan sınıf dışından erişilemeyeceği anlamına gelir (Kapsülleme).
- “public function __construct($family…)” php yapıcı yöntemidir. Bu işlev, sınıfın bir örneği oluşturulduğunda çağrılır. Bu durumda aileyi ve yemeği ayarlıyoruz.
- “public function get…()”, aileye veya gıda değerine erişmek için kullanılan yöntemdir (Kapsülleme)
- “genel işlev seti…()”, aile veya yiyecek değerini ayarlamak için kullanılan yöntemdir (Kapsülleme)
PHP'de Kalıtım nasıl uygulanır?
Bir inek ve bir aslanla çalışacağız. Hem inek hem de aslan, Hayvan sınıfından miras alır.
Aşağıdaki sınıf diyagramı ilişkileri göstermektedir.
İneğin hayvan sınıfından miras aldığını ve kendi değişkenini ve yöntemlerini de tanımladığını unutmayın.
Şimdi Cow sınıfını kodlayalım
<?php class Cow extends Animal { private $owner; public function __construct($family, $food) { parent::__construct($family, $food); } public function set_owner($owner) { $this->owner = $owner; } public function get_owner() { return $this->owner; } } ?>
Şimdi Lion sınıfını kodlayalım
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
İŞTE,
- “sınıf… Hayvanı genişletir”, inek ve aslanın Hayvan sınıfından (Kalıtım) yöntemleri kullanmasını sağlar.
Sınıfın nesnesi nasıl oluşturulur
Basitlik açısından Animal, Cow ve Lion sınıflarının tümü aynı dizinde olmalıdır.
Şimdi sınıflarımızı kullanan uygulamayı oluşturalım.
PHP Sınıfı Örneği
<?php require 'Animal.php'; require 'Cow.php'; require 'Lion.php'; $cow = new Cow('Herbivore', 'Grass'); $lion = new Lion('Canirval', 'Meat'); echo '<b>Cow Object</b> <br>'; echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>'; echo '<b>Lion Object</b> <br>'; echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food(); ?>
Uygulamamızı test etme
Şimdi uygulamamızı bir web tarayıcısında görüntüleyelim
Harika değil mi? Şimdi OOP'nin üçüncü prensibi olan polimorfizme bakalım.
Gibi farklı veritabanı motorlarına bağlanan bir uygulama geliştirmek istediğimizi varsayalım. MySQL ve SQL Sunucu ancak aynı tek tip arayüzü kullanın.
Standart yöntemleri tanımlayan bir arayüz ve ortak yöntemleri uygulayan soyut bir sınıf oluşturabiliriz.
- arayüzey – bir sınıfa benzer. Yalnızca yöntemleri ve parametreleri tanımlar.
- Soyut sınıf – Doğrudan bir nesne oluşturmak için kullanılamayan bir sınıftır. Amacı ortak yöntemlerin kısmen veya tamamen uygulanmasını sağlamaktır.
Aşağıdaki sınıf diyagramı soyut sınıfımız, arayüzümüz ve uygulama sınıflarımız arasındaki ilişkiyi göstermektedir.
Şimdi soyut sınıfımızı oluşturalım
<?php abstract class DBCommonMethods { private $host; private $db; private $uid; private $password; public function __construct($host, $db, $uid, $password) { $this->host = $host; $this->db = $db; $this->uid = $uid; $this->password = $password; } } ?>
İŞTE,
- “soyut sınıf”, sınıfın doğrudan php nesnesi oluşturmak için kullanılamayacağı anlamına gelir
- “$Host,$db…” tüm uygulamalarda ortak olan sınıf değişkenleridir
- “function __construct(…)”, başlatma sırasında ortak değişkenlerin değerlerini ayarlayan php sınıfı yapıcı yöntemidir
Şimdi veritabanı motoruna bağlı olarak farklı şekilde uygulanacak standart yöntemleri içeren arayüzü oluşturalım.
<?php interface DBInterface { public function db_connect(); public function insert($data); public function read($where); public function update($where); public function delete($where); } ?>
İŞTE,
- “arayüz” arayüz oluşturmak için kullanılan anahtar kelimedir
- “kamu işlevi…(…)” uygulanması gereken standart yöntemlerdir
Şimdi DBCommonMethods sınıfını genişletecek ve DBInterface arayüzünü genişletecek somut sınıfları oluşturalım. MySQLDriver.php
<?php class MySQLDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { //connect code goes here } public function delete($where) { //delete code goes here } public function insert($data) { //insert code goes here } public function read($where) { //read code goes here } public function update($where) { //update code goes here } } ?>
MSSQLServerDriver.php
<?php class MSSQLServerDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { //connect code goes here } public function delete($where) { //delete code goes here } public function insert($data) { //insert code goes here } public function read($where) { //read code goes here } public function update($where) { //update code goes here } } ?>
İŞTE,
- “sınıf… DBCommonMethods'u genişletir”, DBCommonMethods'taki yöntemleri kullanır
- “… DBInterface'i uygular”, kullanılan veritabanı sürücüsünden bağımsız olarak sınıfın standart yöntemler sağlamasını sağlar.
Yukarıdaki kodun kullanımı Yukarıdaki sınıfı kullanan kod şu şekilde görünecektir:
<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>
Or
<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>
Kodun geri kalanı her iki sürücü için de aynı olacaktır;
<?php $db->db_connect(); $db->insert($data); ?>
ÖZET
- Nesneye Yönelik Programlama OOP, uygulamaları gerçek dünyadaki nesnelere göre modelleyen güçlü bir tekniktir
- Sınıf, gerçek dünya nesnelerinin özellikleri ve yöntemleriyle temsilidir
- OOP'un üç temel ilkesi;
- Encapsulation
- miras
- Polimorfizm