Developersland

Teknoloji ve Yazılım Blogu

  • Yazıtipi boyutunu arttır
  • Varsayılan yazıtipi boyutu
  • Yazıtipi boyutunu azaltır
OOP

Tasarım Şablonları - PHP

Tasarım ŞablonlarıTasarım şablonları yazılım mühendisliğinde sık sık karşılaşılan genel sorunları çözmeye yönelik oluşturulmuş genel çözümler olarak tanımlanabilir. Burada genel amaç her seferinde tekerliği baştan icat etmek yerine, daha önce aynı sorunla karşılaşmış insanların çözümlerini ele alarak daha hızlı ve daha sağlam şekilde sorunları çözmektir. Tasarım şablonlarının programlamaya uyarlanması fikri ilk kez 1987 yılında  Kent Beck ve Ward Cunningham tarafından OOPSLA (Object-Oriented Programming, Systems, Languages & Applications) konferansında ileri sürülmüştür. Tasarım şablonları "Design Patterns Elements of Reusable Object-Oriented Software" isimli kitabın yayınlanması ile bilgisayar bilimlerinde popüler olmaya başlamıştır. Bu kitap tasarım şablonları ile ilgili bir ansiklopedi niteliğindedir.

Tasarım şablonları sorunlara güvenilir çözümler sunmasının yanında kod okunurluluğu açısından da önemli avantaj sağlamaktadır. Kodu okuyan yazılımcı uygulanan tasarım şablonu ile ilgili bilgiye sahipse kodu anlaması çok daha kolay ve hızlı olacaktır. Birçok programlama dili nesne yönelimli programlama tekniğini benzer şekilde desteklese de programlama dilleri arasında bazı farklılıklar bulunmaktadır. Bu nedenle tasarım şablonları da dilden dilek değişiklikler gösterebilmektedir. Ben yazımızın başlığına uygun olarak PHP diline özel örnekleri inceleyeceğim. Şurada gerçekten güzel ve açıklayıcı php örnekleri bulabilirsiniz. Ayrıca IBM tarafından verilen örnekleri de gayet açıklayıcı ve faydalı buldum. Şimdi tek tek tasarım şablonlarını inceleyelim. Yeni tasarım şablonlarını öğrendikçe buraya eklemeye çalışacağım.

 

Interface ve Abstract Sınıflar Arasındaki Farklar

  • Interfaceler çoklu kalıtımı sağlamaya yardımcı abstract classlar ise çoklu kalıtımı desteklemez.
  • Interfacelerde metodların içerisini dolduramayız ama abstract classlarda doldurabiliriz Böylece bütün alt sınıfların belli bir özelliğe sahip olmasını sağlayabiliriz.
  • Interface ile yapabildiğimiz herşeyi hatta daha fazlasını abstract classlar ile de yapabiliriz.
  • Eğer türeteceğimiz classlarda belli başlı varsayılan özellikleri tekrar tekrar kopyala-yapıştır yapmak istemiyorsak o zaman abstract class kullanmamız gerekir. Çünkü abstract classlarla bir metodu tüm alt classlarda varsayılan metod şeklinde tanımlayabiliriz ve alt classlarda bunları tekrar yazmamıza gerek kalmaz kalıtımla aktarılmış olur.
 

Interface ve Abstract Class

interface abstractHead First Java (Second Edition) kitabında gerçekten çok güzel örnek verilmiş interface ve abstract arasındaki farkı anlamak için. Elimizde kedi, köpek, aslan, kaplan, suaygırı, kurt gibi hayvanlar var ve bunları belli bir hiyerarşiye göre dizmemiz gerekiyor daha sonra polimorfizm gibi yöntemlerden rahatça faydalanabilmemiz için. Öncelikle bütün bu elimizdeki canlıların hayvan olduğu bilindiğinden ve hepsinin yemek, uyumak, acıkmak gibi hayvanlara özgü ortak özellikleri bulunduğundan öncelikle Hayvan adında abstract bir sınıf oluşturuyoruz. Daha sonra kedi, kaplan ve aslan gibi hayvanlarda ortak özelliklere sahip olduklarından dolayı Kedigiller adında abstract bir sınıf oluşturuyoruz ve kedi, kaplan ve aslanı bu abstract sınıftan extend ediyoruz. Aynı şekilde köpek ve kurt da birçok ortak özelliğe sahip olduğundan bu hayvanların ortak özelliklerini barındıran canine(köpek ve benzeri hayvanlar) adında abstract bir sınıf oluşturuyoruz. Kurt ve köpeği canine sınıfından extend ettikden sonra suaygırını da direk hayvan adlı abstract sınıftan extend ediyoruz.