Yerleşik Exception sınıfı ve üzerine inşa ettiğimiz yeni sınıf
Php ile gelen yerleşik exception sınıfı
(Bu kod http://www.php.net/ adresinden alınmıştır.)
class Exception
{
protected $message = 'Unknown exception';
protected $code = 0;
protected $file;
protected $line;
function __construct($message = null, $code = 0);
final function getMessage();
final function getCode();
final function getFile();
final function getLine();
final function getTrace();
final function getTraceAsString();
function __toString();
}
?>
Gördüğünüz gibi daha önceki yazımızda söylediğimiz metotları içeren bir sınıf.Burda en çok dikkat çeken şey __toString() metodu hariç diğer metotların başına final anahtar sözcüğü gelmiş bu anahtar sözcük bu metotların hiç bir şekilde başka sınıflar tarafından kullanılamıyacağını üzerinde bir düzenleme yapılamayacağını gösterir. Yani bu metotlar kalıtım yoluyla başka alt sınıflara devredilemez.
(final anahtar kelimesini kendi sınıflarınızın hangi elemanının alt sınıflar tarafından erişilmesini engellemek istiyosanız kullanabilirsiniz,bu anahtar kelimeyi sınıflarınızın başına koyarakta yazdığınız sınıfın başka bir alt sınıfta kullanılmasını engelleyebilirsiniz.)
__toString metodu ise final anahtar kelimesini içermediği için alt sınıflar tarafından erişilebilir ve düzenlenebilir.Bununla ilgili hemen bir örnek yapalım;
class benimsinifim extends Exception
{
function __toString()
{
return 'buraya bir link yazabilirsiniz veya istediğiniz bir Html koduda olabilir';
Bildirmek için tıklayınız';
}
}
try
{
throw new benimsinifim("Hata!!!");
}
catch(benimsinifim $m)
{
echo $m->getMessage();
echo $m;
}
?>
Bu yaptığımız sınıfla __toString metoduna erişip onu Exception sınıfında devre dışı bırakıyoruz ve benimsinifim sınıfında yeniden oluşturuyoruz ve Geri bildirim yapmak için bir link sunuyoruz.
Kendi exception sınıfınızı tanımlamak için genellikle php’de yerleşik olan exception sınıfının üzerine inşa ettiğiniz sınıfları kullanırsanız özellikle başlangıç aşamasında size daha faydalı kodlar yazmanızda yardımcı olur.
Şimdi yerleşik exception sınıfının metotlarını daha yakından inceleyelim;
getMessage()
Daha önce verdiğimiz örneklerdende anlaşılacağı üzere;
throw new Exception(‘Hata mesajımız’);
şeklinde fırlattığımız hata mesajını yakalayıp(catch blogu içinde) ekrana basılmasını sağlamamıza yarar.
catch(Exception $m)
{
echo $m->getMessage();
}
getCode()
Bu özellikte hata mesajımıza bir hata kodu vermemize yarar.
throw new Exception (‘Hata mesajımız’,1);
Burada da hata mesajımızdan sonra fırlatılacak hata mesajının yanında fırlatılacak hata kodunu gireriz. Ve bunu catch blogu içinde kullanırız.
catch(Exception $m)
{
echo $m->getMessage()
}
getFile()
Bu metot da hatanın olduğu dosyanın tam adresini döndürür. Yine aynı şekilde kullanılır.
getTrace()
Bu metotda hata verilen sayfayı ve hata sırasında hangi fonksiyonların çalıştığını size dizi halinde verir.
function a()
{
throw new benimsinifim("Hata!!!");
}
try
{
a();
}
catch(benimsinifim $m)
{
print_r( $m->getTrace());
}
Şeklinde bir kodunuz varsa bu metot sayesinde size şöyle bir çıktı verilecektir.
Array ( [0] =>
Array ( [file] => C:\wamp\www\projects\trying\nesneyonelik\hatayakalamasinifi.php
[line] => 22
[function] => a
[args] => Array ( ) ) )
getTraceAsString()
Bu metotda getTrace() metoduyla aynı bilgileri bir karakter katarı olarak verir.
catch(benimsinifim $m)
{
echo $m->getTraceAsString();
}
Çıktısıda şu şekilde olur.
#0 C:\wamp\www\projects\trying\nesneyonelik\hatayakalamasinifi.php(22): a() #1 {main}
__toString()
Bu metodu yukarıda açıklamıştık ve kullanımınıda göstermiştik şu şekilde de kullanabilirsiniz.
catch(benimsinifim $m)
{
echo $m->getTraceAsString();
echo $m->__toString();
}
Size yine aynı sonucu vericektir.
1 Şubat 2008 Cuma
Php 5 Yeni Hata Yakalama Sınıfı(Exception)-2
Etiketler: Exception, Hata Yakalama, İstisnalar, Php, Sınıf
31 Ocak 2008 Perşembe
Php 5 Yeni Hata Yakalama Sınıfı (Exception)
İstisnalar Php 5’te yeni bir özelliktir. İstisnalar hata yönetimini kolay, genişletilebilir, bakımı yapılabilir ve nesne yönelimli bir şekilde gerçekleştirilmesini mümkün kılan bir yönetimdir.
İstisnalar nasıl kullanılır?
Normalde kodlarımızdaki hataları genellikle if-else komutlarını kullanarak kontrol ediyorduk.Örneğin kullanıcı e-mail adresini girmediyse karşısına “Lütfen email adresinizi giriniz” şeklinde bir mesaj yolluyorduk. Bunu da genellikle formdan gelen verileri if-else kullanarak yapıyorduk. Php 5 geliştirilirken bunun üzerinde düşünmüşler ve biraz daha değişik bir yöntem belirlemişler.İşte biz bu makalemizde bunu inceleyeceğiz nasıl olur, nasıl kullanılır bakacağız.
İstisna Yöntemi
try
{
//Uygulamanızdaki kodlar buraya
}
Yukarıda gördüğünüz gibi uygulamanızdaki kodları try blogu içine yazarak istisna yöntemini kullanmaya başlayabilirsiniz. Bu blok arasına yazdığız kodlarda bir hata meydana gelirse, istisna fırlatma denilen işlemin uygulanmasını başlatılır.
İstisna Fırlatalım
throw new Wxception(‘Mesaj’,code);
throw anahtar sözcüğü ile istisna yönetimi mekanizmasını tetikleyebilirsiniz. Bu anahtar sözcük bir nesne almayı bekler.En basit durumda Php5 teki yerleşik Exception sınıfının bir örneğini oluşturabilirsiniz.
Bu sınıfa ait yapılandırıcı iki parametre alır, Bir mesaj ve bir kod.Bunlar bir hata mesajını ve bir hata kod numarasını temsil eder.
Try bloğunun altında bir tanede catch bloğu vardır. Buda fırlatılan istisnaların yakalanmasını sağlar.
catch ( typehint exception )
{
//İstisnayı yönet
}
Tek bir try bloğuyla ilişkilendirilen birden fazla catch bloğu olabilir. Fakat her bir catch bloğu farklı tipte bir istisna yakalayacaksa, birden fazla try blogu kullanmak daha mantıklıdır
Örneğin, eğer Exception sınıfının istisnalarını yakalamak isterseniz catch bloğunuz şu şekle olabilir.
catch (Exception $e)
{
//İstisnayı yönet
}
catch bloğuna geçirilen (ve bu blok tarafından yakalanan) nesne, istisnayı gönderen throw ifadesine geçirilen (ve bu deyim tarafından fırlatılan) nesnedir. İstisna herhangi bir tipte olabilir, ama Exception sınıfının örneklerini ya da kendi kullanıcı tanımlı istisnalarınızın örneklerini(özelliklerini Exception sınıfından kalıtım yoluyla alan örnekler) kullanmanız iyi olur.
Bir istisna fırlatıldığında, php bununla eşleşen bir catch bloğu arar. Eğer birden fazla catch bloğu kullanıyorsanız, bunların her birine geçirilen nesneler farklı tiplerde olacak ve böylece php hangi catch bloğunun kullanılması gerektiğini anlar.Ayrıca bir catch bloğu içindede istisnalar fırlatabilirsiniz.
Exception Sınıfının Metotları
getCode() -> Kodu yapılandırıcıya geçirildiği şekliyle döndürür.
getMessage() -> Mesajı yapılandırıcıya geçirildiği şekliyle döndürür.
getFile() -> İstisnanın fırlatıldığı kod dosyasına giden tam yolu döndürür.
getTrace() -> İstisnanın fırlatıldığı backtrace’i içeren bir dizi döndürür.
getTraceAsString() -> getTrace ile aynı bilgileri karakter katarı olarak döndürür.
__toString() -> Yukarıdaki metotlardan alınan bütün bilgileri veren bir exception nesnesinin özelliklerini yansıtmanızı sağlar.Mesajınızın şeklini şemalini düzeltmenize yarar.
(*backtrace : İstisna fırlatıldığı zaman hangi fonksiyonların çalışmakta olduğunu gösterir.)
Aşağıda formdan gelen kullanici adi ve şifreyi denetleyen istisna yöntemi kullanılmış bir kod var incelemenizde fayda var.
try
{
$kullanici_adi=$_POST['kullanici_adi'];
$sifre =$_POST['sifre'];
if($kullanici_adi !== "kullanıcıadim" and $sifre !== "sifrem")
{
throw new Exception("Lütfen yönetici adinizi ve parolanizi dogru giriniz.");
exit();
}
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
Not: Bir dahaki yazımızda kendi exception sınıfımızı oluşturmaya çalışacağız.
Etiketler: Exception, Hata Yakalama, İstisnalar, Php, Sınıf
25 Ocak 2008 Cuma
Kazaan-Test-Script v1.0
Yeni başladığım bir proje adındanda belli oldugu gibi sitenizde kullanabileceğiniz, ziyaretçilerinize test yapabileceğiniz bir script.
Şu aşamada eksikleri çok ama ileri ki versiyonlarda çok daha kaliteli bir script olucak, kısaca özelliklerine gelirsek, yönetici istediği kadar test hazırlayıp, istediği kadar soru koyabiliyor bu testlerin içerisine. Soruların hepsi tek bir sayfada gösteriliyor sorular cevaplandıktan sonra gönderilen sayfada hangi soru dogru cevaplanmış, hangisi yanlış, doğru şık hangisi gibi bilgileri veriyor. Umarım bu versiyondan itibaren işinize yarayacak bir script olur. Veritabanı ayarlarınızı diger/fonksiyonlar.php içerisinden ayarlayabilirsiniz. Ve diğer versiyon için fikirlerinizi belirtirseniz şöyle daha iyi olur, burası eksik olmuş tarzında daha kullanışlı bir versiyon elde edebiliriz gelecek açısından. Aşağıdaki adresten indirebilirsiniz. Yorumlarınızı bekliyorum.
http://www.dosyaupload.net/download.php?file=615954
Etiketler: php5, Test script
Zend Sertifika Programı
Örnek sorulara aşağıdaki linkten ulaşabilirsiniz;
http://www.zend.com/store/education/certification/self-test.php?begin=1
Türkiye'de de bazı siteler konunun üstüne ciddi bir şekilde eğilmişler videolu ders ayarlayacaklarmış;
http://javam.org/javamorgtan-zend-sertifikasi-icin-videolu-dersler/
Son olarakta gmailde bir grup kurmuslar sizleride bekleriz.
http://groups.google.com/group/zendturkiye
Örnek sorularda başarılar benim için çok güzel geçmedi sizde kendinizi bir deneyin bence.
19 Ocak 2008 Cumartesi
Nesne Yönelimli Programlama ve Php-3
Php’de en fazla iki sınıf beraber çalışabilir, bu cümle biraz yanlış oldu ama biraz daha açıklamaya çalışırsak her sınıfın sadece bir ebeveyn (parent)’i vardır, yani her sınıf bir tane sınıf kapsayabilir. Bunları bir de şekil üzerinde göstermeye çalışalım.
Php (1) ve (2) yi destekler fakat (3)’ ü desteklemez. Anlaşılmıştır umarım şimdi bir örnek yapalım bu iş için “extends” anahtar kelimesini kullanacağız.
class A
{
var $deger1;
function arababoya1()
{
}
}
?>
class B extends A
{
var $deger2;
function arababoya2()
{
}
}
?>
Görüldüğü üzere “extends” anahtar kelimesini kullanarak iki sınıfı beraberce kullanabiliriz, bu şekilde yine yazdığımız temel bir sınıfı bu şekilde daha özelleştirilmiş işlerde kullanmak için başka bir sınıfın içinde kullanabiliriz. Yukarıdaki kodu nasıl kullanacağımıza bakalım.
$b = new b();
$b -> arababoya1();
$b -> deger1=10;
$b -> arababoya2()
$b-> deger2=20;
Bir b nesnesi tanımladık B sınıfına ait ve içinde A sınıfına ait metotlarıda kullandık bu şekilde programları iç içe sınıflar yardımıyla yapabiliriz. Bu yazdığımız kodları başka projelerde rahatça kullanmamıza fayda sağlar.
Private, Public ve Protected
Daha önceden php4 ve php5’in farklarını açıklarken daha sonra belirticeğiz demiştik sıra geldi bunlara.
Php5’te nitelik ve metotlara ulaşmak için üç değişik ulaşım geliştirilmiştir.
Bunlar;
public: Türkçesi halk, genel manasındadır, anlayacağınız üzere bu şekilde tanımlanan metotlar ve nitelikler her yerden ulaşılabilir.Sınıfın içinden veya dışından.
Aynı zamanda varsayılan olarak kullanılır, hiç bir şey yazılmadıysa public’tir
private: Türkçesi özel demektir, gerçekten özel bir erişimdir, bu şekilde tanımlanmış metot ve nitelikler sadece ve sadece sınıf içinden erişilebilir. Bunun için özellikle metotlarda kullanırken dikkatli olmak lazım.
protected: Türkçesi korunmalı demektir, bu public ve private’nin arasında bir yerdedir. Bu şekilde tanımlanmış metot ve nitelikler sınıfın içerisinden ve diğer alt sınıflar tarafından ulaşılabilir yani kalıtımla ulaşabiliriz.
Bu kelimeleri istediğiniz sınıflara, metotlara veya niteliklerin başına yazarak istediğiniz sınıflara erişilip erişilemeyeceğini veya nasıl erişilebileceğini belirtebiliriz.Hiç bir şey yazmazsak varsayılan olarak public ayarlıdır.
Yetki Kullanma (Overridding)
Elinizde iki tane sınıfınız var ve bunları iç içe bir şekilde kullanmak istiyorsunuz, fakat bu iki sınıfın içinde aynı adlara sahip fakat farklı işler yapan metotlar ve nitelikler var, bu durumda sizce php hangisini kullanır, neler olabilir, ortalık biraz karışabilir bunu önlemek için;
1)İlk ve uzun yol biraz uğraştırıcı, zor, zaman çalan ve kullanışsız bir yol çakışan metot ve niteliklerin adlarını değiştirerek bir çözüme gidebiliriz :).
2)İki sınıfımız var ve bunlar iç içe(yani biri diğerini içeriyorsa) ve bazı metot ve nitelikler aynı adlara sahipse hangi sınıf diğer sınıfı kapsıyorsa onun içindeki metot ve nitelikler ilk önce kullanılır.Fakat biz kapsayan değil de kapsanan sınıftaki metot ve nitelikleri kullanmak istiyorsak “kapsanansınıf::parent::metot” şeklinde kullanabiliriz.
Etiketler: Nesne Yönelimli Programlama, Overridding, Php
18 Ocak 2008 Cuma
Nesne Yönelimli Programlama ve Php-2
Bazı özel metotlar;
Sınıflarınız içersinde kullanabileceğiniz bazı özel metotları ve bunların özelliklerini burada göstereceğiz.
Sınıflar içinde kullanılan bu özel metotlar “__” işareti ile başladığından, sizin oluşturduğunuz metotlarda “__” başlamanız önerilmez.
Yapılandırıcı( __destruct() ) ve Sonlandırıcı ( __destruct() )
__construct()
Bu metot sayesinde sınıfınız çağırılır, çağırılmaz otomatik olarak bu metot çalıştırılır. Bu metot genellikle nesneler üretilirken, sahip oldukları değişkenlerin değişik değerlerde olmasını sağlar. Fabrika örneğimize dönersek ürettiğimiz aynı çeşit iki arabanın bütün özellikleri aynıdır, yani aynı sınıfın metot ve niteliklerini kullanırlar, örneğin “araba_boya” diye bir metodumuz var, iki araba, iki ayrı nesnedir aynı metodu kullanır fakat biri siyah, biri kırmızı olabilir.Yani bunların kullandıkları nitelikleri birbirinden ayırmaya gereksinim vardır. Bu demek oluyor ki, nesneler üretilirken, onlara değişik kimlikler verecek bir mekanizmaya ihtiyacımız vardır. Bu görevi sınıf içinde yapılandırıcılar üstlenir.
Şimdi daha iyi anlamanız için basit bir örnek yapalım;
//Sınıfımızı tanımlıyoruz
class classname
{
function __construct($ad)
{
echo "Bu yazı sınıfınız çağırılır, çağırılmaz ekrana $ad yazdırır.";
}
}
//Sınıfımızı çağırıyoruz
$a = new classname("Enes");
unset($a);
?>
Aldığımız çıktı;
Bu yazi sinifiniz çagirilir, çagirilmaz ekrana Enes yazdirir.
__destruct()
Bu metot da __construct() metodunun tersi gibi düşünülebilir, bir nesneyi sonlandırırken otomatik olarak bu metot devreye girer. Genellikle bu metotla sınıf içerisinde oluşturulan niteliklerin değerini boşaltmak ve hafızayı daha verimli kullanmak için kullanılır.
class classname
{
function __destruct()
{
echo “Bu nesne sonlandırılmıştır.”;
}
}
?>
Kullanılışı;
$r= new classname();
unset($r);
?>
Çıktısı;
Bu nesne sonlandirilmistir.
Erişim fonksiyonları ( __get() ve __set() )
__get() ve __set() kullanarak sarmalama(encapsulation) yapılabilir. Bir sınıfın niteliklerine direkt olarak erişmek yerine erişim fonksiyonları yazarak tüm erişimlerinizi bir tek kod parçası üzerinden gerçekleştirebiliriz. Bu sayede metotlarımıza yapılan kontrolsüz ve gereksiz erişimleri engelleriz ve dış öğeleri, sınıfımızın içindeki içeriğe ulaşmasını önceden tanımlı standart arayüzler aracılığıyla ulaşmasını sağlarız. Sistemleri oluşturan modüllerin birbirine olan bağımlılığını azaltmak için kullanılan en önemli metottur.
class classname
{
var $attribute;
function __get($ad)
{
return $this->ad;
}
function __set($ad,$değer)
{
$this->$ad=$deger;
}
}
?>
__get() fonksiyonu bir parametre (bir niteliğin adı) alır ve bu niteliğin değerini döndürür.
__set() iki parametre alır, bir niteliğin adı ve bunu ayarlamak istediğiniz değer.
__get() ve __set() fonksiyonlarını kullanarak istediğiniz niteliğin değerini kontrol edebilir ve ayarlayabilirsiniz.
Aşağıdaki kodu yazarsak;
“$a = new classname();
$a -> $degisken = 5;”
bu ifade kapalı olarak __set() fonksiyonunu çağırır. “$a -> degisken” olarak yazarsak bu da __get() fonksiyonunu kapalı olarak çağırır.
__autoload()
Bu bir sınıf metodu değildir, ama sınıflar içinde çok faydalı bir biçimde kullanılır.Özellikle oluşturulan bir sınıf için gerekli olan dosyaların sayfaya dahil edilmesi için kullanılır genellikle.
function __autoload($ad)
{
include_once(“$ad.php”);
}
Bu kod sınıfla aynı adı taşıyan bir dosyayı dahil etmeye çalışır.
__clone
Mevcut bir nesneyi klonlamımızı sağlar.
$b = clone $a;
Kodu $a nesnesinin aynı sınıfta bulunan ve aynı nitelik değerlerine sahip olan bir kopyasını oluşturur. İsterseniz bu özelliğini değiştirip başka bir kopyalama özelliği sağlayabilirsiniz bunun için sınıfımızda __clone() adında bir metot tanımlamamız lazımdır.
Statik sınıf sabitleri;
Bu sabiti, ilgili sınıfın örneğini oluşturmak zorunda kalmadan kullanabiliriz.
class Math
{
const pi =3.14;
}
echo 'Math::pi='.Math::pi."\n";
?>
Bu örnekte de gördüğünüz gibi, sınıfa ait sabite, sabitin ait olduğu sınıfı belirtmek için :: operatörünü kullanarak erişebiliriz.
Statik Metotların uygulanması;
Bu anahtar sözcük (static) metotlara uygulandığında, bu metotların ilgili sınıfın örneğinin oluşturulması gerekmeden çağırılmalarına imkan sağlar.
class Math
{
static function squared($input)
{
return $input*$input;
}
}
echo Math:: squared(8);
?>
Statik bir metodun içinde this anahtar sözcüğünü kullanamazsınız, çünkü başvuruda bulunulacak bir nesne mevcut olmayabilir.
Not: Diğer yazıda görüşmek üzere.
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.
14 Ocak 2008 Pazartesi
Tipografi & Tangram
Ben yaparken çok eğlendim, sizede tavsiye ederim insan rahatlıyor yaparken. Dünyanın stresinden biraz olsun uzaklaşmak dikkatini başka bir şey üzerinde yoğunlaştırmak güzel oluyor.
Benim yapım maceramdan bahsediyim biraz da ilk başta kardeşimin oyun hamurunu aldım rengi maviydi. Biraz yoğurduktan sonra böldüm ve harfleri oluşturmaya başladım.Güzel olmuştu fakat fotoğraf makinesinin gazabına uğradığım için, tekrar bilgisayarıma ve photoshop'a kaldım.
13 Ocak 2008 Pazar
Yeniden yeniden yeniden
Hayatıma yenilikler katmaya başladığım 2008 yılı içindeki en önem verdiğim projelerden biriside kendime bir blog oluşturup bu aleme dalmaktı, biraz geç kalsamda bundan sonra yazılarımla buradan insalara ulaşmaya çalışacağım.
Neler olucak ne hakkında yazıcaksın derseniz, ağırlıklı olarak programlama ve grafik tasarımı hakkında yazmayı düşünüyorum ama ilerki zamanlarda çok daha geniş bir içerikle bildiklerimi size anlatmak ve sizden fikirler aldığım bir ortam yapmaya çalışacağım.