1 — Tasarım Desenlerinin Doğuşu

Mennan Sevim
Trendyol Tech
Published in
6 min readMay 8, 2020

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.

Factory Method

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.

Abstract

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.

Bulder

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.

Singleton

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.

Prototype

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.

Adapter

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.

Facade

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.

Decorator

Bridge

Bu tasarım deseni, soyutlamayı uygulamadan ayırmanıza olanak tanır.

Bridge

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.

Composite

Proxy

Bu tasarım deseni, istemcinin kullanacağı bir nesneye kontrol ve erişim için referans sağlanması gerektiği durumlarda kullanılır.

Proxy

Flyweight

Bu tasarım deseni, bellek kullanımı ve optimizasyon konusunda ciddi iyileştirmeler sağlar.

Flyweight

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.

Command

Strategy

Bu tasarım deseni, bir işi yapabilecek birden farklı algoritmanız varsa bunlar arasında seçim yapmanıza olanak sağlar.

Strategy

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.

Observer

State

Bir nesnenin durumu değiştiğinde aynı zamanda davranışı da değişirse, state tasarım kalıbı kullanılabilir.

State

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.

Template

Iterator

Bu tasarım deseni, birleştirilmiş nesnenin öğelerine temel temsilini göstermeden sırayla erişmek için bir yol sağlar.

Iterator

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.

Chain of Responsibility
Chain of Responsibility

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.

Mediator

Visitor

Bu tasarım deseni, uygulamadaki sınıflara yeni metotlar eklenmesini düzenleyen bir tasarım desenidir.

Visitor

Buraya kadar okuduğunuz için teşekkürler.

Sonraki bölüm: 2 - Analiz Modeli

--

--