şükela:  tümü | bugün
  • nesneye yonelik programlamada ** sik sik karsilasilan program dizayn problemlerini tanimlayip, herhangi bir programlama dilinden bagimsiz olarak bu problemlerin cozumunu class,interface, subclass,method gibi temel oop elemanlari ve bu elemanlarin iliskileri cercevesinde ifade etmekte kullanilir design pattern'lar.
    software engineering'in heyecan verici konularindan biri olup, dogru durust anlasilirsa, programcinin isini oldukca kolaylastirir, yazilan kodun tekrar tekrar kullanilmasina* imkan saglayarak. ama bu konudaki kitaplarin, ozellikle de konunun islendigi en onemli kitap sayilan, gang of four'un yazdigi 'design patterns elements of reusable object oriented software' adli kitabin soyutlugu da meshurdur.
  • proje gelistirmede, bir tasarım problemini en basit ve en efektif bir şekilde çözüme kavuşturacak yöntemdir. yani diyelim ki besiktastan uskudara gececeksiniz. tasarim sablonunuz size vapura binmenizi soylemelidir. yoksa besiktas' tan uskudar' a avusturalya uzerinden gitmek de mumkundur..
  • bir problem hakkinda o problemle ugrasmis kisilerin ugrasip didinip en optimize bi cozum bulduklarinda "aha da bu benim cozumum" dedikleri fasulyeler. cok faydalidirlar. ornegin bir singleton patterni vardir, dadindan yenmez, sonra observer patterni vardir. "pattern bilirim biraz" diyen kisi bu ikisini bilmezse ona kiz vermezler.
  • konuyla ilgili olarak design patterns explained - a new perspective on object-oriented design adlı kitap da temel kaynaklardan biridir.
  • tasarım şablonları (design patterns) ilk olarak mimarlar tarafından ortaya atılmış bir kavramdır. sadece bilgisayar bilimleri değil, tanımlanabilen sorunlara sahip ve bunların uygulamalı çözümleri üzerinde çalışan her bilim dalı tasarım şablonlarından faydalanabilir. algoritmik sorunlara değil tasarımsal sorunlara çözüm getirmeyi hedeflerler (bu entry boyunca tasarım şablonlarını övecek, en sonunda da yerim tasarım şablonlarını diyeceğim).

    tasarım şablonları sıkça karşılaşılan bazı sorunların deneyimle sabitlenmiş optimum çözüm yollarını sunar ve önerirler. böylece bir uygulamanın mimarisini hazırlayan kişiler bu şablonlardan doğru bir kullanımla yararlandıklarında bir kaç güzel şeyi sağlamış olurlar.

    yazılan kod reusable olur (nesneye yönelik programlamanın ortaya çıkış nedenlerinden birisi olan reusability kavramı kodun yeniden kullanılabilirliğini işaret eder), çünkü tasarım şablonları size optimal granularity'yi ve abstraction'u salık verirler, bu sayede elde ettiğiniz modüller bir işi yapan taşınabilir ve flexible bileşenleri olur uygulamanın.

    tasarım şablonlarının diğer bir getirisi de mimarinin herkesce bilinen ortak bir dile sahip olması olur. ortak dil sayesinde yazdığınız uygulamanın tasarım detaylarını açıklamakta fazla zorlanmaz, implementasyon detayları yerine logic'den daha fazla bahsedebilir olursunuz. örneğin bir class'ın uygulamanın çalışma zamanının her anında sadece bir instance'ının aktif olması gerekiyorsa, ve eğer instance yoksa yeni bir tane oluşturulması, varsa var olanın instance'ın kullanılması, ve ayrıca da multi-thread uygulamalarda mutex'lerin kullanılması ve race condition sorunlarının çözülmesi gibi problemlere çözüm getirmeniz gerekiyorsa singleton isimli şablon size bunun en iyi çözümünü sunar. hem bu çözümü size sunar, hem de siz bunu iki saat insanlara anlatmaya çalışmak yerine "burda da singleton kullandım, geçtim" diye karizma yapar, uzatmadan sorunun çözümünü ifade etmiş olursunuz (design patterns ile sevdiklerinize zaman ayırın).

    tasarım şablonları design yapan kişiye zaman kazandırır.. daha önceden defalarca karşılaşılmış bilinen sorunların çözümlerini tasarım şablonlarından miras alır ve sizin uygulamanıza özel durumlarla ilgili düşünmeye devam edebilirsiniz. ayrıca yazdığınız kodun bilimsel olarak doğruluğu üzerinde anlaşılmış kimi kriterlere uygunluğu da size güven verir..

    evet..

    öte yandan tasarım şablonları yazılım geliştirme olayının bilgisayarların yayılması ile beraber endüstriyel bir mevzu haline gelmesi ile iyice değer kazanmıştır. çünkü adam gibi programlama bilgisi olmayan insanların yüzüne bakılır uygulamalar ortaya çıkarması gerekliliği, en deneyimsizlerinin bile bir şeyler yapabilmesini sağlayacak teknolojilere olan ihtiyacı doğurmuştur (büyük şirketlerde java ile uygulama geliştirilmesinin nedeni de aynıdır bana kalırsa, 3-tier zımbırtısını birileri zorlamadan beceremeyecek kadar andaval olanları zorla adam eder çünkü, buzdolabı ile tost makinesi konuşabilsin diye tasarlanmış, embedded olarak kullanılacağı hayal edilmiş olan (şimdi alakası yok ama jini mesela en uygun kullanım alanlarından birisidir) java'nın multiplatform oluşu filan tercih edilmesinde bir sebep değildir). tasarım şablonları ile ortaya koyulan çözümler (abstract factory, singleton, lazy initialization, prototype, iterator, visitor, observer, memento, facade, decorator vs vs n tane var böyle sonuçta [bunlar nispeten çok kullanılanları ve kolay olanları]) zaten deneyimli ve hayal gücü olan her programcının ihtiyaç duyduğunda ortaya koyacağı çözümlerin aynısıdır.. peki bunlar kötü şeyler midir? bir tarafım (akademisyen olan tarafım diyelim) değildir diyor (çünkü "genç" bilgisayar bilimlerinin yavaş yavaş sağlam ayaklarla yere basan bir şey haline gelmesini sağlıyor), bir tarafım da (hacker kültürü ile yoğurulmuş olan tarafım diyelim) kötü tabi diyor (çünkü ortalık rezalet, basmakalıp uygulamalarla doluyor, bu yalanlar içerisinde yetişen insanlar -muhakkak hepsi değil, fakat azımsanmayacak bir kısmı- bilgisayar dünyasının çok küçük bir kısmında yaşayıp birer "bilgisayar memuru" oluyorlar) ("hiç kimse bilgisayar memuru olmasın da herkes nerd mü olsun, milletin ailesi, hayatta keyif aldığı başka şeyler var lan düdük!" derseniz kıçımın üstüne otururum, o ayrı konu)..

    fakat, hepsinin ötesinde, tasarım şablonlarını öğrenmek insanın geniş bir vizyon sahibi olması açısından çok önemlidir bence. tasarım şablonları programlama ile ilgili çözümlere farklı bir gözle bakmanızı sağladığı gibi -bu yazdığım şeyi buraya kadar okumuş ve ciddi bir kısmını anlamış olanların bazılarının dahi bir türlü cevabını adam gibi veremediklerini kendilerine itiraf edebilecekleri- nesneye yönelik programlamanın neden önemli olduğu, procedural programming ve functional programming ile gerçek farkının ne olduğu sorusuna zaman içerisinde sağlam bir yanıt vermelerini de sağlar..

    hazır bu mevzular açılmışken, (bkz: proje yönetimi/@evreniz).
  • varlığından haberdar olduğumda bilgisayar mühendisliği okumamışlığımın eksikliğini hissetmiştim.
  • design pattern'lar hakkındaki en önemli kitaplardan biri olan "design patterns: elements of reusable object-oriented software"'ın kısa adıdır.. gang of four tarafından yazılmı$tır..

    tasarım $ablonu konusu için tekrar (bkz: design pattern)
  • <kehanet>
    gün gelecek, yapay zekalı, müşteriyle konuşma modülü olan program yazan programlar design patternleri kullanarak program yazacaklar bu işten para kazanan insanlar da aç kalacak, sonra makineler dünyayı ele geçirecek, matrix'i yaratacaklar. java'yı xml'i icad ettiğimize ve microsoft'u yücelttiğimize lanet edeğiz.
    </kehanet>
  • (bkz: best practice)