Tasarım Şablonları – Design Patterns

Yazılım geliştirme, kesinlikle basit bir iş değildir.

Günümüzde (özellikle ülkemizde), birkaç programlama dilinin sözdizimini (syntax) öğrenen birçok kimse paldır küldür uygulama geliştirmeye çalışıyor (Amacım mektepli-alaylı çatışmasını alevlendirmek kesinlikle değil, konu da zaten bununla alakalı değil). Küçük bir uygulama geliştiriliyor ise pek bir problem yaşanmayacağı muhakkak. Ancak, onbinlerce ve daha fazla satır koddan oluşan orta ölçekli yazılımların, gereksinimler belirlenmeden, analiz ve planlama yapılmadan geliştirilmeye başlanması gereksiz işlerden arındırılmamış, bakım ve güncelleme süreçleri programcılar için bir kabus haline gelen ve uygulamayı geliştiren yazılım ekibinin birbirileri ile olan iletişiminin kopmasına yol açan projelere dönüşmesi kaçınılmazdır. Üstelik bir süre sonra yazılımınıza yeni özellikler eklemeye kalkıştığınızda ortaya çıkabilecek sorunlar zaman kaybı yanında maliyeti de etkilemektedir. “Spaghetti code (arapsaçı kod)” adı verilen kodlama tekniği(!) buna en güzel örnektir

Yaklaşık yarım asırdır, bilgisayar adını verdiğimiz aletlere derdimizi anlatabilmek için programlama dilleri geliştiriliyor. Geliştirilen programlama dillerinin pekçoğu, daha önceden var olan programlama dilleri ile uygulama geliştirme süreçlerinde yaşanan problemleri ortadan kaldırmaya çalışmak için tasarlanmıştır. Önceki geliştirme süreçlerinde yaşanan sorunlar göz önüne alınarak, yeni programlama dilleri daha modern ve daha yönetilebilir programlama yaklaşımları (programming paradigms) adapte edilerek tasarlanmaya çalışılıyor.

Bu konuya somut bir örnek vermek gerekirse, programlama dilleri tarihinde çok gerilere gitmeye gerek yok. C adı verilen yapısal programlama dili modern yazılım projelerinde yazılan kodların bakım ve kontrolünü zorlaştırdığı için ortaya C++ adı verilen bir başka dil çıkmıştır. C++, programlama yaklaşımı olarak C diline, daha önce deneysel bir dil olan “Smalltalk” da ortaya atılan “Nesne Yönelimli Programlama (Object Oriented Programming / OOP)” yaklaşımını kazandıran bir başka programlama dili olarak yazılım geliştirme süreçlerinde büyük bir ilgi uyandırmıştır.

OOP nin geliştirilmesindeki en büyük nedenlerden biri, kodun tekrar kullanılabilirliğini (reuse) sağlamak ve gereksiz kod yazımından kurtulmaktır. Artık yazılım geliştirme süreçleri, nesne yönelimli programlama (oop) yaklaşımını kullanarak çok daha kolay ve yönetilebilir hale gelmiştir. Ancak zamanla C++ ile getirilen nesne yönelimli programlama özelliklerinin de, bazı sorunlara neden olduğu anlaşılınca “Java” programlama dilini geliştiren ekip, nesne yönelimli programlama yaklaşımına çok daha modern ve uygulanabilir özellikler getirerek, nesne yönelimli programlama paradigmasına katkıda bulunmuştur. Bugün Java’nın sunmuş olduğu özellikler, tasarım şablonlarının (design patterns) uygulanabilirliği ve çok daha elverişli yazılım geliştirimeye en müsait özelilklerdir.

Bugün, yazılımlar bir takım halinde geliştiriliyor. Yazılım ekibindeki her geliştirici kendisine düşen yazılım modüllerinin geliştirilmesinden sorumludur. Sağlam temellere dayanan bir yazılım projesinin geliştirilmesi, yukarıda bahsedilen planlama, analiz ve gereksinimlerin belirlenmesi kriterlerinin hepsine ayrı ayrı önem vermekten geçer. Bu tür kriterlerin iyi bir şekilde tasarlanması için, yıllardan bu yana zeki ve becerikli pekçok mühendis tarafından bazı tasarım şablonları geliştirilmiş ve halen geliştirilmeye devam edilmektedir.

