Software Design Patterns (Yazılım Tasarım Şablonları)

Herkese merhabalar. Yazılım dünyasında sıkça bahsedilen ve önemli olan yazılım tasarım şablonları ile ilgili yazı dizisi yazmaya karar verdim.

Yazılım tasarımı sırasında sıkça karşılaşılan problemlere çözüm için tasarlanmış yazılım şablonlarına denir. Birçok farklı durum için o problemi çözmek için tasarlanmış kalıplardır. Bu tanımlamalar kullanılarak yazılım tasarımı yapılmaktadır. Yazılımcıların sistem veya uygulama geliştirirken kabul ettiği en iyi tasarım alıştırmalarından oluşmaktadır.

Tasarım şablonları programlama dillerinden bağımsız olarak tanımlanmışlardır. Ancak nesne tabanlı dillerine uygun tasarım şablonları daha fazla yaygınlaşmıştır. Bu şablonlar nesneler ve sınıflar arasındaki ilişkileri ve etkileşimleri göstermektedir. Yazılımı yapacak olan kişi elinde olan soruna göre bu şablonları özelleştirerek kullanacaktır.

Test edilebilir ve kanıtlanmış bu yapıları kullanarak yazılım geliştirme sürecini hızlandırmaktayız. Kaliteli yazılım tasarımı yapmak için projeyi hayata geçirdikten sonra çıkacak problemleri yazılım geliştirme esnasında çözmeliyiz. Tekrar kullanılabilir tasarım şablonları ile oluşacak büyük sorunların önüne geçebiliriz.

Tasarım şablonları yazılım dünyasında,  (Design Patterns: Elements of Reusable Object-Oriented Software) adlı 1994 yılında yazılmış kitap sayesinde adından söz edilir hale gelmiştir. Kitabı yazan 4 yazar Gang of Four olarak adlandırılır.

Bu kitaba göre tasarım şablonları 3 gruba ayrılır;

  • Creational Patterns ( Yaratımsal Şablonlar )
  • Structural Patterns ( Yapısal Şablonlar )
  • Behavioral Patterns ( Davranışsal Şablonlar )

ooppatterns

Yukarıda gösterilen resimde her belirtilen tasarım şablonu grubunda kullanılan yaklaşımlar gösterilmektedir.

Creational Patterns ( Yaratımsal Şablonlar ):

Yazılım nesnelerinin nasıl yaratılacağı hakkında genel öneriler sunmaktadır. Mevcut duruma uyarlanarak nesne yaratma problemleri ile mücadele etmektedir. Düzensiz oluşturulan nesneler tasarım problemlerine yol açabilir. Nesne yaratımını kontrol ederek karmaşıklıkları önleme amacındadır. Uygulamaya nesne oluştururken esneklik katmaktadır. Asıl amacı, iyi bir yazılımın içinde barındırdığı nesnelerin nasıl yaratıldığından bağımsız tasarlanması gerekliliğidir.

Modern yazılım geliştirmede nesnelerin birbirleri arasında oluşan ilişki önemlidir. Herhangi bir şablon olmadan oluşturulan büyük yazılım modelleri, yeni bir özellik eklenmek istediği zaman veya eklenecek yeni bir özellik olduğunda işlemi zorlaştıracaktır. Ayrıca yeniden kullanılabilirik imkanı azalacaktır.

Ne zaman sisteme eklememiz düşünülebilir?

  • Sistemin nesne yaratımlarından bağımsız olması gerektiğinde
  • Birbiri ile bağı olan nesneleri kullanacağımız zaman
  • Nesneleri nasıl oluşturduğumuzu gizlemek istediğimiz zaman ve sadece oluştukları interfaceleri göstermek istediğimizde.
  • Sınıfların örneklemelerinin çalışma zamanında tanımlanması
  • Temelde tek bir sınıf instantination varsa ve kullanıcı sürekli bu örneklemeye erişmek isterse

Aşağıda gösterilen sınıf diyagram birçok yaratımsal tasarım şablonunda ortaktır.

Creator = Nesne arayüzünü tanımlar ve nesne döndürür.

ConcreteCreator = Nesne arayüzünü implement etmektedir.

Creational_Pattern_Simple_Structure

Structural Patterns ( Yapısal Şablonlar )

Yapısal tasarım şablonları ile dizaynı kolaylaştırarak sınıflar arasındaki iletişimi düzene sokmak için kullanılırlar. Sınıflar ve nesnelerin büyük yapıları nasıl oluşturacağı tanımlanır.

Behavioral Patterns ( Davranışsal Şablonlar )

Nesnelerin davranışları ve birbirleri ile olan ilişkileri ile ilgilenir. Davranışsal şablonları kullanılarak nesnelerin birbileri ile olan iletişimin esnekliği artmaktadır.

Tasarım şablonlarını tanıtarak giriş yapmış olduk. Sonraki yazılarımda Yaratımsal şablonlardan başlayarak, her grupta bulunan yaklaşımları örnekler ile anlatmaya çalışacağım.

Yararlandığım kaynaklar:

Software design pattern

Design Patterns: Elements of Reusable Object-Oriented Software

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s