Նախագծման ձևանմուշներ

Նախագծման ձևանմուշները ծրագրային ապահովման ճարտարագիտության մեջ համարվում են բազմակի օգտագործման լուծումներ հաճախակի հանդիպող խնդիրների համար։ Նախագծման մոդելը ավարտուն դիզայն չէ, որ կարելի է վերցնել ու օգտագործել ելակետային կամ մեքենայական կոդերի մեջ։ Դա լոկ նկարագրություն է կամ մոդել, թե ինչպես կարելի է լուծել խնդիրը տարբեր իրավիճակների դեպքում։ Ծրագրեր կամ համակարգեր նախագծելիս մոդելների օգտագործումը համարվում է լավագույն պրակտիկա։
Որպես կանոն օբյեկտ կողմնորշված նախագծման մոդելները ցույց են տալիս դասերի և օբյեկտների փոխհարաբերությունները՝ առանց նշելու նախագծին մասնակցող դասերի կամ օբյեկտների վերջավոր թիվը։ Օբյեկտ կողմնորշված ծրագրավորման մեջ կիրառություն չունեն այն մոդելները, որոնք ունեն փոփոխական վիճակներ։
Նախագծման մոդելները տեղադրվում են մոդուլների և փոխկապվածությունների շրջաններում։ Ավելի բարձր մակարդակներում կիրառում են ճարտարապետական մոդելները, որոնք չափերով ավելի մեծ են և սովորաբար նկարագրում են պատկերի ամբողջ տեսքը իրեն հետևող համակարգերով։
Նախագծման մոդելները բաժանվում են հետևյալ դասերի.

Ալգորիթմական մարտավարության մոդելներ, կիրառություն ունի բարձր մակարդակներում ծրագրերի բնութագրերի մարտավարությունը նկարագրելու համար։
Հաշվողական նախագծման մոդելներ, բանալիների (key) նույնականացման հաշվարկների համար։
Կատարողական մոդելներ, ծրագրերի կատարման աջակցման, այդ թվում խնդիրների հոսքերի կատարման մարտավարության և խնդիրների սինխրոնիզացման համար նակատեսված բլոկների կառուցման համար։
Իրականացման մարտավարության մոդելներ, Ելակետային կոդի աջակցման համար։
Կառուցվածքային նախագծման մոդելներ, բարձր մակարդակի ծրագրերի կառուցվածքների հետ կապված խնդիրների լուծման համար։


== Պատմություն ==
Մոդելները որպես ճարտարապետական հասկացողություն առաջին անգամ ծագել է Քրիստոֆեր Ալեքսանդրի (1977/79) կողմից։ 1987 թ.-ին Քենտ Բեքը և Ուորդ Կանինգհեմը սկսեցին փորձեր կատարել մոդելները ծրագրավորման ոլորտում օգտագործելու համար և նույն թվականին իրենց արդյունքները ներկայացրեցին OOPSLA կոնֆերանսին։ Հաջորդ տարիներին Բեքը, Կանինգհեմը և այլք հետևում էին այս գործին։
Նախագծման մոդելները ինֆորմատիկայի մեջ կիրառություն գտավ Նախագծման մոդելներ. Օբեյկտ կողմնորոշված ծրագրավորման մեջ բազմակի օգտագործման տարրեր գրքի հրատարակումից հետո, որը լույս տեսավ 1994 թ.-ին։ Գրքի հեղինակները չորս հոգի են և իրենց անվանում են "Gang of Four" (հայերեն՝ Չորսի բանդա), որի պատճառով էլ գիրքը հաճախ անվանում են "GoF" (հայերեն՝ ԳօՖ)։ Այդ նույն տարում տեղի ունեցավ առաջին "Ծրագրավորման լեզուների մոդելներ" կոնֆերանսը, իսկ հաջորդ տարում "Portland Pattern Repository", որը զբաղվում էր ծրագրավորման մոդելների փաստագրումներով։
Նախագծման մոդելներին նվիրված հիշարժան գրքերը հետևյալն են.

