Gelen BT , özellikle de yazılım geliştirme , bir tasarım deseni (genellikle denir tasarım deseni ) yazılımının bir tasarım sorununa cevaben iyi uygulama olarak kabul edilen bir düzenleme tipik modülleri vardır. Çeşitli yazılımların tasarımında kullanılabilecek standart bir çözümü açıklar.
Bir tasarım modeli, yazılım tasarımcılarının deneyimlerinden gelir . Yazılım modülleri tarafından oynanan rollerin ve eylemlerin yinelenen bir düzenlemesini açıklar ve patronun adı, tasarımcı ile programcı arasında ortak bir kelime dağarcığı görevi görür. Mimarideki bir tasarım motifine benzer şekilde , tasarım deseni, daha sonra gerektiğinde değiştirilebilen ve uyarlanabilen bir çözümün ana hatlarını tanımlar.
Tasarım kalıpları genel tasarım süreçlerini açıklar ve bu nedenle yazılım tasarımına uygulanan deneyimden yararlanmayı mümkün kılar . Bir bilgisayar sisteminin yazılım mimarisini etkilerler .
Tasarım kalıpları ne mimari kalıplar ne de programlama saçmalığıdır .
Deneyime dayalı iyi uygulamaları belgelemek için kalıplar kullanılır. Tek bir bileşenle zorlukla çözülemeyen sorunlara çözümler sunarlar: çoğu modelin açıklaması, bir yazılımın birkaç bileşeni tarafından oynanabilen birkaç rolü içerir. Örneğin, Gözlemci patronu , özne ve gözlemci olmak üzere iki rol içerir.
Kalıplar, bilgisayar mimarı ve programcı arasında ortak bir kelime dağarcığı sağlar . Programcı için tasarım deseni biliyorsa gözlemlemek , daha sonra bilgisayar mimarı ona uzun açıklamalar vermek gerekmez ve diyalog ile sınırlı olacaktır “Burada ben bir kullanılmış Gözlemci ” .
Gelen bilgisayar programlama , tasarım desenleri öncesinde, sırasında kullanılabilir, ya da programlama çalışmaları sonrasında: yazarken daha önce kullanılmış, programcı bir rehber olarak desen kullanacağız kaynak kodu ; daha sonra kullanıldığında, halihazırda yazılmış olan farklı kaynak kodu modüllerini birbirine bağlamak için bir örnek olarak hizmet edecektir; bu, bağlantıları için gerekli kaynak kodunun yazılması anlamına gelir ve bunları tasarım modeline karşılık gelecek koda dönüştürür; Programlama çalışması sırasında kullanılırsa, programcı henüz yazılan kodun mevcut bir modelle bazı ortak özellikleri olduğunu bulacak ve kodun modelle eşleşmesini sağlamak için gerekli değişiklikleri yapacaktır. Bununla birlikte, iyi bir uygulama, bir modeli yalnızca esnekliğine ihtiyaç duyulduğu netleştikten sonra kullanmaktır.
"Dörtlü Çete" kitabında resmileştirdi (GOF, Erich Gamma , Richard Helm , Ralph Johnson (tr) ve John Vlissides (tr) ) başlıklı Tasarım Kalıpları - Yeniden Kullanılabilir Nesne Odaklı Yazılım Öğeleri içinde 1994 . Tasarım desenleri , 1970'lerde A Pattern Language adlı kitabın bir dizi mimari modeli tanımladığı mimar Christopher Alexander'ın çalışmasından kaynaklanmaktadır .
Bir tasarım modelinin tanımı, sabit bir biçimciliği izler:
Bu biçimcilik özellikle her modelin kullanımını ve iç mantığını daha iyi anlamaya yardımcı olur, ancak terimin olağan kullanımına karşılık gelmez. Sözcük yapısı daha uygun olabilir.
Daha önemli bir yapı yönü dikliktir : her bir model, diğer modellerde mevcut olan fikirleri veya stratejileri tekrar etmeyen farklı bir yaklaşıma karşılık gelmelidir. Bu kalite, tasarımcının bir sorunu analiz etmesine ve her yönünü organize bir şekilde çözmesine ve bir çözüm oluşturmak için kalıpları birleştirmesine olanak tanır. Bazı yazarlar, GoF modellerinde ortogonalite eksikliğini görürken, diğerleri daha da fazlasını önermektedir (Vlissides, Grand).
Tasarım kalıpları, dört yazarın ortak yazarı olan Design Patterns: Elements of Reusable Software kitabının yayınlanmasının ardından 1994 yılında resmen tanındı : Gamma, Helm, Johnson ve Vlissides ( Gang of Four - GoF ; Fransızca "dörtlü grup" ”). Bu en çok satan kitap yirmi üç “GoF kalıbı” nı ve bunların nasıl kullanılacağını anlatıyor .
Kullanımlarına bağlı olarak üç tasarım modeli ailesi vardır:
Yirmi üç GoF patronu:
Fabrika ve Soyut Fabrika Bu desen, somut sınıfı belirtmeden nesne aileleri oluşturmak için bir arayüz sağlar. Patron fabrika veya fabrika yöntemi (İngilizce fabrika veya fabrika yöntemi ) tekrar eden bir patrondur. Basit bir fabrika, sağlanan parametrelere bağlı olarak birkaç olası sınıftan birinin bir örneğini döndürür. Tüm sınıflar birbiriyle ilişkilidir ve ortak yöntemlere sahiptir ve her biri bazı veriler için optimize edilmiştir. Patron soyut fabrikası (İngiliz soyut fabrikası ), üretimden biraz daha ileri gider. Bir dizi ilgili nesneyi elde etmek için soyut bir fabrika kullanılır. Örneğin, bir grafik tüzüğü uygulamak için: Windows stilinde nesneleri (düğmeler, menüler) döndüren, biri Motif stilinde ve diğeri Macintosh stilinde döndüren bir fabrika vardır. Basit bir fabrika kullanılarak soyut bir fabrika elde edilir. Adaptör Bu desen, bir sınıfın arayüzünü bir uygulama tarafından kullanılan başka bir arayüze dönüştürür. Aksi takdirde uyumsuz olacak sınıfları birbirine bağlamanıza izin verir. Bir programın, arayüzü değişen kitaplık güncellemesini takiben, artık kullanımına karşılık gelmeyen bir sınıf kitaplığı kullanması durumunda kullanılır. Bir nesne adaptörü (İngilizce uyarlaması ) daha sonra yeni özelliklerini kullanarak eski arayüzü ortaya çıkarır . Köprü Bu model, bir soyutlamayı uygulamasından bağımsız olarak gelişebilecekleri bir şekilde ayırmayı mümkün kılar. Bir uygulamayı iki bölüme ayırmaktan oluşur: çözülecek problemi tanımlayan bir soyutlama sınıfı ve bir uygulama sağlayan ikinci bir sınıf. Aynı problem için birden fazla uygulama olabilir ve soyutlama sınıfının, gerektiğinde değiştirilebilen seçilen uygulamaya bir referansı vardır . Boss köprüsü (İngiliz köprüsü ), olay alıcılarını gerçekleştirmek için sıklıkla kullanılır. Editör Bu desen, bir nesneyi oluşturma sürecini elde edilen sonuçtan ayırır. Farklı sonuçlar elde etmek için aynı işlemi kullanmanıza izin verir. Fabrika modeline bir alternatiftir . Bir dizi parametreyi geçen bir nesne yaratma yöntemi yerine, sınıf fabrikasının bir nesne yaratma yöntemi vardır - düzenleyici (İngilizce oluşturucu ). Bu nesne, değiştirilebilen özelliklere ve tüm özellikleri dikkate alarak nihai nesneyi yaratma yöntemine sahiptir. Bu model, neredeyse tümü isteğe bağlı olmak üzere birçok oluşturma parametresi olduğunda özellikle kullanışlıdır . Sorumluluk zinciri Patronun sorumluluk zinciri (İngilizce sorumluluk zincirinde ), birden fazla nesnenin art arda işlem görmesine izin vererek, bir talebin iletimini, ikincisinin alınmasından ve işlenmesinden ayırmaktır. Bu modelde her nesnenin, aynı türden olan aşağıdaki nesneye bir bağlantısı vardır. Böylece birkaç nesne bağlanır ve bir zincir oluşturur. Zincirdeki ilk nesneye bir istekte bulunulduğunda, onu işlemeye çalışır ve eğer yapamazsa bir sonraki nesneyi çağırır, vb. . Sipariş verildi Bu patron bir nesneye bir istek yerleştirerek, istekleri yapılandırmayı, sıraya koymayı, günlüğe kaydetmeyi ve iptal etmeyi mümkün kılar. Bu modelde bir nesne kontrolü (İngilizce komutuyla ) gerçekleştirilecek bir işlemdir. Bu nesnenin arayüzünün bir yöntemi vardır execute. Her işlem için uygulama, bu arayüzü uygulayan bir yöntemi olan farklı bir nesne oluşturacaktır execute. Yöntem executekullanıldığında işlem başlatılır . Bu model özellikle araç çubukları . Bileşik Bileşik desen (İngilizce'de aynı isim), bir nesneler hiyerarşisi oluşturmayı ve aynı şekilde tek bir öğeyi, bir dalı veya ağacın tamamını işlemeyi mümkün kılar. Özellikle farklı nesneleri bir ağaç yapısına göre bağlayarak karmaşık nesneler oluşturmaya izin verir. Bu model, farklı nesnelerin aynı arayüze sahip olmasını gerektirir, bu da yapının işlenmesini tek tip hale getirir. Örneğin, bir kelime işlemcide, kelimeler sayfalardaki sütunlar halinde düzenlenmiş paragraflara yerleştirilir; bütünü işlemek için bir bileşik sınıf bir arabirim uygular. Bu arayüz, metinleri, paragrafları, sütunları ve sayfaları temsil eden nesneler tarafından miras alınır . Dekoratör Patron dekoratör (İngilizce dekoratör ) bir nesneye dinamik olarak sorumluluklar ekleyebilir. Kalıtıma bir alternatif. Bu desen Rus bebeklerinden esinlenmiştir . Bir nesne, ona işlevsellik katacak başka bir dekoratif nesnenin içine gizlenebilir , set, kendisine işlevsellik katacak başka bir nesneyle süslenebilir vb. Bu teknik, dekore edilmiş nesnenin ve dekoratörlerinin, tipik olarak soyut bir sınıf tarafından tanımlanan aynı arabirimi uygulamalarını gerektirir . Cephe Boss cephesi (İngilizce cephesi ), bir dizi sistem arayüzüne birleşik bir arayüz sağlar. Programlama arayüzlerini gerçekleştirmek için kullanılır . Bir alt sistemin kesin bir sırayla kullanılması gereken birkaç bileşeni varsa, bir cephe sınıfı kullanıma sunulacak ve işlemlerin sırasının kontrol edilmesine ve alt sistemlerin teknik ayrıntılarının gizlenmesine olanak tanıyacaktır . Flyweight Patron sinek ağırlığında (Fransız ağırlık uçuşunda ), bir dizi farklı küçük nesneyi temsil etmek için bir nesne türü kullanılır. Bu desen, bir dizi nesne oluşturmanıza ve bunları yeniden kullanmanıza olanak tanır. Örneğin, bir dizi karakteri temsil etmek için kullanılabilir: bir fabrika nesnesi , aranan karaktere karşılık gelen bir nesne döndürür. Karakter bir metinde her kullanıldığında aynı örnek döndürülebilir. Yorumlamak Modelin iki merkezi bileşeni vardır: bağlam ve ifade ile bir programlama dilinin gramer öğelerinin temsilleri olan nesneler. Kalıp, belirli bir programlama dilinde yazılmış bir ifadeyi - bir kaynak metin - programlama tarafından manipüle edilebilecek bir şeye dönüştürmek için kullanılır: Kaynak kodu bir veya daha fazla dilbilgisi kuralına göre yazılır ve her kullanım için bir nesne oluşturulur. bir gramer kuralı. Yorumlayıcı nesnesi , kaynak metnin nesnelere dönüştürülmesinden sorumludur . Yineleyici Bu model, setin nasıl çalıştığına dair teknik ayrıntıları bilmeden bir setin öğelerine sıralı olarak erişmenizi sağlar. En basit ve en sık görülen modellerden biridir. Orijinal spesifikasyona göre, yöntemleri sağlayan bir arayüzden oluşur Nextve Current. Java'daki arayüz genellikle bir metoda nextElementve metoda sahiptir hasMoreElements. Arabulucu Bu modelde, birkaç nesnenin birbiriyle nasıl iletişim kurduğunu tanımlayan ve her birinin muhataplarına başvurmaktan kaçınan bir nesne vardır. Bu model, bileşenler arasında önemli sayıda bileşen ve ilişki olduğunda kullanılır. Örneğin 5 bileşenden oluşan bir ağda yirmiye kadar ilişki olabilir (her bir bileşen diğer dörde kadar). Ağın ortasına bir arabulucu bileşen yerleştirilir ve ilişki sayısı azaltılır: her bileşen yalnızca arabulucuya bağlanır . Arabulucu olan bir bireye benzer bir rol oynar , gözlenen model ve nesneler arasındaki iletişimi sağlamak için bir aracı olarak işlev görür. Memento Bu model, kapsülleme kaybı olmaksızın bir nesnenin iç durumunu dışsallaştırmayı amaçlamaktadır. Nesneyi önceki durumuna geri yüklemenizi sağlar. Bu şablon, bir nesnenin iç durumunu, bu durum bir arabirim tarafından açıklanmadan saklamak için kullanılır. Üç sınıftan oluşur: köken - devletin geldiği yer, hatıra -, orijinal nesnenin durumu ve hatırayı idare edecek nesne olan vasi . Köken kontrol etmek için bir yöntem vardır hatıra . Kaleci depolamak sorumludur hatıra ve kökenlerine onları dönüyor. Bu desen, çeşitli nesneler için kesin bir arayüz tanımlamaz, ancak bunlar her zaman üç sayıdadır . Gözlemek Bu model, nesneler arasında bire çok ilişki kurar; burada bir nesne değiştiğinde, diğer birkaç nesneye de değişiklik bildirilir. Bu modelde, bir nesne özne bağımlı nesnelerin listesini tutar gözlemci yapılan değişikliklerden haberdar edilecektir konu . Bir değişiklik yapıldığında, denek çeşitli gözlemcilere bir mesaj gönderir. Mesaj, değişikliğin ayrıntılı bir açıklamasını içerebilir . Bu modelde, bir gözlemci nesne , gözlemcileri kaydetmek için bir yöntem içerir. Her gözlemcinin bir yöntemi vardır Notify. Bir mesaj gönderildiğinde, nesne Notifykayıtlı her gözlemcinin yöntemini çağırır . Prototip Bu desen, örnek olarak hizmet veren bir örneği, prototipi kopyalayarak oluşturulacak nesne türünü tanımlamanıza olanak tanır. Bu modelin amacı, nesneleri somutlaştırmak için gereken zamandan tasarruf etmektir. Bu modele göre, bir uygulama, prototip görevi gören bir nesnenin örneğine sahiptir . Bu nesne, clonekopyalar oluşturmak için bir yönteme sahiptir . PHP gibi programlama dillerinin clonetüm nesnelerine gömülü bir yöntemi vardır . Vekil Bu model, ikincisinin kullanımını kontrol eden bir nesnenin yerine geçer. Bir vekil başka bir nesneyi korumayı amaçlayan bir nesnedir. Vekil nesne korunacak aynı arayüze sahiptir. Örneğin bir nesneye uzaktan erişime izin vermek için bir proxy oluşturulabilir ( ara yazılım aracılığıyla ). Proxy, korunan nesnenin oluşturulmasını geciktirmek amacıyla da oluşturulabilir - bu, kullanılmadan hemen önce oluşturulacaktır. En basit haliyle, bir proxy hiçbir şeyi korumaz ve tüm yöntem çağrılarını hedef nesneye iletir. Singleton Bu model, onu işlemek için bir arayüz sağlayarak her zaman bir sınıfın yalnızca bir örneğinin olmasını sağlamayı amaçlamaktadır. En basit kalıplardan biridir. Yalnızca bir örnekte var olması gereken nesne, bu benzersiz örneği elde etmek için bir yönteme ve diğer örneklerin oluşturulmasını önleyen bir mekanizmaya sahiptir. Durum Bu desen, bir nesnenin iç durumu değiştiğinde davranışını değiştirmesine izin verir. Bu model genellikle bir durum makinesini uygulamak için kullanılır . Durum bilgisi olan bir cihaza örnek, durumları çalma, kaydetme, duraklatma ve durdurma olan ses oynatıcıdır. Bu modele göre, bir durum makinesi sınıfı ve her durum için bir sınıf vardır. Bir olay durum değişikliğine neden olduğunda, durum makinesi sınıfı başka bir duruma bağlanır ve böylece davranışını değiştirir . Strateji Bu modelde, bir algoritma ailesi birbirinin yerine geçebilecek şekilde kapsüllenir. Algoritmalar, onları kullanan uygulamadan bağımsız olarak değişebilir. Üç rolü vardır: bağlam , strateji ve uygulamalar. Strateji genellikle soyut bir sınıf - farklı uygulamalar için ortak bir arabirimdir. Bağlam bir işlemle bir algoritma ilişkilendirir amacıdır. Şablon yöntemi Bu model, belirli pasajları delege ederek bir algoritmanın genel yapısını tanımlar. Alt sınıfların genel yapısını korurken algoritmayı değiştirmesine izin vermek. Nesne yönelimli programlamada en basit ve en sık kullanılan modellerden biridir . Bir hesaplamanın birkaç olası uygulaması olduğunda kullanılır. Örnek bir sınıf (İngilizce şablon ), birlikte kullanıldığında varsayılan bir algoritma uygulayan bu tür yöntemleri içerir. Bazı yöntemler boş veya soyut olabilir. Şablon sınıfının alt sınıfları belirli yöntemlerin yerini alabilir ve böylece türetilmiş bir algoritma oluşturabilir. Ziyaretçi Bu desen, bir dizi nesne üzerinde gerçekleştirilecek bir işlemi temsil eder. İlgili nesneyi veya yapıyı değiştirmeden işlemi değiştirmenize izin verir. Bu modele göre, modifiye edilecek nesneler, modifikasyonları gerçekleştirecek üçüncü bir sınıfa parametre olarak aktarılır. Soyut bir Ziyaretçi sınıfı , üçüncü sınıfın arayüzünü tanımlar. Bu model, özellikle, nesnelerin değiştirilemeyen farklı arayüzlere sahip olabileceği bir dizi nesneyi manipüle etmek için kullanılır.GRASP kalıpları ( genel sorumluluk atama yazılım kalıpları (veya ilkeleri )), Craig Larman tarafından oluşturulan ve BCE tasarım yöntemiyle bağlantılı olarak tasarım sırasında nesne yönelimli bir programın sınıflarına sorumluluk atama kurallarını tanımlayan kalıplardır ( sınır kontrol varlığı için - Fransız MVC "model görünüm denetleyicisi") :