17 Ocak 2008 Perşembe

Nesne Yönelimli Programlama ve Php-1

Merhaba;
Bu makalede nesne yönelimli programlamanın faydalarını ve mantığını kavramaya çalışarak php üzerinde uygulamalar yapacağız.
Öncelikle bu makalenin içinde neler var bir bakalım;
1) Nesne yönelimli programlama nedir?
2) Php’de nesne yönelimli programlama
2.1) Basit bir sınıf oluşturma
2.2) Sınıflar ve Nesneler
2.3) Sınıf nitelikleri kullanmak
2.4) Bazı özel metotlar
2.4.1) Yapılandırıcı( __destruct() ) ve Sonlandırıcı ( __destruct() )
2.4.2) Erişim fonksiyonları ( __get() ve __set() )
2.4.3) __autoload()
2.4.4) __clone
2.4.5) Statik sınıf sabitleri
2.4.6) Statik Metotları uygulamak
2.5) Sınıf işlemlerini çağırmak
2.6) İki sınıfın beraber çalışması
2.7) Private, Public ve Protected
2.8) Kalıtım
2.9) Yetki Kullanma (Overridding)

Nesne yönelimli programlama nedir?
Sizinde yazdığınız kodlar artık okunurluluktan uzaklaşmış ve sürekli kod tekrarları yapmaya başlamışsanız artık sizinde nesneye yönelik programlamaya başlamanızın zamanı gelmiştir.
Nesneye yönelik programlama bana göre dünyayı daha iyi bir şekilde gözlemlediğimizde karşımıza çıkan ve bize bir takım avantajlar sunan programlama mantığıdır.

Nesneye yönelik programlamanın bize sağladığı faydaları kısaca şöyle özetleyebiliriz;

1) Ekip halinde geliştirilen büyük bir projenin içindeysek, mesela 8-10 kişinin geliştirdiği bir proje üzerinde çalışıyoruz. Nesne yönelimli programlama ile hiç kimsenin birbirini beklemesine gerek kalmaz, herkes yazması gereken kodları yazar ve bunlar kolayca birleştirilebilir.
2) Yazılan kodlar daha düzenli olur, bu da okunurluluğu arttırır.
3) Yazdığımız kodları daha sonrada başka projelerde kullanabiliriz, bize zaman ve maliyet açısından birçok fayda sunar.
4) Kodlarımızı düzenlerken veya üzerinde değişiklik yaparken kolaylık sağlar. Nesneye yönelik programlama sayesinde yazdığımız uygulamanın çok az bir kısmında değişiklik yaparak bütün uygulama üzerinde değişiklikler yapma imkanına kavuşuruz.
5) Projelerimize ek özellikler katarken, çok daha az maliyetle bunu başarırız.

Nesneye yönelik programlama yapmanın bize getirdiği faydaları sunduk ama bunun ne olduğunu size daha açıklayamadık bunu bir örnekle yapalım.

Örneğimizde bir araba fabrikası ve oluşturduğu arabalar olsun. İlk başta fabrikayı incelersek bu fabrika içerisinde arabaların yapımına yardımcı olan bölümler ve makineler mevcuttur. Bunların birbiriyle uyumlu çalışmaları sonucunda ortaya arabalar çıkar.
Bu örneği nesne yönelimli mantıkla incelersek, fabrika bizim sınıfımızdır, fabrika içerisinde işlem yapan bölümlerde sınıfımızın metotlarıdır ( Sınıf içersindeki fonksiyonlar ). Kullanılan makinelerde bizim niteliklerimizdir(Sınıf içerisindeki değişkenler). Oluşturulan arabalarda bizim nesnelerimizdir. Sınıfımızı kullanarak aynı özelliklere sahip birden çok nesne yapabiliriz. Yani her araba için tekrardan fabrika kurmaya gerek kalmaz.
Bu şekilde aynı özellikleri tekrar tekrar kodlamaktan kurtuluruz ve istediğimiz zaman fazla masraf etmeden araba elde edebiliriz.
Yukarıdaki örnek en basit şekilde size sınıf ve nesne kavramlarını anlatmak amacıyla yazılmıştı ama tabi ki nesneye yönelik programlama bu kadar basit çalışmaz. Bunun için çok iyi düşünülmüş ve planlanmış sınıf tasarımları yapmak lazımdır.
Sınıfları oluştururken uyumluluğu yüksek, bağımlılığı düşük tasarımlar yapmaya çalışmak önemlidir. Bunu biraz daha açarsak bir proje için birkaç tane her işimizi görecek büyük sınıf tasarlayabiliriz ama bu kullanışlılıktan uzak olacaktır. Örneğin araba fabrikasını kurduk, arabaları ürettik. Arabalarımız çok beğenildi ve bizden başka çeşit arabalarda yapmamızı istediler bunun için fabrikamızın yanına yeni bir fabrika daha kurmaya karar verdik. Bu yeni kuracağımız fabrikada başka bir çeşit araba üretsin. İki fabrika yan yana olduğu için bu yeni fabrikayı kurarken maliyeti en aza indirmek için bazı bölümleri beraber kullanacak şekilde tasarlarsak maliyetimiz daha aşağılara iner örneğin kullanılan camlar, vidalar falan aynı olabilir. İşte burada nesne yönelimli mantığı kullanarak iki fabrikayı entegre bir biçimde kullanarak, mesela cam üreten bölümle ve vida üreten bölümü ortak olarak kullanırsak.
Yani ikinci fabrika bizim ikinci sınıfımızdır, içinde birinci sınıftaki metotlarla aynı olan metotlarda vardır bu yüzden bu metotları tekrar kodlamak yerine, bunları birinci sınıfla ortak olarak kullanabiliriz, bu şekilde programımızın uyumluluğunu artırabiliriz.
Hatta cam üretme bölümünü bir sınıf olarak tasarlayıp daha sonra helikopter üretme fabrikamızla da ortak olarak çalıştırabiliriz. Böylece tasarladığımız sınıflar küçük olmuş olabilir ama birbiriyle uyum içinde ve aynı zamanda bağımlılığı en aza indirgemiş bir biçimde kullanabiliriz.
Bir başka özelliği de fabrikadaki her bir bölümü birbirinden ayrı olarak tasarladığımızdan, başka bir bölümde çalışan işçi, kendisine ait olmayan bir bölüme giremez bu sayede kodumuzun güvenirliliğini arttırırız. Bu şekilde daha sağlam kod yazabilir ve elimizdeki hareketsiz, işe yaramayan veriyi güzel bir şekilde elinizdeki metotlarla biçimlendirip kullanıcılarınıza sunabilirsiniz.
Nesneye yönelik programlamayı kendinize ait sınıflar tasarlamaya başladığınızda çok daha iyi anlarsınız.