Bugün, artık yazılımların hangi programlama ortamında geliştirileceğinden ziyade, projenin geliştirilme sürecinde kullanılacak tasarım şablonlarının (design patterns) hangi programlama paradigmasını kullanan hangi programlama dilleri ile çok daha etkili bir şekilde uygulanabileceği tartışılmaktadır. Yani, yazılım geliştirime işinde iseniz tasarım şablonlarını bilmek ve projelerinize uygulayabilmek artık çok önemli bir yere sahiptir.

Bir Örnek : MVC

1980 lerin başında bugün olduğu gibi tasarım şablonları ifadesi mevcut değildi. Smalltalk gibi bazı dillerin ortaya attığı frameworkler (uygulama çatısı) oldukça popülerse de, tasarım şablonları tam olarak gelişmemiş bir yapıdaydı. O zamanlar kullanılan MVC (Model- View – Controller) framework bugünkü tasarım şablonu felsefesinin öncülerindendir. MVC yapısında geliştirilen projeler, kullanıcı arayüzü ile (User Interface / UI), veri modeli (data model) adını verdiğimiz programın ana işlevselliğini yerine getiren bölümün birbirinden ayrılmasını sağlamakta ve bu şekilde geliştirilen proje bölümleri, birbirinden bağımsız olarak tasarlanabilmektedir.

Burda MVC, tasarım şablonlarının neden önemli ve kullanılması gerektiğini gösteren çok başarılı bir örnektir. Hatta bugün Java ve diğer pekçok modern programlama dili ile geliştirilen kullanıcı arayüzüne sahip (GUI) uygulamalar tamamen MVC modeline göre hazırlanmaktadır. Dahası, bugün web uygulamaları da geliştirme sürecinde MVC yapısını kendilerine model alarak hazırlanmakta ve MVC moelini uygulayan pekçok framework (uygulama çatısı) geliştirilmiştir.

Tasarım Şablonu (Design Pattern) Nedir?

Tasarım şablonu ilk duyulduğu zaman pek bir anlam ifade etmeyen bir tanımlama gibi gelse de, aslında tamamen nesne yönelimli programlama kullanılarak hazırlanan kodların projeler ve yazılım ekibi arasında tekrar kullanılabilirliğini sağlamak amacı ile tasarlanmıştır. Tasarım şablonlarının arkasındaki fikir oldukça basitdir. Projede sıklıkla kullanılan nesnelerin birbirleri arasındaki etkileşimlerini mantıklı bir yapıda kataloglamak.

Tasarım şablonları, herhangi bir programlama dilinden bağımsız olarak tasarlanan ve sıkça görülen nesne yönelimli programlama problemlerini ortadan kaldırmak için geliştirilmiş taktiklerdir. Tasarım şablonlarını öğrenmek ve kullanmak, yazılım ekibindeki geliştiriciler arasındaki iletişimi de maksimum seviyeye getirir ve proje geliştirme süreci sağlıklı bir şekilde işler.

Tasarım Şablonlarını Neden Kullanayım ki?

Eğer Java ile uygulama geliştirdi iseniz, aslında bazı tasarım şablonlarını çoktan kullanmışsınız demektir. Sadece bunların adını bilmiyor ve herhangi bir tasarım şablonu kullandığınızdan haberiniz yoktu.

Konuya dönecek olursak, eğer sağlam temellere sahip bir Java geliştiricisi olmak istiyor iseniz, ortaya çıkan problemlere getirilen popüler çözümlerden birkaç tanesini bilmeniz gerekiyor. Yazılım geliştirme süreçlerinde ortaya çıkan bu tür problemlere getirilen çözümler, yıllardır uygulama geliştiren zeki ve becerikli pekçok mühendis tarafından geliştirilmiş ve etkinliği pekçok projede kullanılarak kanıtlanmıştır. Burada problemlere getirilen çözümlerden kastımız basitçe tasarım şablonlarıdır. Tasarım şablonlarından haberdar ve bunları etkili bir şekilde uygulamalarınızın geliştirme süreçlerinde kullanıyorsanız, projelerinizi çok daha hızlı ve sağlam temellere sahip nesne yönelimli Analiz (Object Oriented Analysis/OOA) ve nesne yönelimli tasarım (Object Oriented Design / OOD) planlamalarına oturtabilirsiniz.

