نماذج التصميم (هندسة البرمجيات)

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

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

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

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

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

## تاريخ نماذج التصميم
ورد مصطلح نماذج (Patterns) أول مرة على لسان كريستوفر الكسندر، وأوّل من أسقط المصطلح على هندسة البرمجيّات كان وارد كونتنهام.

في الحقيقة، لم تحظ نماذج التصميم بالشعبيّة إلاّ بعد نشر كتاب *Design Patterns. Elements of reusable code* سنة 1994. حدث في نفس السنة تنظيم أوّل مؤتمر مخصّص لمناقشة نماذج التصميم.

## المكونات الرئيسية لقوالب التصميم
كريستوفر ألكسندر كتب عن قوالب التصميم: «كل قالب يصف مشكلة متكررة الحدوث، مع تقديم لفكرة علاج أو خوارزمية يمكن تطبيقها لملايين المرات دون أن تجد تشابه تام بين الحلول».

هناك أربع مكونات رئيسية لقوالب التصميم:

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

## أنماط نماذج التصميم
حسب GoF تصنف نماذج التصميم إلى 3 أنماط أو مجموعات:

# نماذج التصميم الإنشائية Creational Patterns
# نماذج التصميم السلوكية Behavioral Patterns
# نماذج تصميم هيكلية Structural Patterns
يتم من خلالها وصف استخدام مبادئ توزيع الصلاحيات (التفويض) والتجميع والاستشارة. لمزيد من المعلومات حول البرمجة غرضية التوجه راجع الترابط، الالتصاق، الوراثة، وتعددية الأِشكال. تصنيف آخر قدم ملاحظات حول نماذج تصميم بنيوية قد تطبق في المستوى البنيوي من التصميم مثال ذلك نمط نمط-عرض-متحكم.

### نماذج إنشائية

### [[نماذج التصميم الهيكلية]]

### [[نماذج التصميم السلوكية]]

### [[نماذج التصميم المتزامنة]]

## مراجع

تصنيف:تطوير البرمجيات
تصنيف:علم الحاسوب
تصنيف:نماذج تصميم البرمجيات
تصنيف:هندسة البرمجيات