Ստեղծող ձևանմուշներ

Վիքիպեդիայից՝ ազատ հանրագիտարանից

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

Ստեղծող ձևանմուշները բաղկացած են երկու կարևոր գաղափարներից։ Առաջինն ինկապսուլյացիա է անում կոնկրետ դասերի մասին գիտելիքները, որ համակարգն օգտագործում է։ Մյուսը թաքցնում է դասերի նմուշների (անգլ.՝ instance) ստեղծումն ու միավորումը[1]։

Ստեղծող ձևանմուշները բաժանվում են Օբյեկտ ստեղծող ձևանմուշների և Դաս ստեղծող ձևանմուշների, որտեղ Օբյեկտ ստեղծողը գործ ունի օբյեկտներ ստեղծելու, իսկ Դաս ստեղծողները դասերի հետ։ Ավելի մանրամասնորեն որ ասենք, Օբյեկտ ստեղծողները օբյեկտի ստեղծման մի մասը թողնում են այլ օբյեկտի վրա, իսկ Դաս ստեղծողները դասերի ստեղծում թողնում են օբյեկտի ենթադասերի վրա[2]։

Հինգ առավել հայտնի ստեղծման ձևանմուշները հետևյալն են.

  • Աբստրակտ ֆաբրիկա, որն ինտերֆեյս է տալիս կապակցված կամ կախյալ օբյեկտներ ստեղծելու համար՝ առանց սահմանելու կոնկրետ դասի օբյեկտները[3]։
  • Կառուցող, որն անջատում է բարդ օբյեկտի կառուցումը նրա ներկայացումից այնպես, որ ստեղծման պրոցեսը կարող է այլ ներկայացում ստեղծել։
  • Ֆաբրիկային մեթոդ, որը թույլ է տալիս տարբերակել դասի օրինակը (անգլ.՝ instance) ենթադասերից[4]։
  • Նախատիպ, որը որոշում է օբյեկտի տիպը, որպեսզի նրանով ստեղծի նախատիպային օրինակ և նոր օրինակներ ստեղծի նախատիպերի պատճենավորման միջոցով։
  • Եզակի, որը երաշխավորում է, որ դասն ունի միայն մեկ օրինակ և նրա համար ապահովում է գլոբալ հասանելիության կետ[5]։

Ընդհանուր հասկացողություններ[խմբագրել | խմբագրել կոդը]

  • Client - հայցող
  • Instance - նմուշ
  • Implementation - իրականացում
  • Product - արգասիք

Նկարագրություն[խմբագրել | խմբագրել կոդը]

Ստեղծող ձևանմուշները նպատակ ունեն առանձնացնել օբյեկտի ստեղծումը և ներկայացումը։ Նրանք մեծացնում են համակարգի ճկունությունը այն տեսանկյունից, թե երբ և որտեղ է ստեղծվում օբյեկտը[6]։

Կիրառություն[խմբագրել | խմբագրել կոդը]

Այս ձևանմուշների օգտագործումն անհրաժեշտ է լինում, երբ համակարգն ավելի կախված է օբյեկտների կոմպոզիցիայից, քան դասերի ժառանգությունից[7]։ Կոշտ կոդավորման վարքը համարվում է ոչ ճկուն, քանի որ այն պահանջում է չեղարկում կամ կրկնակի օգտագործում այն ամենը, ինչը որ պետք է փոփոխել դիզայնի մեջ։ Բացի այդ կոշտ կոդավորումը չի նպաստում կոդի հավելյալ օգտագործմանը և դժվար է հետևել սխալները։ Դրա համար էլ ստեղծող ձևանմուշների օգտագործումը համարվում է օգտակար, քան կոշտ կոդավորված վարքի օգտագործումը։

Ստեղծող ձևանմուշների օգտագործումը դիզայնը դարձնում է ավելի ճկուն։ Նրանք տարբեր ճանապարհներ (մոդելներ) են առաջարկում, որպեսզի հեռացնեն կոնկրետ դասերի վրա բացահայտ հղումները, որոնց կարիքն ունեն դասերի նմուշները (անգլ.՝ instantiate)[8]։ Այլ կերպ ասած, նրանք անկախություն են ստեղծում օբյեկտների և դասերի միջև։

