“Gerçek keşif yeni diyarlar bulmak değil, yeni gözlerle bakmaktır.”
by Marcel Proust

Tasarım Şablonları (Design Patterns)

Tarih: Ocak 8th, 2012 | Yazar: | Kategoriler: Tasarım Şablonları (Design Patterns) | Etiketler: , , , | 2 Yorum »

Çok uzun süredir(4 şubat 2011’den bu yana) bloguma bir şeyler yazamadım.  Üzerine yazı yazacak konu bulma sıkıntısı ve zaman darlığından dolayı 1 yılı yakın süredir yeni bir yazı giremedim. Bu nedenle Tasarım Şablonları adlı bir yazı dizisi yazmaya karar verdim. Bu yazıyı da, bu yazı dizisine girizgah olarak yazmaya karar verdim.

Herhangi bir kavramın ne ifade ettiğini anlamak için en çok kullandığım teknik, o kavrama verilen isimde geçen kelimelerin anlamlarına bakmak olur benim için. Bu yazımda anlatmaya çalışacağım Tasarım Şablonları(Design Patterns) konusunda da bu teknik ile giriş yapacağım.

TDK’ya göre “Tasarım”;

isim Zihinde canlandırılan biçim, tasavvur

Tasarım kavramına gerçek hayattan basit bir örnek vererek başlayalım. 2 adet bardağı uzay boşluğunda herhangi bir konuma yerleştirsek bu bir tasarım olur.(Sadece 2 adet bardak olmasına rağmen sonsuz sayıda kombinasyon olabilir. Bu yüzden ortaya bir tasarım koymak aslında oluşan tasarımlar arasında herhangi birini seçmekten de geçiyor.) Programlamada düşünürsek eğer, sınıfların iç yapısı, sınıfların konumu, sınıfların ve bileşenlerinin çalışma şekilleri, yine sınıfların ve bileşenlerin birbirleriyle olan ilişkilerinin nasıl olacağı gibi konular birer tasarım konularıdır. Yani “Nasıl?” sorusunun cevabı yapacağımız tasarımdır.

Yine TDK’ya göre “Şablon”;

isim Üzerindeki harf ve şekillerin çevre çizgileri kalem ucu girecek biçimde oyuk olan, bu çizgilerden kalemle istenilen biçim elde edilen, metal veya plastikten cetvel

mecaz Çok kez tekrarlandığından kanıksanmış basmakalıp örnek

 Hala kullanılıyor mu bilmiyorum ama benim ilkokulu okuduğum yıllarda solda bulunan cetvel öğrencilerin olmazsa olmazlarından biriydi.

 

 

Bu şablon cetveli doğuş amacını düşünelim. Daire çizme ihtiyacımız var. Düzgün daire çizmek de haliyle biraz zor. Ve sık sık daire çizmemiz gerekiyor. O zaman şu şekilde diyebiliriz; ihtiyacımız net bir şekilde ifade edebiliyorsak ve çok fazla değişikliğe açık bir ihtiyaç değilse, neden bir kalıp kullanarak ihtiyacımızı karşılamayalım. Bu noktada oluşturduğumuz şablonlar ile sık sık doğan bir ihtiyacımızı kolaylıkla gidermek mümkün.

O zaman tasarım ve şablon kavramlarını birleştirelim. Bir ihtiyacı karşılamak için bir tasarıma ihtiyacımız var. Bu ihtiyaç çok yeni ve bize özel bir ihtiyaç değil. Daha evvelde birileri bu ihtiyaca sahip olmuş ve bu ihtiyacı tasarım geliştirerek gidermişler. Hatta tasarımları o kadar iyi olmuş ki herkes tarafından bilinir ve kullanılır olmuş. Bu tasarımlara genel olarak Tasarım Şablonları adını veriyoruz.

Yukarıda genel olarak gerçek hayattan, yazılıma özel teknik kavramlar yerine, gündelik hayattan örnekler vererek tasarım şablonları konusuna eğilmeye çalıştım. İsterseniz işin biraz da yazılım boyutuna bakalım.

Yazılım geliştirici olarak programlama süreci boyunca geliştirdiğimiz uygulamanın ihtiyaçlarını gidermemiz en büyük görevimizdir. Bu ihtiyaçları giderirken genelde her adıma karşımıza çıkan Nasıl? sorusunu çözmek ile uğraşırız. Çoğunlukla birden fazla alternatif üreterek bu alternatifler arasından en uygununu bulmaya uğraşırız. Bu genelde sancılı ve sıkıntılı bir süreçtir. Çünkü oluşturduğumuz tasarım ilerde doğacak yeni ihtiyaçlara ne kadar karşılayacağını kestirmemiz oldukça zordur. Bu noktada diğer yazılım geliştiricilerin tecrübelerinden faydalanabiliriz. Yani bizim kendi tasarımlarımız yerine, başkalarının geliştirdiği tasarımlar ile sorunumuzu çözebiliriz.

Programcılar tarafından ihtiyaçları karşılamak üzere geliştirilmiş ve tekrar kullanılabilir yapıda olan program parçalarına Tasarım Şablonu denir.

Tasarım Şablonu Kategorileri ve Tasarım Şablonları

  1. Oluşturucu tasarım şablonları (Creational patterns) bunlar; Abstract Factory, Builder, Factory, Prototype, Singleton tasarım şablonları.
  2. Yapısal tasarım şablonları(Structual patterns) bunlar; Adapter, Bridge, Facede, Decorator, Composite, Flyweight, Proxy tasarım şablonları.
  3. Davranışsal tasarım şablonları(Behavioral patterns) bunlar; Command, Memento, Strategy, Iterator, State, Chain of Responsibility, Mediator, Observer, Template Method, Visitor tasarım şablonları.

Yukarıda yazdıklarım dışında birçok tasarım şablonu daha var. Ancak ben genel olarak bilinenleri yazdım.

Tasarım şablonunu kullanmak bize ne sağlar?

  • Tasarım şablonları edinilen tecrübeler doğrultusunda oluştuğu için genellikle bizim o an oluşturduğumuz tasarımlardan daha iyi olacaktır. Gelecekte doğabilecek yeni ihtiyaçlara daha iyi cevap verebilir.
  • Tekerleği yeniden icat etmek yerine, vaktimizi daha belirli ve bize özel ihtiyaçlarda kullanabiliriz.
  • Tekrar kullanılabilir yapıda oldukları için yine vaktimizi daha iyi değerlendirmemize sağlar.
  • Tasarımlar bir programcıya ait olmadığı için diğer programcıların tasarım anlaması çok daha kolay olur.
  • Tasarım şablonlarını bizim dışımızda başka birileri tarafından da kullanıldığı için sürekli birileri tarafından geliştirilir.

Sonuç

Tasarım şablonları ile doğan tasarım ihtiyaçlarımızı gidermemiz mümkün. O zaman genel kabul görmüş tasarım şablonlarını öğrenirsek ihtiyacımız olduğunda bize uygun olan tasarım şablonunu seçerek ihtiyacımızı giderebiliriz. Bu sayede hem vakitten kazanmış oluruz hem de birçok programcı tarafından kullanılan bir tasarımı uygulamış oluruz.

Tasarım şablonları yazı dizisinde kendimce önemli gördüğüm tasarım şablonlarını PHP kullanarak anlatmaya çalışacağım.

Okuduğunuz için teşekkürler. Diğer yazılarda görüşmek üzere…