Gamma Erich; Richard Helm, Ralph Johnson, and John Vlissides (1995)։ Design Patterns: Elements of Reusable Object-Oriented Software։ Addison-Wesley։ ISBN 0-201-63361-2  
Buschmann Frank, Regine Meunier, Hans Rohnert, Peter Sommerlad (1996)։ Pattern-Oriented Software Architecture, Volume 1: A System of Patterns։ John Wiley & Sons։ ISBN 0-471-95869-7 
Schmidt Douglas C., Michael Stal, Hans Rohnert, Frank Buschmann (2000)։ Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects։ John Wiley & Sons։ ISBN 0-471-60695-2 
Fowler Martin (2002)։ Patterns of Enterprise Application Architecture։ Addison-Wesley։ ISBN 978-0-321-12742-6 
Hohpe Gregor, Bobby Woolf (2003)։ Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions։ Addison-Wesley։ ISBN 0-321-20068-3 
Freeman Eric T, Elisabeth Robson, Bert Bates, Kathy Sierra (2004)։ Head First Design Patterns։ O'Reilly Media։ ISBN 0-596-00712-4 Չնայած նրան, որ նախագծման մոդելները երկար տարիներ կիրառություն ունեին, բայց պահանջվեց մի քանի տարի դրանց սահմանման և դասակարգման համար։


== Պրակտիկա ==
Նախագծման մոդելները, արդեն իսկ թեսթավորված լինելով հանդերձ, կարող են արագացնել ծրագրի նախագծման պրոցեսը։ Բացի այդ նման մոդելների օգտագործումը ծրագրի կոդը դարձնում են ավելի ընթեռնելի և ճարտարապետական տեսանկյունից ավելի պարզ բոլոր այն ծրագրավորողների համար, ովքեր արդեն իսկ ծանոթ են նախագծման մոդելներին։
Ըստ սահմանման, ամեն մի ծրագրի մեջ նախագծման մոդելները պետք է ենթածրագրավորվեն։ Որոշ հեղինակներ դա դիտարկում էին որպես ավելորդ քայլ, քանի որ նախագծման մոդելներ օգտագործելիս անընդհատ վերասահմանման խնդիր էր առաջ գալիս։ Դրա համար Մեյերը և Արնոութը նախագծման մոդելների երկու երրորդը մասնակի կամ ամբողջական տեսքով ենթարկեցին կոմպոնենտիզացման։
Նախագծման մոդելները ապահովում են ընդհանուր լուծումներ, նրանք փաստաթղթավորված են և կապված չեն կոնկրետ խնդրի հետ։


== Կառուցվածք ==
Նախագծման մոդելները բաղկացած են մի քանի բաժիններից։ Հատուկ ուշադրության են արժանի Կառուցվածք, Մասնակիցներ և Համագործակցություն բաժինները։ Այս բաժինները նկարագրում են «նախագծի եղանակ», որ ծրագիր ստեղծողը կարող է պատճենել և հարմարեցնել իր ծրագրի կոդում, մոդելում նկարագրված խնդիրը լուծելու համար։ Միկրոճարտարապետությունն իրենից ներկայացնում ծրագրային բաղադրիչների (օրինակ դասեր, մեթոդներ և այլն) հավաքածու և փոխհարաբերություններ միմյանց միջև։
Նախագծողներն նախագծման մեթոդն իրենց ծրագրերում կիրառում են միկրոճարտարապետության նախատիպը ներդնելով։ Դա իր հերթին նշանակում է, որ տվյալ կոնստրուկցիայում միկրոճարտարապետությունը կունենա այնպիսի կառուցվածք և կազմավորում, որը բնորոշ է ընտրված մեթոդի եղանակին։


=== Դոմեին-բնորոշ մոդելներ ===
Ձեռնարկվել է անգամ դոմեին բնորոշ նախագծման մոդելների նախագծումը։ Մոդելներում կիրառություն են գտել ինչպես հին, այնպես էլ նոր նախագծման մոդելներ։ Մոդելներն իր մեջ ընդգրկում են օգտագործման ինտերֆեյսի ինֆորմացիայի վիզուալիզացման, նախագծի անվտանգության, "անվտանգության օգտագործման", Web նախագծերի և բիզնես նախագծերի մոդելներ։


== Դասակարգում ==
Նախագծման կաղապարներն ի սկզբանե բաժանվել են հետևյալ դասերի. Ստեղծող ձևանմուշներ, կառուցվածքային նախագծման ձևանմուշներ և վարքագծային ձևանմուշներ։ Մյուս դասակարգումն ներառում էր նախագծման ճարտարապետական ձևանմուշի հասկացությունը, որը կարող է կիրառվել ծրագրային ապահովման ճարտարապետական մակարդակի վրա, որպիսին է օրինակ ձևանմուշի ներկայացման վերահսկումը։


== Ծանոթագրություններ ==