Sınıf tasarlarken birkaç noktaya dikkat edersek tasarım aşamamız kolaylaşır;
1) Sınıfların belirlenmesi,
2) Özelliklerin ve davranışların tespiti,
3) Sınıflar arası ilişkilerin bulunması ve
4) Sınıfların bir hiyerarşi içinde organize edilmesi
Kodlama aşamasına geçmeden yukarıdakileri yapmak, kodlama aşamasında bize çok yardımcı olur.

Php’ de nesne yönelimli programlama;

Php 4.x.x versiyonundan itibaren nesne yönelimli programlaya destek vermeye başladı ama bu özelliği çok gelişmemişti. Fakat php5’te php4’te ki kalıpların neredeyse tamamen değiştirip, çok daha gelişmiş bir nesne yönelim desteği getirilmiştir. Bu destek geliştirilirken Java örnek alınmıştır. Bazı dedikodulara göre; php bu özellikle java’ya daha çok yaklaşmıştır. Söylentilere göre java’nın web dili olan jsp’de ilerde asp gibi bir çok dil ile yazılabilir hale gelecekmiş, örneğin asp genellikle vbscript ile yazılıyor fakat başka dillerde de yazılabiliyor onun gibi belki de ilerde php ile jsp yazabileceğiz bunun bize katacağı en önemli özellikte java’nın geniş kütüphanelerinden bu sayede yararlanabileceğiz.

Basit bir sınıf örneği;
Burada hem php4 hem de php5 ile yazılmış iki basit sınıf tanıtacağız bu aralarındaki farkı anlamamız açısından bize faydalı olacaktır, özelliklede php5 ‘in bize kattığı yenilikleri öğrenmemiz açısından.Gerçi artık php4 desteklenmeyecekmiş ama olsun biz görelim çok şey kaybetmeyiz.

Php 4 ile;

ad=$ad;
}
function yaz()
{
return $this->ad;
}
}
?>

Php 5 ile;
ad=$ad;
}
public function yaz()
{
return $this->ad;
}
}
?>

Şimdi daha önceden çok bir tanışıklığımız olmayan kodlarla tanışalım baştan aşağı doğru inerken ilk karşımıza çıkan ‘class’ anahtar kelimesidir. Bu bize bir sınıf tanımlamaya başladığımızı haber verir ve daha sonra sınıfımızın adını veririz, ve içine metotlarımızı ve niteliklerimizi yazmak için süslü parantezlerimizi koyarız. Şimdi sıra içindekileri anlamlandırmak, var ile $m adında bir nitelik tanımlıyoruz, function ile bir metot belirtiyoruz, kısaca php4’te kodlama standartları böyledir.Php5’te ise tek değişiklikler public kelimesinin kullanılmasıdır, bunun yerine private ve protected kelimelerine kullanılabilirdi. Bunların ne anlama geldiğini ileride daha detaylı olarak anlatacağız. Şimdilik çok kafanıza takmayın.

Şimdi yazdığımız sınıfların nasıl kullanılacağına bakalım;

isim(“Enes”);
echo $a->m;
echo $a->yaz();
unset($a);
?>

Şeklinde bir kodla sınıfımızı kullandık. Kodlara bakarsak new komutuyla ziyaretçi sınıfında bir a nesnesi oluşturduk ve $a->isim(“Enes”) şeklindede sınıfımız içindeki metotlara ulaştık ve kullandık. unset($a) ile de oluşturduğumuz nesneyi hafızada fazla yer kaplamaması için kaldırdık.
Bunun ekrana çıktısı şu şekilde olacaktır;
Merhaba Enes
İki sınıfta bize bu çıktıyı verecektir.

Sınıf işlemlerini çağırmak;

Şeklinde bir sınıf tanımlayalım;

class classname
{
function operation1()
{}
function operation2()
{}
}
$a= new classname();
$x=$a->operation1();
$y=$a->operation2(12,”test”);

Yukarıdaki gibi de tanımladığımız metotlara erişebiliriz.

Not: Yazının devamı en kısa sürede gelecektir.Yorumlarınızı ve önerilerinizi bekliyoruz.

4 yorum:

Unknown dedi ki...

php dilini yeni öğrenmeye başladım inşallah bu nesne olayını da senin sayende çözebilirim teşekkürler...

kazaan dedi ki...

İnşaallah yardımcı olabilirim anlaşılamayan yerde sorular sorarsanız daha çok yardımcı olabilirim.

Adsız dedi ki...

teşekkürler.object oriented va class anlatımı faydalı oldu.araba fabrikası örneği çok güzel.
iyi çalışmalar.

Admin dedi ki...

Çok güzel bir yazı türkçe php ve class kullanımı ile ilgili kaynak buldum sayende yazının devamını bekliyorum...