Tasarım desenleri, tasarım kalıpları, tasarım örüntüleri veya tasarım şablonları, çok rastlanan, birbirine benzer sorunları çözmek için geliştirilmiş ve işlerliği kanıtlanmış genel çözüm önerileridir.
Yazılım tasarım desenleri
Yazılım tasarım örüntüleri, yazılım tasarımı sırasında sıkça karşılaşılan, birbirine benzer sorunları çözmek için geliştirilmiş ve işlerliği kanıtlanmış genel çözüm önerileridir. Genel olarak yazılım tasarım örüntüleri programlama dillerinden bağımsız olarak tanımlansalar da, nesneye yönelimli programlama dillerine uygun yazılım tasarım örüntüleri daha çok bilinir. Bu örüntüler, nesneler ve sınıflar arasındaki ilişkileri ve etkileşimleri gösterirler. Programcı bir tasarım örüntüsünü elindeki soruna bakarak özelleştirip kullanabilir.
Tarihçe
Tasarım örüntülerinin temelleri Mimar 'ın 1970 sonlarında başlatığı çalışmalara dayanmaktadır. Alexander 1977'de Bir Desen Dili: Şehirler, Binalar, Yapılar (İngilizce: A Pattern Language: Towns, Buildings, Construction, ), 1979'da Ebedî Yapım Yöntemi (İngilizce: A Timeless Way of Building, ) kitaplarını yayınlamıştır. Bu kitaplarda tasarın örüntülerinin üst seviyesi örüntüleri içeren örneklerinin yanı sıra desenlerin nasıl belgeleneceği de konu edilmiştir.
1987'deki uluslararası Nesneye Yönelik Programlama, Sistemler, Diller ve Uygulamalar (İngilizce: OOPSLA, Object Oriented Programming, Systems, Languages, and Applications) konferansına kadar desenlerle ilgili bir çalışma ortaya çıkmamış. Bu tarihten sonra ise Grady Booch, , Erich Gamma ve Kent Beck başta olmak üzere örüntülerle ilgili makale ve sunumlar yayınlamışlardır. 1994'te Erich Gamma, , ve tarafından yayınlanan Tasarım Örüntüleri: Tekrar kullanılabilir Nesneye Yönelik Yazılımın Temelleri (İngilizce: Design Patterns: Elements of Reusable Object-Oriented Software, ) tasarım örüntülerinin yazılımda kullanılmasında dönüm noktası olmuştur.
Dörtlü Çete (Gang of Four, kısaca GoF) yazılım tasarım desenleri
Yazılım tasarım örüntüleri 1994 tarihinde Tasarım Örüntüleri: Tekrar kullanılabilir Nesneye Yönelik Yazılımın Temelleri (İngilizce: Design Patterns: Elements of Reusable Object-Oriented Software, ) adıyla yayınlanan kitap ile yaygınlaşmaya başlamış. Kitabın yazarları Erich Gamma, , ve bilgisayar bilimleri çevresinde Dörtlü Çete olarak de bilinmektedir. Dörtlü Çete, isimi kitabın isminin uzun olmasından dolayı konuyla ilgili e-postalarda kısaltma yapılarak, yazarları kastederek, kitabın "Dörtlü Çetenin Kitabı" (İngilizce: Book of GoF) olarak anılmasıyla ortaya çıkmıştır.
Tasarım desenleri sınıfları
Dörtlü Çete'nin Tasarım Örüntüleri kitabı () tasarım örüntülerini üç sınıfa ayırır, fakat bu sınıfları birbirinden ayıran keskin kriterler yoktur.
Davranış örüntüleri
Davranış örüntüleri işlevsel sorumlulukların nesneler arasında nasıl atanacağı ve yazılımın gerektirdiği çözüm yöntemlerinin nesnelerce nasıl kullanılacağı hakkında öneriler sunar. Davranış örüntüleri nesne ve sınıf kalıpları yanı sıra nesneler arasındaki iletişim ile ilgili örüntüler de sunar. Davranış örüntüleri tasarımcının nesneler arası iletişim ve iletişim yöntemlerine yoğunlaşmasını sağlar.
Aynen yapısal örüntülerde olduğu gibi, davranış örüntüleri de ikiye ayrılır: sınıf davranış örüntüleri ve nesne davranış örüntüleri.
Sınıf davranış örüntüleri kalıtım kullanarak davranışların sınıflar arasında dağıtılmasını mümkün kılar. Nesne davranış örüntüleri ise nesne bileştirme yoluyla tek bir nesnenin kolayca sağlayamayacağı davranışların bir nesne grubu ile sağlanmasını mümkün kılar.
- (İngilizce: mediator pattern)
Birbiri ile bağlatılı olarak çalışan nesnelerin aynı çatı altında tutularak tek bir noktadan (yani ara bulucu tarafından) yönlendirilmesini mümkün kılar. Ara bulucuya bağlı olan nesneler, durum değişikliklerini ara bulucuya iletirler. Ara bulucu uygulamanın gerektirdiği düzenleme ve sıra ile ilgili nesnelerden isteklerde bulunur. Üst seviye kullanıcı nesneler ise sadece ara bulucu ile bağlantı kurarlar.
- (İngilizce: state pattern)
Bir nesnenin davranışını durumuna göre değiştirmesine olanak sağlar. Kullanıcı açısından, nesne sınıfını değiştiriyormuş izlenimi verir. Uygulamanın gerektirdiği doğrultuda yeni davranışlar eklenip çıkarılmasına olanak sağlar. Kullanıcı nesneler ise bu tür değişikliklerden etkilenmez.
- (İngilizce: observer pattern)
Bir grup nesnenin, gözlemciler, gözlem altındaki bir nesnede olan değişimlerden otomatik olarak haberdar olmasına olanak sağlar. Gözlem altındaki nesne, kimler tarafından izlendiğinden bağımsız olarak işlevini sürdürür. Zaman içinde yeni gözlemcilerin katılımı ya da ayrılması mümkündür. Bu sayede uygulama zaman içinde davranış değiştirebilir.
- (İngilizce: template method pattern)
Bir yordamın çözüm kalıbı olarak kullanılmasına olanak sağlar. Kalıp üzerindeki bazı işlem adımları alt sınıflar tarafından işlenmesine olası kılar. Dolayısıyla ana kalıp değişmeksizin, bazı ara adımlar değişikliğe uğratılabilir. Kullanıcılar bu değişikliklerin farkında olmazlar.
- (İngilizce: command pattern)
Kullanıcı (nesnel) isteklerinin nesnelere dönüştürülerek işlenmesini olası kılar. Bu sayede farklı kullanıcıların istekleri nesnel kayıtlara dönüştürülerek kuyruk ya da kayıtlarda tutulabilir. Bu sayede yapılan işlemlerin geriye dönüştürülmesine de imkân verilir.
- (İngilizce: chain of responsibility pattern)
Bir kullanıcı (nesnel) isteğinin birden fazla nesne tarafından değerlendirilerek karşılanmaya çalışılmasına olanak sağlar. Kullanıcı, tek arayüz üzerinden isteğini iletir. İstek zincire bağlı nesneler tarafından sıra ile ele alınarak karşılanmaya çalışılır. İstek karşılanana dek zincir üzerinde bir nesneden diğerine aktarılır. Zaman içinde zincire yeni nesneler eklenmesi ya da çıkarılması mümkündür. Kullanıcı bu tür değişikliklerden arayüz sayesinde etkilenmez.
- (İngilizce: strategy pattery)
Aynı arayüz altında, aynı sorunu çözebilecek birçok çözüm yöntemi sınıfını saklayarak kullanıcı nesnelerin hangi yöntemin kullanıldığından haberdar olmaksızın isteklerinin sağlanmasını olanaklı kılar. Kullanıcı nesneler aynı türden nesnelerle çalıştıklarını var sayarken farklı davranış biçimleri ile karşılanırlar.
- (İngilizce: memento pattern)
Yadigâr, uygulama yazılımı içerisinde önemli roller üstlenen nesnelerin durumlarını saklamak ve gerektiğinde nesneleri geçmişteki durumlarına geri döndürmek ya da hatırlatmak için kullanılır.
- (İngilizce: iterator pattern)
Kitlesel bir nesnenin (İngilizce: aggragate object) altında bulunan nesnelere, nesnelerin nasıl temsil edildiklerine ya da gerçeklendiklerine bakılmaksızın, sırasıyla ulaşılmasını sağlar. Bu sayede farklı şekilde temsil edilen nesnelere tek bir arayüz üzerinden ulaşılabilir.
- (İngilizce: interpreter pattern)
Karmaşık uygulamaların gereklerini yerine getirmek için tanımlanan sözde dili işleyecek bir yorumlayıcı kalıbıdır. Sözde dilin gramer kurallarını birer sınıf olarak tanımlayarak kolayca uygulanmasını sağlar. Gramer kuralları sınıflar olarak tanımlandığı için kolayca değiştirilerek geliştirilebilir.
- (İngilizce: visitor pattern)
Bileşik bir yapı üzerine yeni işlemler eklenmesine imkân verir. Ziyaretçi nesne bileşik yapı içindeki nesneleri tek tek ziyaret ederek gerekli bilgileri toplayıp işleyerek kullanıcıya sunar.
Oluşturma örüntüleri
Oluşturma örüntüleri, yazılım nesnelerinin (ya da başka bir deyişle sınıf örnekleri - İngilizce: class instances) nasıl oluşturulacağı hakkında öneriler sunar. Ana fikir, iyi bir yazılımın, içinde barındırdığı nesnelerin nasıl oluşturulduğundan bağımsız olarak tasarlanması gerektiğidir. Diğer bir deyişle nesnelerin nereden ve nasıl oluşturulduğu, ait oldukları yazılımın işleyişini etkilememeli; yeni özellikler eklenmesine ve değişikliklere karşı sorun oluşturmamalıdır.
Yazılım sistemleri geliştikçe nesnel bileşimler (İngilizce: object composition), sınıf kalıtımına (İngilizce: class inheritence) göre daha fazla önem kazanır. Bunun nedeni, yazılım sistemleri için basit temel davranış (İngilizce: behavior) şekillerinin tanımlanması üzerine kurulu tasarımların, sabit davranışlara dayalı tasarımlara göre daha esnek olmasındandır. Diğer bir deyişle, nesnelere davranışların bileşim olarak eklenmesi, daha sonra bu davranışların yazılımın gelişimine göre değiştirilmesine olanak sağlar. Bu durumda, geliştirilen yazılım için gereken temel davranış şekillerine dayalı bir tasarım, nesne arayüzleri (İngilizce: interface) değiştirmeden farklı ya da daha karmaşık davranışların kullanılabilmesini mümkün kılar.
Ancak nesnel bileşimler yoluyla temel davranışları sağlayan nesnelerin örneklenmesi, ana ya da kalıtım yoluyla davranış değişikliğine uğratılarak türetilmiş sınıflardan nesne oluşturmak daha zordur. Oluşturma örüntüleri bu zorlukları aşmak amacıyla kullanılabilecek yazılım örüntüleri içerir.
Oluşturma örüntüleri, hem hangi somut sınıfların (İngilizce: concrete class) nesne örneklemesinde kullanıldığını, hem de bu örneklerin nasıl oluşturulup bir araya getirildiğini yazılım sisteminden saklarlar.
- (İngilizce: factory method)
Nesne oluşturma için kullanılan tek arayüz altında nesnenin nasıl oluşturulacağını kalıtım yoluyla alt sınıflara bırakarak, arayüzle nesne oluşturma işlevlerini birbirinden ayırır.
- (İngilizce: prototype pattern)
Karmaşık veya pahalı sınıflardan nesne oluştururken yeni nesnelerin baştan oluşturulması yerine mevcutlarından örnekleyerek oluşturulmasını sağlar. Bu sayede yeni nesneler kolayca ve kaynaklar gereksiz yere meşgul edilmeden oluştururlar.
- (İngilizce: abstract factory pattern)
Tek arayüz ile bir nesne ailesinin farklı platformlarda oluşturulmasını mümkün kılar. Bu sayade yazılım uygulaması farklı platfromlara davranış değişikliğine uğramadan taşınabilir. Soyut fabrika kalıbı, tek arayüz altında hangi somut sınıfların kullanıldığını saklar.
- (İngilizce: builder pattern)
Karmaşık bir nesne grubunun tek arayüz üzerinden gerektiğince parça parça oluşturulmasını sağlar. Kullanıcı nesne grubunu kullandıkça nesne grubu gereken yönde yapılanır. Kullanılmayan parçalar gereksiz yere oluşturularak kaynak harcamaz.
- (İngilizce: singleton pattern)
Bir sınıftan sadece bir tane nesne oluşturulacak şekilde kısıtlama sağlar. Söz konusu nesneye uygulamanın her yerinden ulaşılabilir. Nesne ilk kez kullanılana dek oluşturulmayabilir.
Yapısal örüntüler
Yapısal örüntüler sınıfların ve nesnelerin birleştirilerek daha geniş yazılım yapılarının kurulmasına olanak sağlayan öneriler sunar. Sınıf yapı örüntüleri ve nesne yapı örüntüleri olmak üzere ikiye ayrılır.
Sınıf yapı örüntüleri kalıtım kullanarak sınıf arayüzlerini ya da uygulamaları bileştirerek yapıları genişletir. Nesne yapı örüntüleri ise nesnelerin birleştirilerek yeni işlevler kazanma yollarını gösterir.
- (İngilizce: composite pattern)
Nesnelerin parça-bütün ilişkisi içinde ağaç yapısı ile bir araya getirilerek birleştirilmesine ve bu bileşiğe tek ara yüzden ulaşılmasına imkân verir. Bileşik yapı yeni nesneler eklenip çıkarılarak zamanla genişleyip daralabilir.
- (İngilizce: façade pattern)
Karmaşık bir yapının bir arada tutularak tek bir arayüz üzerinden kullanımını mümkün kılar.
- (İngilizce: decorator pattern)
Bir nesneye, nesneyi değiştirmeden yeni sorumluluklar eklenmesini sağlar. Alt sınıflama yapmadan nesnelerin işlevlerinin geliştirilmesini mümkün kılar.
- (İngilizce: bridge pattern)
Hem arayüzün hem de somut uygulamanın birbirinden ayrılarak düzenlenmesine olanak sağlar. Arayüzün değişimi uygulamayı, uygulamanın değişimi arayüzü etkilemez. Her ikisi bağımsız olarak geliştirilebilir.
- (İngilizce: flyweight pattern)
Çok sayıda benzer nesnenin oluşturulması yerine bir örnek nesneden görsel nesneler oluşturarak kalabalık bir imkân verir. Görsel nesnelerin durum değişkenleri nesnenin kendisi tarafından değil kullanıcı tarafından saklanır.
- (İngilizce: adapter pattern)
Farklı kaynaklardan gelen nesne ya da sınıfların arayüzlerini uyumlandırmak amacıyla kullanılır.
- (İngilizce: proxy pattern)
Karmaşık, pahalı ve oluşturulması güç nesneleri kullanmak için arayüz taklidini olası kılar. Kullanılacak olan nesnenin fiziksel yerini kullanıcıdan saklayacak şekilde yönlendirme yapılmasını sağlar.
Yazılım tasarım örüntülerine eleştiri
Bazı yazarlar, yazılım tasarım örüntülerinin sorunların çözümlerini olumsuz yönde etkilediği yönünde eleştirmektedir. Bazılarına göre de, yazılım örüntüleri programla dilinde veya metodolojisindeki kısıtlamaları ve sorunları göstermektedir ve örüntüyü tespit etmek son aşama olmamalıdır. Yeni programla dillerinde bu örüntüleri gerektirecek durumları engelleyecek çözümler dilin kendisinden sağlanmalıdır. Örneğin bu görüşün taraftarları nesne yönelimli programlamaya ait olarak bilinen kavramların, daha önceki programlama dillerinde tasarım örüntüsü olarak tavsiye edilen kavramlar olduklarını, ama nesne yönelimli dillerin çıkmasıyla bu kavramların dil içinde belirsiz bir şekilde kullanıldığını ve artık bir örüntü olmadıklarını savunmaktadırlar.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Tasarim desenleri tasarim kaliplari tasarim oruntuleri veya tasarim sablonlari cok rastlanan birbirine benzer sorunlari cozmek icin gelistirilmis ve islerligi kanitlanmis genel cozum onerileridir Yazilim tasarim desenleriYazilim tasarim oruntuleri yazilim tasarimi sirasinda sikca karsilasilan birbirine benzer sorunlari cozmek icin gelistirilmis ve islerligi kanitlanmis genel cozum onerileridir Genel olarak yazilim tasarim oruntuleri programlama dillerinden bagimsiz olarak tanimlansalar da nesneye yonelimli programlama dillerine uygun yazilim tasarim oruntuleri daha cok bilinir Bu oruntuler nesneler ve siniflar arasindaki iliskileri ve etkilesimleri gosterirler Programci bir tasarim oruntusunu elindeki soruna bakarak ozellestirip kullanabilir TarihceTasarim oruntulerinin temelleri Mimar in 1970 sonlarinda baslatigi calismalara dayanmaktadir Alexander 1977 de Bir Desen Dili Sehirler Binalar Yapilar Ingilizce A Pattern Language Towns Buildings Construction ISBN 0 19 501919 9 1979 da Ebedi Yapim Yontemi Ingilizce A Timeless Way of Building ISBN 0 19 502402 8 kitaplarini yayinlamistir Bu kitaplarda tasarin oruntulerinin ust seviyesi oruntuleri iceren orneklerinin yani sira desenlerin nasil belgelenecegi de konu edilmistir 1987 deki uluslararasi Nesneye Yonelik Programlama Sistemler Diller ve Uygulamalar Ingilizce OOPSLA Object Oriented Programming Systems Languages and Applications konferansina kadar desenlerle ilgili bir calisma ortaya cikmamis Bu tarihten sonra ise Grady Booch Erich Gamma ve Kent Beck basta olmak uzere oruntulerle ilgili makale ve sunumlar yayinlamislardir 1994 te Erich Gamma ve tarafindan yayinlanan Tasarim Oruntuleri Tekrar kullanilabilir Nesneye Yonelik Yazilimin Temelleri Ingilizce Design Patterns Elements of Reusable Object Oriented Software ISBN 0 201 63361 2 tasarim oruntulerinin yazilimda kullanilmasinda donum noktasi olmustur Dortlu Cete Gang of Four kisaca GoF yazilim tasarim desenleriYazilim tasarim oruntuleri 1994 tarihinde Tasarim Oruntuleri Tekrar kullanilabilir Nesneye Yonelik Yazilimin Temelleri Ingilizce Design Patterns Elements of Reusable Object Oriented Software ISBN 0 201 63361 2 adiyla yayinlanan kitap ile yayginlasmaya baslamis Kitabin yazarlari Erich Gamma ve bilgisayar bilimleri cevresinde Dortlu Cete olarak de bilinmektedir Dortlu Cete isimi kitabin isminin uzun olmasindan dolayi konuyla ilgili e postalarda kisaltma yapilarak yazarlari kastederek kitabin Dortlu Cetenin Kitabi Ingilizce Book of GoF olarak anilmasiyla ortaya cikmistir Tasarim desenleri siniflari Dortlu Cete nin Tasarim Oruntuleri kitabi ISBN 0 201 63361 2 tasarim oruntulerini uc sinifa ayirir fakat bu siniflari birbirinden ayiran keskin kriterler yoktur Davranis oruntuleri Davranis oruntuleri islevsel sorumluluklarin nesneler arasinda nasil atanacagi ve yazilimin gerektirdigi cozum yontemlerinin nesnelerce nasil kullanilacagi hakkinda oneriler sunar Davranis oruntuleri nesne ve sinif kaliplari yani sira nesneler arasindaki iletisim ile ilgili oruntuler de sunar Davranis oruntuleri tasarimcinin nesneler arasi iletisim ve iletisim yontemlerine yogunlasmasini saglar Aynen yapisal oruntulerde oldugu gibi davranis oruntuleri de ikiye ayrilir sinif davranis oruntuleri ve nesne davranis oruntuleri Sinif davranis oruntuleri kalitim kullanarak davranislarin siniflar arasinda dagitilmasini mumkun kilar Nesne davranis oruntuleri ise nesne bilestirme yoluyla tek bir nesnenin kolayca saglayamayacagi davranislarin bir nesne grubu ile saglanmasini mumkun kilar Ingilizce mediator pattern Birbiri ile baglatili olarak calisan nesnelerin ayni cati altinda tutularak tek bir noktadan yani ara bulucu tarafindan yonlendirilmesini mumkun kilar Ara bulucuya bagli olan nesneler durum degisikliklerini ara bulucuya iletirler Ara bulucu uygulamanin gerektirdigi duzenleme ve sira ile ilgili nesnelerden isteklerde bulunur Ust seviye kullanici nesneler ise sadece ara bulucu ile baglanti kurarlar Ingilizce state pattern Bir nesnenin davranisini durumuna gore degistirmesine olanak saglar Kullanici acisindan nesne sinifini degistiriyormus izlenimi verir Uygulamanin gerektirdigi dogrultuda yeni davranislar eklenip cikarilmasina olanak saglar Kullanici nesneler ise bu tur degisikliklerden etkilenmez Ingilizce observer pattern Bir grup nesnenin gozlemciler gozlem altindaki bir nesnede olan degisimlerden otomatik olarak haberdar olmasina olanak saglar Gozlem altindaki nesne kimler tarafindan izlendiginden bagimsiz olarak islevini surdurur Zaman icinde yeni gozlemcilerin katilimi ya da ayrilmasi mumkundur Bu sayede uygulama zaman icinde davranis degistirebilir Ingilizce template method pattern Bir yordamin cozum kalibi olarak kullanilmasina olanak saglar Kalip uzerindeki bazi islem adimlari alt siniflar tarafindan islenmesine olasi kilar Dolayisiyla ana kalip degismeksizin bazi ara adimlar degisiklige ugratilabilir Kullanicilar bu degisikliklerin farkinda olmazlar Ingilizce command pattern Kullanici nesnel isteklerinin nesnelere donusturulerek islenmesini olasi kilar Bu sayede farkli kullanicilarin istekleri nesnel kayitlara donusturulerek kuyruk ya da kayitlarda tutulabilir Bu sayede yapilan islemlerin geriye donusturulmesine de imkan verilir Ingilizce chain of responsibility pattern Bir kullanici nesnel isteginin birden fazla nesne tarafindan degerlendirilerek karsilanmaya calisilmasina olanak saglar Kullanici tek arayuz uzerinden istegini iletir Istek zincire bagli nesneler tarafindan sira ile ele alinarak karsilanmaya calisilir Istek karsilanana dek zincir uzerinde bir nesneden digerine aktarilir Zaman icinde zincire yeni nesneler eklenmesi ya da cikarilmasi mumkundur Kullanici bu tur degisikliklerden arayuz sayesinde etkilenmez Ingilizce strategy pattery Ayni arayuz altinda ayni sorunu cozebilecek bircok cozum yontemi sinifini saklayarak kullanici nesnelerin hangi yontemin kullanildigindan haberdar olmaksizin isteklerinin saglanmasini olanakli kilar Kullanici nesneler ayni turden nesnelerle calistiklarini var sayarken farkli davranis bicimleri ile karsilanirlar Ingilizce memento pattern Yadigar uygulama yazilimi icerisinde onemli roller ustlenen nesnelerin durumlarini saklamak ve gerektiginde nesneleri gecmisteki durumlarina geri dondurmek ya da hatirlatmak icin kullanilir Ingilizce iterator pattern Kitlesel bir nesnenin Ingilizce aggragate object altinda bulunan nesnelere nesnelerin nasil temsil edildiklerine ya da gerceklendiklerine bakilmaksizin sirasiyla ulasilmasini saglar Bu sayede farkli sekilde temsil edilen nesnelere tek bir arayuz uzerinden ulasilabilir Ingilizce interpreter pattern Karmasik uygulamalarin gereklerini yerine getirmek icin tanimlanan sozde dili isleyecek bir yorumlayici kalibidir Sozde dilin gramer kurallarini birer sinif olarak tanimlayarak kolayca uygulanmasini saglar Gramer kurallari siniflar olarak tanimlandigi icin kolayca degistirilerek gelistirilebilir Ingilizce visitor pattern Bilesik bir yapi uzerine yeni islemler eklenmesine imkan verir Ziyaretci nesne bilesik yapi icindeki nesneleri tek tek ziyaret ederek gerekli bilgileri toplayip isleyerek kullaniciya sunar Olusturma oruntuleri Olusturma oruntuleri yazilim nesnelerinin ya da baska bir deyisle sinif ornekleri Ingilizce class instances nasil olusturulacagi hakkinda oneriler sunar Ana fikir iyi bir yazilimin icinde barindirdigi nesnelerin nasil olusturuldugundan bagimsiz olarak tasarlanmasi gerektigidir Diger bir deyisle nesnelerin nereden ve nasil olusturuldugu ait olduklari yazilimin isleyisini etkilememeli yeni ozellikler eklenmesine ve degisikliklere karsi sorun olusturmamalidir Yazilim sistemleri gelistikce nesnel bilesimler Ingilizce object composition sinif kalitimina Ingilizce class inheritence gore daha fazla onem kazanir Bunun nedeni yazilim sistemleri icin basit temel davranis Ingilizce behavior sekillerinin tanimlanmasi uzerine kurulu tasarimlarin sabit davranislara dayali tasarimlara gore daha esnek olmasindandir Diger bir deyisle nesnelere davranislarin bilesim olarak eklenmesi daha sonra bu davranislarin yazilimin gelisimine gore degistirilmesine olanak saglar Bu durumda gelistirilen yazilim icin gereken temel davranis sekillerine dayali bir tasarim nesne arayuzleri Ingilizce interface degistirmeden farkli ya da daha karmasik davranislarin kullanilabilmesini mumkun kilar Ancak nesnel bilesimler yoluyla temel davranislari saglayan nesnelerin orneklenmesi ana ya da kalitim yoluyla davranis degisikligine ugratilarak turetilmis siniflardan nesne olusturmak daha zordur Olusturma oruntuleri bu zorluklari asmak amaciyla kullanilabilecek yazilim oruntuleri icerir Olusturma oruntuleri hem hangi somut siniflarin Ingilizce concrete class nesne orneklemesinde kullanildigini hem de bu orneklerin nasil olusturulup bir araya getirildigini yazilim sisteminden saklarlar Ingilizce factory method Nesne olusturma icin kullanilan tek arayuz altinda nesnenin nasil olusturulacagini kalitim yoluyla alt siniflara birakarak arayuzle nesne olusturma islevlerini birbirinden ayirir Ingilizce prototype pattern Karmasik veya pahali siniflardan nesne olustururken yeni nesnelerin bastan olusturulmasi yerine mevcutlarindan ornekleyerek olusturulmasini saglar Bu sayede yeni nesneler kolayca ve kaynaklar gereksiz yere mesgul edilmeden olustururlar Ingilizce abstract factory pattern Tek arayuz ile bir nesne ailesinin farkli platformlarda olusturulmasini mumkun kilar Bu sayade yazilim uygulamasi farkli platfromlara davranis degisikligine ugramadan tasinabilir Soyut fabrika kalibi tek arayuz altinda hangi somut siniflarin kullanildigini saklar Ingilizce builder pattern Karmasik bir nesne grubunun tek arayuz uzerinden gerektigince parca parca olusturulmasini saglar Kullanici nesne grubunu kullandikca nesne grubu gereken yonde yapilanir Kullanilmayan parcalar gereksiz yere olusturularak kaynak harcamaz Ingilizce singleton pattern Bir siniftan sadece bir tane nesne olusturulacak sekilde kisitlama saglar Soz konusu nesneye uygulamanin her yerinden ulasilabilir Nesne ilk kez kullanilana dek olusturulmayabilir Yapisal oruntuler Yapisal oruntuler siniflarin ve nesnelerin birlestirilerek daha genis yazilim yapilarinin kurulmasina olanak saglayan oneriler sunar Sinif yapi oruntuleri ve nesne yapi oruntuleri olmak uzere ikiye ayrilir Sinif yapi oruntuleri kalitim kullanarak sinif arayuzlerini ya da uygulamalari bilestirerek yapilari genisletir Nesne yapi oruntuleri ise nesnelerin birlestirilerek yeni islevler kazanma yollarini gosterir Ingilizce composite pattern Nesnelerin parca butun iliskisi icinde agac yapisi ile bir araya getirilerek birlestirilmesine ve bu bilesige tek ara yuzden ulasilmasina imkan verir Bilesik yapi yeni nesneler eklenip cikarilarak zamanla genisleyip daralabilir Ingilizce facade pattern Karmasik bir yapinin bir arada tutularak tek bir arayuz uzerinden kullanimini mumkun kilar Ingilizce decorator pattern Bir nesneye nesneyi degistirmeden yeni sorumluluklar eklenmesini saglar Alt siniflama yapmadan nesnelerin islevlerinin gelistirilmesini mumkun kilar Ingilizce bridge pattern Hem arayuzun hem de somut uygulamanin birbirinden ayrilarak duzenlenmesine olanak saglar Arayuzun degisimi uygulamayi uygulamanin degisimi arayuzu etkilemez Her ikisi bagimsiz olarak gelistirilebilir Ingilizce flyweight pattern Cok sayida benzer nesnenin olusturulmasi yerine bir ornek nesneden gorsel nesneler olusturarak kalabalik bir imkan verir Gorsel nesnelerin durum degiskenleri nesnenin kendisi tarafindan degil kullanici tarafindan saklanir Ingilizce adapter pattern Farkli kaynaklardan gelen nesne ya da siniflarin arayuzlerini uyumlandirmak amaciyla kullanilir Ingilizce proxy pattern Karmasik pahali ve olusturulmasi guc nesneleri kullanmak icin arayuz taklidini olasi kilar Kullanilacak olan nesnenin fiziksel yerini kullanicidan saklayacak sekilde yonlendirme yapilmasini saglar Yazilim tasarim oruntulerine elestiriBazi yazarlar yazilim tasarim oruntulerinin sorunlarin cozumlerini olumsuz yonde etkiledigi yonunde elestirmektedir Bazilarina gore de yazilim oruntuleri programla dilinde veya metodolojisindeki kisitlamalari ve sorunlari gostermektedir ve oruntuyu tespit etmek son asama olmamalidir Yeni programla dillerinde bu oruntuleri gerektirecek durumlari engelleyecek cozumler dilin kendisinden saglanmalidir Ornegin bu gorusun taraftarlari nesne yonelimli programlamaya ait olarak bilinen kavramlarin daha onceki programlama dillerinde tasarim oruntusu olarak tavsiye edilen kavramlar olduklarini ama nesne yonelimli dillerin cikmasiyla bu kavramlarin dil icinde belirsiz bir sekilde kullanildigini ve artik bir oruntu olmadiklarini savunmaktadirlar