Yazılım Tasarım Deseni (Software Design Pattern) Nedir?

Bir önceki yazımda bilgisayar programlama ve yazılım tasarımı alanlarında kullanılan refactoring kavramının üzerinde durduktan sonra refactoring.guru web sayfasının ne olduğuna değinmiştim. Aynı zamanda design pattern kavramını yüzeysel olarak ele alıp sonraki yazılarımda bu konuyu kapsamlı şekilde ele alacağımı belirtmiştim. Bugün yazılımcıların ortak konuşma dili olarak tabir edebileceğimiz yazılım tasarım desenlerinin (design patterns) neler olduğunu, ne işe yaradığını, tarihi geçmişini ve tasarım modellerinin nasıl sınıflandırıldığını öğreneceğiz.

İlerleyen yazılarımda her yazılım tasarım desenini ayrı ayrı ele alabilirim. Takipte kalın. 

Yazılım Tasarım Deseni (Software Design Pattern) Nedir?

Yazılım tasarım deseni, Software design pattern, yazılım tasarlarken karşılaşılan benzer ve ortak problemlere karşı geliştirilmiş olan tipik çözümlere denir. Design patterns tasarım desenleri, tasarım modelleri ve tasarım kalıpları olarak da bilinir.

Tasarım desenleri yazılım tasarımında geliştiriciler arasındaki iletişimi kolaylaştırmak, düzgün, anlaşılabilir ve tekrardan kullanılabilir kodlar yazmak, karşılaşılan sorunlara karşı ortak çözümler geliştirmek ve benzeri amaçlarla yıllar öncesinden kalıplaştırılmıştır.

Tasarım Deseni Bileşenleri

Tasarım desenleri yazılımda karşılaşılan sorunlara karşı tipik çözümleri birkaç bileşen dahilinde gözler önüne serer.

  1. Intent: Bir tasarım kalıbının ne olduğunu, neyi amaçladığını ve hangi sorunları çözeceğini özetler.
  2. Motivation: Karşılaşılan problemin ne olduğunu detaylıca ifade ederken bu soruna karşı nasıl çözüm üretilebileceği üzerinde de durur. Genellikle gerçek hayattan örnekler kullanılarak sorunun ve çözümün anlaşılması burada sağlanır.
  3. Structure: Sınıfların, classes, yapısını, birbirleriyle olan ilişkisini ele alır. Önceki adımda anlamlandırılan soruna karşı uygulanabilecek çözümler sınıflara aktarılarak kalıplaştırılır. Her bir bileşenin üzerinde durulur.
  4. Code example: Yapısal olarak tamamlanan tasarım deseni, popüler herhangi bir programlama dilinde örnek olarak gösterilir. Bu kod örneği tasarım kalıbının ne işe yaradığını anlaşılmasını kolaylaştırır.

Tasarım Desenlerinin Tarihçesi

Tasarım desenleri için herhangi biri tarafından icat edilmiştir dememiz doğru olmayacaktır. Tasarım desenleri yazılım geliştirilirken karşılaşılan belirli problemlerin çokça tekrarlanması nedeniyle modellenmiştir.

Yazılımda desen kavramı ilk kez Christopher Alexander, Sara Ishikawa ve Murray Silverstein tarafından 1977 yılında yayınlanan A Pattern Language: Towns, Buildings, Construction. isimli bir kitapta açıklanmıştır. [1] Kitapta bir yazılım dili kentsel çevreyi tanımlarken bu çevredeki birimleri de tasarım desenleri olarak betimlemektedir. [2]

Ayrıca 1994 tarihinde yayınlanan Tasarım Desenleri: Yeniden Kullanılabilir Nesneye Yönelik Yazılımın Unsurları (Design Patterns: Elements of Reusable Object-Oriented Software) isimli bir kitapta Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides isimli 4 yazar yazılım tasarım desenlerini derleyip paylaşmışlardır. İki bölümden oluşan kitabın ilk bölümünde nesneye yönelik programlamanın kapasitesi ve eksikliği üzerinde durulurken ikinci bölümde klasikleşmiş 23 yazılım tasarım deseni ele alınmıştır. Kitap yıllar içerisinde çok satanlar listesine girmiş ve oldukça popülerleşmiştir.

