أنماط إنشائية

في هندسة البرمجيات، أنماط التصميم الإنشائية  هي أنماط التصميم التي تتعامل مع ألية إنشاء كائن، في محاولة لإنشاء كائنات بطريقة مناسبة لهذا الوضع. يمكن أن يؤدي الشكل الأساسي لإنشاء الكائن إلى مشكلات في التصميم أو تعقيد إضافي للتصميم. تحل أنماط التصميم الإبداعي هذه المشكلة عن طريق التحكم بطريقة ما في إنشاء هذا الكائن.

تتكون أنماط التصميم الإبداعي من فكرتين مهيمنتين. الأول هو التغليف البرمجي المعرفة حول الاصناف الملموسة التي يستخدمها النظام. الآخر وهو إخفاء كيفية إنشاء ودمج مثيلات للكائنات البرمجية هذه اصناف المحددة.

يتم تصنيف أنماط التصميم الإنشائي أيضًا إلى الأنماط الإنشائية للكائنات والأنماط الإنشائية للأصناف، حيث تتعامل أنماط إنشاء الكائنات مع إنشاء الكائنات وتتعامل أنماط إنشاء الصنف مع إنشاء مثيل برمجي للصنف. بتفاصيل أكبر، تؤجل أنماط إنشاء الكائنات جزءًا من إنشاء الكائن الخاص بها إلى كائن آخر، بينما تؤجل أنماط إنشاء الصنف إلى إنشاء اصناف الفرعية.

خمسة أنماط تصميم معروفة هي جزء من الأنماط الإبداعية هي

 نمط المصنع المجرد ، الذي يوفر واجهة لإنشاء كائنات مرتبطة أو تابعة دون تحديد اصناف المحدد للكائنات.
 نمط البنّاء ، الذي يفصل بناء كائن معقد عن تمثيله بحيث يمكن لعملية البناء نفسها إنشاء تمثيلات مختلفة.
 نمط طريقة المصنع ، والذي يسمح للصنف بتأجيل الاستنساخ البرمجي (إنشاء مثيل) إلى أصناف الفرعية.
 نمط النموذج الأولي ، الذي يحدد نوع الكائن المراد إنشاؤه باستخدام مثيل برمجي للنموذج الأولي، ويخلق كائنات جديدة عن طريق استنساخ هذا النموذج الأولي.
 نمط المفرد ، الذي يضمن أن الصنف لديه مثيل واحد فقط، ويوفر نقطة وصول عالمية إليه.

 تعريف 
تهدف الأنماط الإبداعية إلى فصل النظام عن كيفية إنشاء وتأليف وتمثيل كائناته. إنها تزيد من مرونة النظام من حيث ماذا، من، وكيف، ومتى يتم إنشاء الكائن.

 الاستخدام 
نظرًا لأن هندسة البرمجيات الحديثة تعتمد على تركيب الكائن برمجياً أكثر من وراثة الأصناف، فإن التركيز يتحول بعيدًا عن سلوكيات الكود الثابت نحو تحديد مجموعة أصغر من السلوكيات الأساسية التي يمكن أن تتكون في سلوكيات أكثر تعقيدًا. سلوكيات الكود الثابت غير مرنة لأنها تتطلب تجاوز برمجي أو إعادة تنفيذ كل شيء من أجل تغيير أجزاء من التصميم. بالإضافة إلى ذلك، لا يشجع الترميز الثابت على إعادة الاستخدام ويجعل من الصعب تتبع الأخطاء. لهذه الأسباب، تكون الأنماط الإبداعية أكثر فائدة من سلوكيات الترميز الثابت. الأنماط الإبداعية تجعل التصميم أكثر مرونة. توفر طرقًا مختلفة لإزالة العناوين البرمجية الصريحة في الاصناف المحددة من الكود التي تحتاج إلى تمثيل برمجي. وبعبارة أخرى، فإنها تخلق الاستقلالية للكائنات واصناف.

ضع في اعتبارك تطبيق الأنماط الإنشائية عندما:

 يجب أن يكون النظام مستقلاً عن كيفية إنشاء كائناته ومنتجاته.
 تم تصميم مجموعة من الكائنات ذات الصلة لاستخدامها معًا.
 إخفاء تطبيقات مكتبة صنف برمجية  أو منتج، والكشف عن واجهاتهم فقط.
 بناء وعرض مختلف للكائنات المعقدة المستقلة.
 يريد الصنف أن يقوم الصنف الفرعي بتنفيذ الكائن الذي تقوم بإنشائه.
 يتم تحديد عمليات إنشاء مثيلات برمجية للصنف في وقت التشغيل البرمجي.
 يجب أن يكون هناك مثيل برمجي واحد ويمكن للعميل الوصول إلى هذا المثيل البرمجي في جميع الأوقات.
 يجب أن يكون المثيل قابلاً للتوسيع دون تعديل.

 بناء 

فيما يلي رسم بياني لفصل بسيط تشترك فيه معظم الأنماط الإبداعية. لاحظ أن الأنماط الإبداعية المختلفة تتطلب اصنافا إضافية ومختلفة.

المشاركون Participants:

 الُمنشِئ : يعلن برمجياً عن واجهة الكائن البرمجية. إرجاع برمجي للكائن.
 المُنشِئ المحدد : ينفذ واجهة الكائن.

 أمثلة 
تتضمن بعض أمثلة أنماط التصميم الإبداعي ما يلي:

 نمط المصنع المجرد : يطلب الصنف الكائنات التي يتطلبها من كائن المصنع بدلاً من إنشاء الكائنات مباشرة.
 نمط طريقة المصنع : مركزة إنشاء كائن من نوع معين باختيار واحد من عدة تطبيقات.
 نمط الباني أو البنّاء (بالإنجليزية: Builder pattern): فصل البناء البرمجي لكائن معقد عن تمثيله البرمجي بحيث يمكن لعملية البناء نفسها أن تُنشأ تمثيلات مختلفة.
 نمط حقن التبعية : الصنف يقبل الكائنات التي تتطلبها من حاقن بدلاً من إنشاء الكائنات مباشرة.
 نمط التهيئة البطيء : أسلوب تأخير إنشاء كائن، أو حساب قيمة، أو عملية مكلفة أخرى حتى المرة الأولى اللازمة.
 نمط تجمع الكائنات : تجنب الحصول على الموارد وتحريرها بشكل مكلف عن طريق إعادة تدوير الكائنات التي لم تعد مستخدمة.
 نمط النموذج الأولي : يستخدم عندما يتم تحديد نوع الكائنات التي يتم إنشاؤها بواسطة مثيل نموذجي، يتم استنساخه لإنتاج كائنات جديدة.
 نمط  : قصر التمثيل البرمجي لصنف على كائن واحد فقط.

 ملحق: مسرد المصطلحات الإنجليزية 
المقدمةتغليف البرمجي 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

 انظر أيضا 

 البناء
 النمط السلوكي
 نمط التزامن
 النمط الهيكلي

 المراجع 

تصنيف:نماذج تصميم البرمجيات