1 — Tasarım Desenlerinin Doğuşu
Selamlar,
Size yazılım mühendisliğinde kavramsal modellerden olan “Analysis Pattern” hakkında 3 makaleden oluşan bir seri ile bilgi vermeye çalışacağım.
Serinin ilk konusu Tasarım Desenlerinin Doğuşu;
Bu yazımda size design pattern nedir ne amaçla ortaya çıkmıştır biraz bunlardan bahsedeceğim.
Yazılım mühendisliğinde tasarım deseni, yazılım tasarımında sık karşılaşılan bir soruna genel tekrarlanabilir bir çözümdür.
Genel tekrarlanabilir kısmına dikkat çekmek istiyorum çünkü ortaya çıkarılan tasarım birçok farklı durumda yaşanılan sorunun nasıl çözüleceğine dair bir açıklama veya şablondur.
Şunu da söylemem gerekir ki tasarım deseni doğrudan koda dönüştürülebilen bitmiş bir tasarım değildir.
Tasarım kalıpları, test edilmiş ve kanıtlanmış geliştirme teknikleri sağlayarak kodlama sürecini hızlandırabilir. Etkili yazılım tasarımı, uygulamanın ilerleyen zamanlarına kadar görünmeyebilecek sorunları dikkate almayı gerektirir.
Tasarım kalıplarının yeniden kullanılması, büyük sorunlara neden olabilecek küçük sorunların önlenmesine yardımcı olur ve kalıplara aşina olan kodlayıcılar ve mimarlar için kod okunabilirliğini artırır.
Doğuşu
Desenler 1966 gibi erken bir dönemde Christopher Alexander tarafından mimari bir konsept olarak ortaya çıkmıştır. (c.f. “The Pattern of Streets,” JOURNAL OF THE AIP, September, 1966, Vol. 32, №3, pp. 273–278).
1987'de Kent Beck ve Ward Cunningham, programlamaya özellikle de desen dillerine desen uygulama fikri üzerinde deney yapmaya başladılar ve sonuçlarını o yıl ki OOPSLA konferansında sundular.
İlerleyen yıllarda Beck, Cunningham ve diğerleri bu işi takip etti.
Çoğu zaman, insanlar sadece belirli yazılım tasarım tekniklerinin belirli sorunlara nasıl uygulanacağını anlarlar. Bu tekniklerin çok çeşitli sorunlara uygulanması zordur. Tasarım modelleri, belirli bir soruna bağlı özellikler gerektirmeyen bir biçimde belgelenmiş genel çözümler sunar.
Buna ek olarak, kalıplar geliştiricilerin yazılım etkileşimleri için iyi bilinen, iyi anlaşılan isimler kullanarak iletişim kurmalarını sağlar.
Yaygın tasarım desenleri zaman içinde geliştirilebilir ve bu da onları geçici tasarımlardan daha sağlam hale getirir.
Yazılım ile mimari tasarım arasında benzerlikler vardır;
Her ikisi de, olası tüm tasarımları içeren geniş bir tasarım alanında ortaya çıkan yaratıcı süreçlerdir.
Ortaya çıkan tasarım müşterinin ihtiyaçlarını karşılamalıdır.
Ortaya çıkan tasarım mühendis için uygun olmalıdır.
Tasarımcılar, birçok rakip zorluğa çözüm getirmeli ve gereksinimi karşılamalıdır.
Genel Yapısı
Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides tarafından yazılan “Design Patterns: Elements of Reusable Object-Oriented Software” kitabına göre tasarım desenleri Creational, Structural ve Behavioral olarak 3 sınıfa ayrılır.
Elbette çok fazla tasarım deseni ortaya çıkmıştır fakat bunlardan bazıları diğerlerine göre daha efektif kullanılır.
En sık kullanılan tasarım desenlerinden bahsedelim ve kısaca açıklayalım;
1- Creational Patterns (Yaratımsal)
Yaratıcı modeller, gerekli ölçütlere uygun ve kontrollü bir şekilde nesneler oluşturma imkanı sağlar.
Factory Method
Bu tasarım deseni, nesne yaratımını kalıtım yoluyla alt sınıflara bırakarak, client tarafında nesne yaratımını engeller.
Abstact Factory
Bu tasarım deseni, ortak bir teması olan bir grup bireysel fabrikayı somut sınıflarını belirtmeden encapsulate etmek için bir yol sağlar.
Builder
Bu tasarım deseni, karmaşık bir nesnenin yapımını temsilinden ayırır, böylece programın ihtiyaçlarına bağlı olarak birkaç farklı temsil oluşturulabilir.
Singleton
Bu tasarım deseni, bir sınıf tipinden sadece tek bir nesnenin yaratılmasına izin veren bir yazılım tasarım desenidir.
Prototype
Bu tasarım deseni, genellikle sınıfın bir örneğine (prototip) sahip olduğumuzda kullanılır ve sadece prototipi kopyalayarak yeni nesneler oluşturmak isteriz.
2- Structural Patterns (Yapısal)
Yapısal kalıplar, daha büyük yapılar oluşturmak ve yeni işlevsellik sağlamak için farklı sınıfları ve nesneleri organize etmekle ilgilidir.
Adapter
Bu tasarım deseni, mevcut bir sınıfın arayüzünün başka bir arayüz olarak kullanılmasına izin veren bir yazılım tasarım modelidir.
Facade Method
Bu tasarım deseni, tek bir sınıfın tüm bir alt sistemi temsil etmesini sağlamak için kullanılır, karmaşık alt sınıfları maskeler.
Decorator
Bu tasarım deseni, aynı sınıftaki nesnelerin davranışını etkilemeden, tek bir nesneye davranışın dinamik olarak eklenmesine izin veren bir tasarım modelidir.
Bridge
Bu tasarım deseni, soyutlamayı uygulamadan ayırmanıza olanak tanır.
Composite
Bu tasarım deseni, nesneleri ağaç yapılarına dönüştürmenize ve daha sonra bu yapılarla tek tek nesneler gibi çalışmanıza izin veren yapısal bir tasarım modelidir.
Proxy
Bu tasarım deseni, istemcinin kullanacağı bir nesneye kontrol ve erişim için referans sağlanması gerektiği durumlarda kullanılır.
Flyweight
Bu tasarım deseni, bellek kullanımı ve optimizasyon konusunda ciddi iyileştirmeler sağlar.
3- Behavioral Patterns (Davranışsal)
Son olarak, davranışsal kalıplar nesneler arasındaki ortak iletişim kalıplarını tanımlamak ve bu kalıpları gerçekleştirmekle ilgilidir.
Command
Bu tasarım deseni, yazılım komutlarının yürütülmesini temsil etmek için basit nesneler kullanır ve günlüğe kaydetme ve geri alınamayan komutları desteklemenizi sağlar.
Strategy
Bu tasarım deseni, bir işi yapabilecek birden farklı algoritmanız varsa bunlar arasında seçim yapmanıza olanak sağlar.
Observer
Bu tasarım deseni, nesneler arasında bire çok bağımlılık tanımlar, böylece bir nesne durumu değiştiğinde tüm bağımlıları bildirilmesini ve otomatik olarak güncellemesini sağlar.
State
Bir nesnenin durumu değiştiğinde aynı zamanda davranışı da değişirse, state tasarım kalıbı kullanılabilir.
Template
Bu tasarım deseni, bir işlem için gerekli adımları soyut olarak tanımlar ve bir şablon metot ile algoritmanın nasıl çalışacağını belirler.
Iterator
Bu tasarım deseni, birleştirilmiş nesnenin öğelerine temel temsilini göstermeden sırayla erişmek için bir yol sağlar.
Chain of Responsibility
Bu tasarım deseni, istek tanınana kadar zincirdeki bir isteği bir nesneden diğerine geçirerek nesneler arasında ayrıştırmaya izin verir.
Mediator
Bu tasarım deseni, tüm nesnelerin birbirlerini bilmelerini önlemek için ayrı bir nesne kullanarak nesneler arasındaki iletişimin nasıl basitleştirilebileceğini tanımlar.
Visitor
Bu tasarım deseni, uygulamadaki sınıflara yeni metotlar eklenmesini düzenleyen bir tasarım desenidir.
Buraya kadar okuduğunuz için teşekkürler.
Sonraki bölüm: “ 2 - Analiz Modeli ”
Referans ve Kaynaklar: