15 Temmuz 2010 Perşembe

Tasarım Kalıpları

Aynı problemler sürekli bir yazılımcının karşısına farklı farklı zamanlarda çıkmaktadır ve bu sorunlara aynı çözümler üretilebilmektedir. Bu noktada tasarım kalıplarına ihtiyaç duyulmaya başlanmıştır çünkü tasarım kalıpları hem aynı problemi tekrar tekrar çözmemizin önüne geçer hem de bir sorun için üretilebilinecek en optimal çözümü kullanmamızı sağlar. Bu ayrıca programımızda hata çıkma olasılığını da azaltır ve daha güçlü bir kod yazmamızı sağlar. Bu ayrıca yazılımın en önemli prensiplerinden biri olan yeniden kullanılabilirlilik kavramını da destekler.

Tasarım Kalıpları’nın Dünyadaki Genel Tanımlanma Biçimi
İsim: Her kalıbın genel olarak tek bir adı vardır ve bu ad başka bir kalıpta kullanılamaz
Amaç: Kalıbın amacı
Problem: Kalıbın çözdüğü problem
Çözüm: Kalıp probleme nasıl bir çözüm yaklaşımı getirmektedir?
Birimler: Kalıpta kullanılan birimler.(UML gösterimi ile birlikte)
Gerçekleştirim: Kalıbın kodları

Genel olarak  tasarım kalıpları programlama dillerinden bağımsız olarak tanımlansalar da, nesneye yönelimli programlama dillerine uygun tasarım kalıpları daha çok bilinir. Bu kalıplar, nesneler ve sınıflar arasındaki ilişkileri ve etkilişimleri gösterirler. Programcı bir tasarım kalıbını elindeki soruna bakarak özelleştirip kullanabilir.


Bu kalıpları uygulayabilmek için kulanılması gereken prensipler

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:

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

Yaratılış Kalıpları

Abstract Factory
Builder
Factory Method
Prototype



 

Hiç yorum yok:

Yorum Gönder