Ստեղծող ձևանմուշներն օգտագործվում են, երբ.

  • Համակարգը պետք է անկախ լինի նրանից, թե ինչպես է օբյեկտները և արգասիքները (անգլ.՝ products) ստեղծվում։
  • Կապակցված օբյեկտների բազմությունն նախատեսված է միասնական օգտագործման համար։
  • Դասի գրադարանի կամ արգասիքի (անգլ.՝ products) ներկայացումը թաքցնելու համար՝ ներկայացնելով միայն նրանց օգտագործման ինտերֆեյսները։
  • Անկախ բարդ օբյեկտների տարբեր ներկայացումներ ապահովելու համար։
  • Երբ դասը ցանկանում է, որ ենթադասը իրականացնի ստեղծվող օբյեկտի իրականացումը։
  • Դասերի նմուշները ստեղծվում են իրականացման պահին։
  • Երբ պետք է լինի ընդամենը դասի մեկ նմուշ և այն դիմողի համար պետք է հասանելի լինի ժամանակի ցանկացած պահին։
  • Դասերի օրինակները պետք է ընդլայնվեն առանց նրանց մոդիֆիկացնելու։

Կառուցվածք[խմբագրել | խմբագրել կոդը]

Ստեղծող մոդելի կառուցվածքային սխեման

Նկարում բերված է դասերի դիագրամի պարզագույն օրինակ, որն ընդհանուր է շատ ստեղծող ձևանմուշների մոտ։ Ուշադրություն դարձրեք, որ ստեղծող ձևանմուշները պահանջում են լրացուցիչ և տարբեր մասնակից դասեր։

Մասնակիցներ։

  • Creator: Հայտարարում է օբյեկտի ինտերֆեյսը։ Վերադարձնում է օբյեկտը։
  • ConcreteCreator: Իրականացնում է օբյեկտի ինտերֆեյսը։

Օրինակներ[խմբագրել | խմբագրել կոդը]

Ստեղծող ձևանմուշների որոշ օրինակներ ներառում են.

  • Աբստրակտ ֆաբրիկա - կենտրոնացնում է որոշումն այն մասին, թե ինչ ֆաբրիկա է ստեղծվում դասի նմուշը
  • Ֆաբրիկային մեթոդ - կենտրոնավորում է ինքնատիպ օբյեկտի ստեղծումը ընտրելով նրա մի քանի իրականացումներից մեկը
  • Կառուցող - առանձնացնում է բարդ օբյեկտի ստեղծումը նրա ներկայացումից այնպես, որ կառուցման պահին կարելի է ստեղծել տարբեր ներկայացումներ
  • Ծույլ բեռնում - մարտավարություն հետաձգելու օբյեկտի ստեղծումը կամ թանկարժեք պրոցեսի հաշվարկը, քանի դեռ այն անհրաժեշտ չէ
  • Օբյեկտների ավազան - խուսափել թանկարժեք ձեռքբերումներից (անգլ.՝ acquisition) և միջոցների տրամադրումից ի հաշիվ այլևս չօգտագործվող օբյեկտների վերաշրջանառության
  • Նախատիպ - օգտագործվում է, երբ օբյեկտների տեսակները բնորոշում են նախատիպի օրինակը, որի կլոնավորման միջոցով ստեղծվում են նոր օբյեկտները
  • Եզակի - սահմանափակում է դասերի թույլատրելի նմուշը մեկ հնարավոր օբյեկտի վրա

Ծանոթագրություններ[խմբագրել | խմբագրել կոդը]

  1. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1995). Design Patterns. Massachusetts: Addison-Wesley. էջ 81. ISBN 0-201-63361-2.{{cite book}}: CS1 սպաս․ բազմաթիվ անուններ: authors list (link)
  2. Design Patterns (book)
  3. Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). «Head First Design Patterns» (paperback). 1. O'REILLY: 156. ISBN 978-0-596-00712-6. Վերցված է 2012 թ․ հուլիսի 23-ին. {{cite journal}}: Cite journal requires |journal= (օգնություն)
  4. Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). «Head First Design Patterns» (paperback). 1. O'REILLY: 134. ISBN 978-0-596-00712-6. Վերցված է 2012 թ․ հուլիսի 23-ին. {{cite journal}}: Cite journal requires |journal= (օգնություն)
  5. Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). «Head First Design Patterns» (paperback). 1. O'REILLY: 177. ISBN 978-0-596-00712-6. Վերցված է 2012 թ․ հուլիսի 23-ին. {{cite journal}}: Cite journal requires |journal= (օգնություն)
  6. Judith, Bishop (December 2007). C# 3.0 Design Patterns. O'Reilly Media. էջ 336. ISBN 978-0-596-52773-0.
  7. Design Patterns. Massachusetts: Addison Wesley. 1995. էջ 84. ISBN 978-0-201-63361-0.
  8. Design Patterns. Massachusetts: Addision Wesley. 1995. էջ 85. ISBN 978-0-201-63361-0.