Tasarım Kalıpları e-book

Tasarım kalıpları, nesneye yönelik programlamada sık karşılaşılan bazı problemlerin çözümüne yönelik olarak ortaya atılmış yöntemlerdir.

Tasarım Kalıpları

1990ların başında 4 javacı elemanın ("Gangs of Four" adıyla anılan Gamma, Helm, Johnson, Vlissides) geliştirdiği tasarım kalıpları (design patterns) temelde, karşımıza tekrar tekrar çıkan problemler için ortak bir çözüm sağlar.

Örneğin; bir classtan sadece ve sadece bir nesne türetmek istersek ne yapmalıyız gibi bir sorun ile karşılaşırsanız yapmanız gereken Singleton kalıbını kullanmaktır.

Bu kalıpları uygulayabilmek için bazı prensipler edinmemiz gerekir:

Açık Kapalı Prensibi (Open Closed Principle)

Yazılmış bir modülün genişlemeye açık ama değişikliğe kapalı olması gerekliliğini vurgular. Yani yazılan kod üzerine bir eklenti yapılmak istendiğinde önceden yazılmış kodlarda değişiklik gerekliliği olmamalıdır. Gerekli eklentiler sadece eklenti için gereken yeni özelliğin kodlanması ile sonuçlanmalıdır.

Liskov Ayrışabilme Prensibi (Liskov Substitution Principle)

"Türemiş sınıflar, türedikleri temel sınıfların yerini herhangi bir problem çıkmadan alabilmelidir." prensibidir. Yani temel sınıftan yaratılmış bir nesneyi kullanan bir fonksiyon, temel sınıf yerine bu temel sınıftan türemiş bir sınıftan yaratılmış bir nesneyi de aynı yerde kullanabilmelidir.

Bağımlılığın Azaltılması Prensibi (Dependency Inversion Principle)

Kullanıcı ile sınıflar arasındaki ilişkinin olabildiğince soyutlanmış yapılar üzerinden yapılmasını önerir. Yani tasarımda ilişkilerin gerçek sınıflardan türemiş nesneler ile değil, ilgili arayüzler(interface) ve soyut sınıflar kullanılarak gerçeklenmesi gerekir.

Tek Sorumluluk Prensibi (Single Responsibility Principle)

"Bir sınıf sadece tek bir sorumluluğu yerine getirmelidir ve yerine getirdiği sorumluluğu iyi yapmalıdır." prensibidir. Her sınıf sadece kendisi ile ilgili tek bir sorumluluğu yerine getirir. Her sınıfın sorumluluğu farklı olduğu zaman, değişmesi için tek bir sebep olur,o da ihtiyaçların değişmesidir. Sınıfların birden fazla sorumluluğunun olması bağımlılığın artmasına neden olur.

Arayüz Ayırma Prensibi (Interface Segregation Principle)

Kullanılacak methodların ve özelliklerin gruplandırılarak her biri ayrı işlevi tanımlayan farklı arayüzlere bölünmesini savunur. Sonuç olarak, bir sınıfın kullanmadığı method ve özellikler programın içeriğine alınmamış olur.


Tasarım kalıplarını inceleyecek olursak temelde 3 ana gruba ayırabiliriz:

Yaratılış Kalıpları (Creational Patterns): Nesnelerin nasıl yaratılacağı hakkında alternatifler sunar. Farklı durumlarda yaratılması gereken nesnelere karar verir.

Yapısal Kalıplar (Structural Patterns): Nesneleri ve sınıfları birleştirerek karmaşık kullanıcı arayüzleri gibi daha geniş yapılar oluşturur.

Davranışsal Kalıplar (Behavioral Patterns): Nesne grupları arasındaki iletişimin tanımlanmasında kullanılır ve daha karmaşık programlarda akış kontrolünü sağlar. Nesnelere işlevsel sorumluluklarını atar.


Tasarım kalıplarının listesi:

Yaratılış Kalıpları

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype

Davranışsal Kalıplar 

  • Chain of responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template method
  • Visitor

Yapısal Kalıplar

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy

Tasarım kalıpları ile ilgili temel başvuru kaynağı O'Reilly'nin "Head First Design Patterns" adlı kitabıdır.

Süper örneklerle donatılmış ve eğlenceli bir yapıya sahip olan kitabı aşağıdaki adresten indirebilirsiniz:

http://rapidshare.com/files/167643917/Head_First_Design_Patterns.rar

head first design patterns