أنماط إنشائية
في هندسة البرمجيات، أنماط التصميم الإنشائية (بالإنجليزية: creational design patterns) هي أنماط التصميم التي تتعامل مع ألية إنشاء كائن، في محاولة لإنشاء كائنات بطريقة مناسبة لهذا الوضع. يمكن أن يؤدي الشكل الأساسي لإنشاء الكائن إلى مشكلات في التصميم أو تعقيد إضافي للتصميم. تحل أنماط التصميم الإبداعي هذه المشكلة عن طريق التحكم بطريقة ما في إنشاء هذا الكائن.
تتكون أنماط التصميم الإبداعي من فكرتين مهيمنتين. الأول هو التغليف البرمجي المعرفة حول الاصناف الملموسة التي يستخدمها النظام. الآخر وهو إخفاء كيفية إنشاء ودمج مثيلات للكائنات البرمجية هذه اصناف المحددة.[1]
يتم تصنيف أنماط التصميم الإنشائي أيضًا إلى الأنماط الإنشائية للكائنات والأنماط الإنشائية للأصناف، حيث تتعامل أنماط إنشاء الكائنات مع إنشاء الكائنات وتتعامل أنماط إنشاء الصنف مع إنشاء مثيل برمجي للصنف. بتفاصيل أكبر، تؤجل أنماط إنشاء الكائنات جزءًا من إنشاء الكائن الخاص بها إلى كائن آخر، بينما تؤجل أنماط إنشاء الصنف إلى إنشاء اصناف الفرعية.[2]
خمسة أنماط تصميم معروفة هي جزء من الأنماط الإبداعية هي
- نمط المصنع المجرد (بالإنجليزية: Abstract factory pattern)، الذي يوفر واجهة لإنشاء كائنات مرتبطة أو تابعة دون تحديد اصناف المحدد للكائنات.[3]
- نمط البنّاء (بالإنجليزية: Builder pattern)، الذي يفصل بناء كائن معقد عن تمثيله بحيث يمكن لعملية البناء نفسها إنشاء تمثيلات مختلفة.
- نمط طريقة المصنع (بالإنجليزية: Factory method pattern)، والذي يسمح للصنف بتأجيل الاستنساخ البرمجي (إنشاء مثيل) إلى أصناف الفرعية.[4]
- نمط النموذج الأولي (بالإنجليزية: Prototype pattern)، الذي يحدد نوع الكائن المراد إنشاؤه باستخدام مثيل برمجي للنموذج الأولي، ويخلق كائنات جديدة عن طريق استنساخ هذا النموذج الأولي.
- نمط المفرد (بالإنجليزية: Singleton)، الذي يضمن أن الصنف لديه مثيل واحد فقط، ويوفر نقطة وصول عالمية إليه.[5]
تعريف
عدلتهدف الأنماط الإبداعية إلى فصل النظام عن كيفية إنشاء وتأليف وتمثيل كائناته. إنها تزيد من مرونة النظام من حيث ماذا، من، وكيف، ومتى يتم إنشاء الكائن.[6]
الاستخدام
عدلنظرًا لأن هندسة البرمجيات الحديثة تعتمد على تركيب الكائن برمجياً أكثر من وراثة الأصناف، فإن التركيز يتحول بعيدًا عن سلوكيات الكود الثابت نحو تحديد مجموعة أصغر من السلوكيات الأساسية التي يمكن أن تتكون في سلوكيات أكثر تعقيدًا.[7] سلوكيات الكود الثابت غير مرنة لأنها تتطلب تجاوز برمجي أو إعادة تنفيذ كل شيء من أجل تغيير أجزاء من التصميم. بالإضافة إلى ذلك، لا يشجع الترميز الثابت على إعادة الاستخدام ويجعل من الصعب تتبع الأخطاء. لهذه الأسباب، تكون الأنماط الإبداعية أكثر فائدة من سلوكيات الترميز الثابت. الأنماط الإبداعية تجعل التصميم أكثر مرونة. توفر طرقًا مختلفة لإزالة العناوين البرمجية الصريحة في الاصناف المحددة من الكود التي تحتاج إلى تمثيل برمجي.[8] وبعبارة أخرى، فإنها تخلق الاستقلالية للكائنات واصناف.
ضع في اعتبارك تطبيق الأنماط الإنشائية عندما:
- يجب أن يكون النظام مستقلاً عن كيفية إنشاء كائناته ومنتجاته.
- تم تصميم مجموعة من الكائنات ذات الصلة لاستخدامها معًا.
- إخفاء تطبيقات مكتبة صنف برمجية (بالإنجليزية: class library) أو منتج، والكشف عن واجهاتهم فقط.
- بناء وعرض مختلف للكائنات المعقدة المستقلة.
- يريد الصنف أن يقوم الصنف الفرعي بتنفيذ الكائن الذي تقوم بإنشائه.
- يتم تحديد عمليات إنشاء مثيلات برمجية للصنف في وقت التشغيل البرمجي.
- يجب أن يكون هناك مثيل برمجي واحد ويمكن للعميل الوصول إلى هذا المثيل البرمجي في جميع الأوقات.
- يجب أن يكون المثيل قابلاً للتوسيع دون تعديل.
بناء
عدلفيما يلي رسم بياني لفصل بسيط تشترك فيه معظم الأنماط الإبداعية. لاحظ أن الأنماط الإبداعية المختلفة تتطلب اصنافا إضافية ومختلفة.
المشاركون Participants:
- الُمنشِئ (بالإنجليزية: Creator): يعلن برمجياً عن واجهة الكائن البرمجية. إرجاع برمجي للكائن.
- المُنشِئ المحدد (بالإنجليزية: ConcreteCreator): ينفذ واجهة الكائن.
أمثلة
عدلتتضمن بعض أمثلة أنماط التصميم الإبداعي ما يلي:
- نمط المصنع المجرد (بالإنجليزية: Factory Abstract): يطلب الصنف الكائنات التي يتطلبها من كائن المصنع بدلاً من إنشاء الكائنات مباشرة.
- نمط طريقة المصنع (بالإنجليزية: Factory method pattern): مركزة إنشاء كائن من نوع معين باختيار واحد من عدة تطبيقات.
- نمط الباني أو البنّاء (بالإنجليزية: Builder pattern): فصل البناء البرمجي لكائن معقد عن تمثيله البرمجي بحيث يمكن لعملية البناء نفسها أن تُنشأ تمثيلات مختلفة.
- نمط حقن التبعية (بالإنجليزية: Dependency Injection pattern): الصنف يقبل الكائنات التي تتطلبها من حاقن بدلاً من إنشاء الكائنات مباشرة.
- نمط التهيئة البطيء (بالإنجليزية: Lazy initialization pattern): أسلوب تأخير إنشاء كائن، أو حساب قيمة، أو عملية مكلفة أخرى حتى المرة الأولى اللازمة.
- نمط تجمع الكائنات (بالإنجليزية: Object pool pattern): تجنب الحصول على الموارد وتحريرها بشكل مكلف عن طريق إعادة تدوير الكائنات التي لم تعد مستخدمة.
- نمط النموذج الأولي [[:en:Prototype pattern|(بالإنجليزية: Prototype pattern)]]: يستخدم عندما يتم تحديد نوع الكائنات التي يتم إنشاؤها بواسطة مثيل نموذجي، يتم استنساخه لإنتاج كائنات جديدة.
- [[النمط المفرد|نمط (بالإنجليزية: Singleton)]] : قصر التمثيل البرمجي لصنف على كائن واحد فقط.
ملحق: مسرد المصطلحات الإنجليزية
عدلمَسرد المفردات وفق أقسام المقالة | |
المقدمة | |
تغليف البرمجي | encapsulating |
مثيلات للكائنات البرمجية | instances |
اصناف المحددة | concrete classes |
الأنماط الإنشائية للكائنات | object-creational patterns |
الأنماط الإنشائية للأصناف | Class-creational patterns |
مثيل برمجي للصنف | Class-instantiation |
اصناف المحدد للكائنات | objects' concrete classes |
الاستنساخ البرمجي (انشاء مثيل) | instantiation |
أصناف الفرعية | subclasses |
نقطة وصول عالمية إليه | global point of access |
تركيب الكائن برمجياً | composition |
وراثة الأصناف | class inheritance |
الكود الثابت | hard-coding |
تجاوز برمجي | overriding |
إعادة تنفيذ | re-implementing |
العناوين البرمجية الصريحة | explicit references |
الكود | code |
تمثيل برمجي | instantiate |
واجهاتهم | interfaces |
بتنفيذ | implement |
تمثيل برمجي للصنف | instantiations |
وقت التشغيل | run-time |
يعلن برمجياً | Declares |
إرجاع | Returns |
تمثيله البرمجي | representation |
انظر أيضا
عدل- البناء
- النمط السلوكي
- نمط التزامن
- النمط الهيكلي
المراجع
عدل- ^ Gamma، Erich؛ Helm، Richard؛ Johnson، Ralph؛ Vlissides، John (1995). Design Patterns. Massachusetts: Addison-Wesley. ص. 81. ISBN:978-0-201-63361-0. مؤرشف من الأصل في 2020-05-18. اطلع عليه بتاريخ 2015-05-22.
- ^ Gamma، Erich؛ Helm، Richard؛ Johnson، Ralph؛ Vlissides، John (1995). Design Patterns. Massachusetts: Addison-Wesley. ISBN:978-0-201-63361-0. مؤرشف من الأصل في 2020-03-26. اطلع عليه بتاريخ 2015-05-22.
- ^ Freeman، Eric؛ Freeman، Elisabeth؛ Sierra، Kathy؛ Bates، Bert (2004). Hendrickson؛ Loukides، Mike (المحررون). Head First Design Patterns. California: O'Reilly Media. ص. 156. ISBN:978-0-596-00712-6. مؤرشف من الأصل في 2020-04-30. اطلع عليه بتاريخ 2015-05-22.
- ^ Freeman، Eric؛ Freeman، Elisabeth؛ Sierra، Kathy؛ Bates، Bert (2004). Hendrickson؛ Loukides، Mike (المحررون). Head First Design Patterns. California: O'Reilly Media. ص. 134. ISBN:978-0-596-00712-6. مؤرشف من الأصل في 2020-04-30. اطلع عليه بتاريخ 2015-05-22.
- ^ Freeman، Eric؛ Freeman، Elisabeth؛ Sierra، Kathy؛ Bates، Bert (2004). Hendrickson؛ Loukides، Mike (المحررون). Head First Design Patterns. California: O'Reilly Media. ص. 177. ISBN:978-0-596-00712-6. مؤرشف من الأصل في 2020-04-30. اطلع عليه بتاريخ 2015-05-22.
- ^ Judith، Bishop (2007). C# 3.0 Design Patterns. California: O'Reilly Media. ص. 336. ISBN:978-0-596-52773-0. مؤرشف من الأصل في 2020-05-18. اطلع عليه بتاريخ 2015-05-22.
- ^ Gamma، Erich؛ Helm، Richard؛ Johnson، Ralph؛ Vlissides، John (1995). Design Patterns. Massachusetts: Addison-Wesley. ص. 84. ISBN:978-0-201-63361-0. مؤرشف من الأصل في 2020-05-18. اطلع عليه بتاريخ 2015-05-22.
- ^ Gamma، Erich؛ Helm، Richard؛ Johnson، Ralph؛ Vlissides، John (1995). Design Patterns. Massachusetts: Addison-Wesley. ص. 85. ISBN:978-0-201-63361-0. مؤرشف من الأصل في 2020-05-18. اطلع عليه بتاريخ 2015-05-22.