Tasarım Kalıpları Ne İşe Yarar? İşlevleri Nelerdir?

Yazılım tasarım kalıpları şu işlevlere sahiptir:

  1. Tasarım kalıpları kullanan yazılımcılar ortak bir şekilde anlaşabilirler. Örneğin bir projede karşılaşılan sorun ya da sorunlara karşı iki takım arkadaşı kendi aralarında tasarım kalıplarını tartışabilir, çözümü projeye uygulayabilirler. Kökleşmiş tasarım desenlerine bağlı kalarak ilerlemek sonrasında projeyi devralacak deneyimli yazılımcıların da işini oldukça kolaylaştıracaktır.
  2. Klasik tasarım desenleri pek çok yazılım geliştiricisinin karşılaştığı sorunlara karşı denenmiş ve uygulanmış en iyi çözümleri barındırdığından projeye bağımsız olarak uygulanacak herhangi bir çözümden çoğunlukla daha iyi sonuç verir.
  3. Tasarım modelleri sorunlar için belirli bir mimari sunar. Bu da tasarım desenini kavrayan bir yazılımcının o tasarım modelini herhangi bir yazılım dilinde geliştirdiği projesine kolaylıkla entegre edebileceği anlamına gelir.

Tasarım Desenleri ve Sınıfları

Tasarım desenleri ne tür problemleri çözebileceklerine göre üç alt sınıfa ayrılmaktadır:

  1. Creational design patterns:
  2. Behavioral design patterns:
  3. Structural design patterns:

Creational Design Patterns Nedir?

Creational design patterns, nesneye yönelik programlamada bir nesnenin oluşturulmasından yok edilmesine kadarki süreçte bir nesnenin uygun olarak nasıl oluşturulabileceğiyle ilgilenen tasarım desenlerinin bir alt sınıfıdır.

Creational design patterns sınıfındaki tasarım desenleri sırasıyla şunlardır:

  1. Abstract Factory
  2. Builder
  3. Factory Method
  4. Prototype
  5. Singleton

Behavioral Design Patterns Nedir?

Behavioral design patterns, nesneler arasındaki ortak iletişim kalıplarıyla ve algoritmalarla ilgilenen tasarım desenlerinin bir alt sınıfıdır.

Behavioral design patterns sınıfındaki tasarım desenleriyse sırasıyla şunlardır:

  1. Chain of Responsibility
  2. Command
  3. Iterator
  4. Mediator
  5. Memento
  6. Observer
  7. State
  8. Strategy
  9. Template Method
  10. Visitor

Structural Design Patterns Nedir?

Sturcutral design patterns, sınıfların ve nesnelerin birleştirmeyle ve ilişkilendirilmesiyle büyüyen yapıları esnek ve verimli tutmaya çalışan, nesne ve sınıf gibi varlıklar arasındaki ilişkilerin kolaylıkla anlaşılmasını sağlayan tasarım desenlerinin bir diğer alt sınıfıdır.

Structural design patterns sınıfındaki tasarım desenleriyse sırasıyla şunlardır:

  1. Adapter
  2. Bridge
  3. Composite
  4. Decorator
  5. Facade
  6. Flyweight
  7. Proxy

Bugün yazılım tasarım deseni nedir, ne işe yarar ve nasıl işlevlere sahiptir gibi sorulara cevap verirken diğer yandan tasarım kalıplarının alt sınıflarının neler olduğunu da ayrı ayrı örnekler vererek inceledik. Bu bağlamda creational design patterns, structural design patterns ve behavioral design patterns sınıflarını öğrendikten sonra bu gruplardaki tasarım desenlerini de listeledik. Detaylarına ilerleyen yazılarımda girmeyi planlıyorum. Umarım yazım sizler için faydalı olmuştur. Yeni yazılarımda görüşmek üzere.

Yorumlar

Lütfen bu alanı doldurun.
Lütfen bu alanı doldurun. Lütfen geçerli bir e-posta adresi giriniz.
Lütfen bu alanı doldurun.

Yorumlar

İlk yorumu paylaşan siz olun.