Java programlama dilinde yeni iseniz, ya da nesne yönelimli programlama paradigmasını yeni yeni kavrıyor iseniz, öğrenme süreçlerinizi kesinlikle tasarım şablonları kullanarak devam ettirin. Bu ileride sağlam temellere sahip bir Java geliştiricisi olmanızda size çok büyük faydalar sağayacaktır. Yıllardır birçok geliştirici tasarım şablonlarından habersiz bir şekilde uygulama geliştirdi ve ortaya çıkan problemlere başarılı çözümler getiremeden uygulama süreçlerini devam ettirdiler. Yeni Java geliştiricileri olarak, bu tür sorunların başına başlangıçta geçmek çok büyük bir artı olacaktır.

Peki Kaç Tane Tasarım Şablonu Var?

Bugün dünyanın heryerinden pekçok yazılım mühendisi, deneyimlerinde ortaya çıkan problemlere çözümler üretmektedir. Bu tür çözümlerin bir sonucu olarak pek çok tasarım şablonu geliştirilmiş ve geliştirilmeye devam edilmektedir. Bazı istatistiklere göre nesne yönelimli programlama yönelimini destekleyen, 250 den fazla tasarım şablonu mevcut olduğu belirtilmiştir. Fakat bunların hepsini öğrenmek ve kullanmak imkansız olduğu için, 23 adet iyi bilinen ve çok kullanılan tasarım şablonu pekçok büyük projede etkili bir şekilde kullanılmaktadır.

Herhangi bir projeyi geliştirmek için bir tasarım şablonu seçip, bütün proje o şablonu temel alarak geliştrilmez. Bunun yerine, projede kullanılacak bölümlere uygun tasarım şablonları belirlenerek, geliştirme süreci pekçok tasarım şablonu üzerine geliştirilir. Üstelik bazı tasarım şablonları başka tasarım şablonları üzerinde tasarlanmıştır.

Son Sözler

Şunu asla unutmayın. Tasarım şablonlarını kullanarak uygulama geliştirmek asla bir külfet değildir. Bilakis, dünyanın saygı duyduğu yazılım mühendislerinin sorunları nasıl çözdüğünü, yazılım geliştirme süreçlerini nasıl devam ettirdiklerini görmek ve anlamak geliştirici olarak kariyerinizi bir üst lige taşıyacaktır.

Tasarım şablonlarını kullanmak, kodunuzu nasıl tasarladığınızı etkili bir şekilde değiştirecektir. Yazdığınız kodların, ne kadar zekice tasarlandığını ve olası problemlerle nasıl baş ettiğini gördükçe tasarım şablonlarının ne kadar önemli bir yere sahip olduğunu tekrar tekrar göreceksiniz :)


İlgili Yazılar:

  1. Singleton Design Pattern
  2. Factory Design Pattern

Yorum bırakmak için buraya, Sitenizden trackback vermek için buraya tıklayabilirsiniz.

4 Responses to “Tasarım Şablonları – Design Patterns”

  1. [...] önce şurada derinlemesine açıklamaya çalıştığım design patterns (tasarım şablonları), nesne [...]

  2. Yahya diyor ki:

    Merhaba Hocam. Konuyu mükemmel bir şekilde kaleme almışsınız, elinize emeğinize sağlık. Teşekkür ediyorum. Başarılarınızın ve paylaşımlarınızın devamını dilerim.

  3. fatih diyor ki:

    Ben teşekkür ederim.

  4. Blog diyor ki:

    Bir sonraki yazınızda inşallah bilinen en iyi şablonları paylaşırsanız sevinirim

Leave a Reply