Yazılım Tasarım Kalıpları
Yazılım tasarım kalıpları, yaygın olarak tekrar eden tasarım problemlerine yönelik adlandırılmış, yeniden kullanılabilir çözümlerdir; uzman uygulamalarını sistemler arası iletişim kurulabilir, öğretilebilir ve uygulanabilir bir biçimde yakalamaktadır.
Tanım
Bir tasarım kalıbı, belirli bir bağlamda tekrar eden bir tasarım problemine yönelik genel, yeniden kullanılabilir bir çözüm tanımıdır; katılan öğeler, ilişkileri ve çözümün gerektirdiği ödünleşimler açısından ifade edilmektedir.
Kapsam
Bu konu, nesne yönelimli tasarımın klasik yaratımsal, yapısal ve davranışsal kalıplarını; bir kalıbın yapısını (adı, problemi, çözümü, sonuçları); kalıp kataloglarını ve kalıp dillerini; kurumsal ve eşzamanlılık kalıplarını; ayrıca aşırı mühendislik riskini de içeren kalıpların uygun ve uygunsuz kullanımını kapsamaktadır.
Temel sorular
- Standart kalıplar hangi tekrar eden tasarım problemlerini ele almaktadır?
- Yaratımsal, yapısal ve davranışsal kalıplar nasıl ayırt edilmektedir?
- Bir kalıp, problemini, çözümünü ve sonuçlarını nasıl belgelemektedir?
- Bir kalıbı uygulamak ne zaman yardımcı olmakta, ne zaman gereksiz karmaşıklık eklemektedir?
Temel kuramlar
- Yaratımsal, yapısal ve davranışsal kalıplar
- Gang of Four kataloğu kalıpları amaca göre düzenlemektedir — yaratımsal kalıplar nesne örneklemesini soyutlamakta, yapısal kalıplar nesneleri daha büyük yapılar halinde birleştirmekte ve davranışsal kalıplar sorumlulukları atayıp iletişimi yönetmektedir.
- Yakalanmış tasarım deneyimi olarak kalıplar
- Kalıplar uzman çözümlerini kodlamakta ve ortak bir kelime dağarcığı sağlayarak tasarım söyleminin seviyesini yükseltmektedir; bir kalıp dili, bir problemi çözmenin bir sonrakine yol açmasını sağlayacak şekilde kalıpları ilişkilendirerek genel tasarımı yönlendirmektedir.
Klinik önem
Kalıplar, kanıtlanmış yapıları yeniden kullanarak ve ekiplere ortak bir kelime dağarcığı sağlayarak iletişimi ve tasarım kalitesini artırmaktadır; ancak yargısızca uygulandığında dolaylılık ve karmaşıklık getirebilmektedir, bu nedenle değerleri kalıbın gerçek problemle eşleşmesine bağlıdır.
Tarihçe
Christopher Alexander'ın mimari kalıp dillerinden esinlenerek, yazılım topluluğu tasarım kalıplarını 1994 Gang of Four kataloğu ile resmileştirmiştir; sonraki çalışmalar kalıpları mimariye, eşzamanlılığa ve kurumsal uygulamalara genişleterek, kalıpları tasarım eğitiminin temel bir unsuru haline getirmiştir.
Tartışmalar
- Kalıplar bilgelik olarak mı yoksa dil eksikliğinin bir belirtisi olarak mı?
- Bazıları belirli kalıplara duyulan ihtiyacın eksik dil özelliklerini ortaya koyduğunu ve kalıpların aşırı kullanımının aşırı mühendisliğe yol açtığını savunmaktadır; diğerleri ise kalıpları herhangi bir dilden bağımsız, kalıcı bir tasarım kelime dağarcığı olarak görmektedir.
Öne çıkan isimler
- Erich Gamma
- Richard Helm
- Ralph Johnson
- John Vlissides
- Martin Fowler
İlgili konular
Temel eserler
- gamma1994
- buschmann1996
- fowler2002
Sıkça sorulan sorular
- Tasarım kalıpları belirli bir programlama diline bağlı mıdır?
- Klasik kalıplar nesne yönelimli terimlerle açıklanmakta ve belirli dillerde örneklenmektedir, ancak kavramlar dilden bağımsızdır; bir kalıbın nasıl gerçekleştirildiği değişmekte ve bazı kalıplar birinci sınıf fonksiyonlara veya diğer özelliklere sahip dillerde önemsiz veya gereksiz hale gelebilmektedir.
- Tasarım kalıplarını aşırı kullanmak zararlı olabilir mi?
- Evet. Daha basit bir çözümün yeterli olduğu yerlerde kalıpları zorlamak dolaylılık ve bilişsel yük eklemektedir; kalıplar varsayılan bir stil olarak değil, tasarımda gerçek bir tekrar eden problemi çözdükleri için uygulanmalıdır.