|
Tasarım Kalıpları - 1 |
|
Gönderiliyor lütfen bekleyin... |
|
|
Tasarım kalıpları.. Yazılım sistemlerinin gizli kalmış kahramanları..
"Program yazmak", benim tercih ettiğim tabiriyle "yazılım geliştirmek", günümzdeki en karmaşık işlerden birisidir. Genelde bir sürü matematik sorusu çözmeye benzeyen bu süreç, çoğumuzun yakından ilgili olduğu bir iştir.
Yazılım geliştirme sırasında, herkesin en çok yaptığı iş, önümüze çıkan problemlere karşı çözümler getirmektir. Fakat bu iş bu kadar basit midir? Önerilen çözümün iyi bir çözüm olup olmadığını nasıl anlayabiliriz? Çözüm çok karmaşık bir sistem yaratmamalıdır, ileriye dönük geliştirmelerde bizlere kolaylık sağlamalıdır, esnek olmalıdır, parçalarının kolay değiştirilir olması gerekir... gibi bir çok kriter bu soruya cevap olarak verilebilir.
Nesneye yönelik programlamada, genelikle aynı tarz problemler karşımıza çıkar ve "Ben bunu daha önce çözmemiş miydim?" gibi bir soru aklınıza gelir. Çünkü genelde karşılaşılan sorunlar, "Bu sistemdeki raporlama bölümüne word belgesinin yanına bir de excel raporları ekleyemez miyiz?" ya da "Sistemin X parçası artık çok eski kaldı, bu parçayı yeni bir teknoloji kullandığımız Y parçası ile değiştirmek istiyoruz, ne dersin?" gibi sorunlardır. Klasik bir nesneye yönelik yaklaşımla, dikkatli inceledğimizde aslında bu tarz "değişikliklerin" daha önce başka sistemlerde de yapıldığını görebiliriz. Bu durumda, niye önceki deneyimlerimizden yararlanıp işimizi kolaylaştırmıyoruz?
Yukarıda yazdığım soruyu, yazılımcılar kendilerine yıllardır sormuşlardır. Cevap, bizi tasarım kalıplarına "design patterns" getirmektedir. Peki nedir bu tasarım kalıpları?
Tasarım kalıpları, nesneye yönelik programlamanın en çok üzerinde durduğu iki kavram üzerine kurulmuştur: Tekrar kullanılabilirlik ve ortak bir terminoloji. Genel olarak, karşımıza tekrar ve tekrar çıkan problemler için ortak bir çözüm sağlayan ve problemin temeline bir çözüm sağlayan yöntemlere tasarım kalıpları denir.
Örneğin "kapı"ları düşünün. Kapıların amaçları bellidir. Hepsi aynı işlevi sağlamaktadır. Fakat görünümleri, yapıldıkları maddeleri, renkleri, kilitleri,... Hemen hemen herşeyi farklı olmasına rağmen yaptıkları iş aynıdır. Bize sundukları çözüm aynıdır. İşte tasarım kalıpları da aynı bunun gibidir. Bize yazılım konusunda ortak bir çözüm sağlayan yapılardır.
Tasarım kalıpları, benzer problemlere benzer tasarım çözümleri getirerek tasarım işini kolaylaştırır.
Tasarım kalıpları ilk olarak, 1990’ların başlarında ortaya çıkmıştır. Bir grup yazlım geliştirici, mimaride kullanılmakta olan kalıpları inceleyerek bunların yazılım sistemlerinde de benzer şekilde kullanılıp kullanılamayacağını araştırmışlardır. Bu noktada karşılaştıkları 2 soru olmuştur. Bu sorular şunlardır:
1) Yazılımlarda tekrar ve tekrar ortaya çıkan problemler var mıdır? Bu problemler benzer mantıklarla çözülebiliyorlar mıdır?
2) Bazı kalıplar tanımlandıktan sonra, bu kalıplar temel alınarak özel sorunlara tasarım çözümleri getirilebilir mi?
Cevap, evet olmuştur. Gerçekten de yazılım sistemlerinin karşılaştıkları problemlerin tasarımları genelde benzer olmaktadır. Mesela eski bir çalışan sistem ile çalışabilecek uyumlulukta yeni bir sistem tasarlamak, varolan bir sistemin hepsini değil de bir kısmını kullanarak yeni bir sistem yaratmak, yaratılan modüllerin bir veri yapısının durumuna göre yapacakları işleri ayarlamak, ... gibi genel anlamda tasarım sorunlarına ortak çözümler sunulabilmektedir. Bu soruya evet cevabı verildikten sonra yapılmaya başlanan iş ortak tasarım kalıpları tasarlamak olmuştur.
90’larda birçok insan kalıplarla uğraşmaya başlasa da, "Gangs of Four" adıyla anınan Gamma, Helm, Johnson, Vlissides’in yazmış olduğu "Design Patterns: Elements of Reusable Object-Oriented Software " kitabı bu konuda çok büyük bir başarı yakalamıştır. Kitap halen bir çok üniversitede ders kitabı olarak da okutulmaktadır. Aslında bu "dörtlü"nün yapmış olduğu iş, yeni kalıplar -sorunlara yeni çözümler getirmek- yaratmak değil, varolan çözümleri inceleyerek, ortak noktalarını alarak kalıpları yaratmaktan çok ortaya çıkarmak, tanımlamak olmuştur.
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ı
Bu yıllardan sonra, tasarım kalıplarına birçok eklenti yapılmıştır ve internette bir çok tasarım kalıbı bulunmaktadır.
Peki, tasarım kalıplarını öğrenmek için neler yapmak gerekir?
Öncelikle, tasarım kalıpları hakkında kafanızda genel bir fikir olması gerekmektedir. Tasarım kalıplarının belirlenmiş tasarımlar olduğunu ve birçok probleme ortak bir çözüm sağladığını bilmelisiniz. Bunun yanında, tasarım kalıpları öğrenmeden önce temel düzeyde nesneye yönelik programlama ve UML gösterimini bilmelisiniz. Daha sonra tasarım kalıpları hakkında çalışmaya başlayabilrisiniz.
Yazılımlarda kalıpları uygulamaya başladıktan sonra ne kadar başarılı tasarımlar yaptığınızı ve tasarım işinin ne kadar kolaylaştığını siz de göreceksiniz.
Bu yazımızda genel olarak tasarım kalıplarının ne olduğunu anlatmaya çalıştık. Bundan sonraki yazılarımızda en çok kullanılan kalıplar hakkında size bilgi vereceğiz.
Makale:
Tasarım Kalıpları - 1 Yazılım Mühendisliği Tanıl Ergin
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|