المحتوى هنا ينقصه الاستشهاد بمصادر، أي معلومات غير موثقة يمكن التشكيك بها وإزالتها.

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

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث
Question book-new.svg
المحتوى هنا ينقصه الاستشهاد بمصادر. يرجى إيراد مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (مارس 2016)

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

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

الفكرة من وراء نماذح البرمجة[عدل]

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

تاريخ نماذج التصميم[عدل]

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

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

المكونات الرئيسية لقوالب التصميم[عدل]

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

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

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

أنماط نماذج التصميم[عدل]

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

  1. نماذج تصميم الإنشائية Creational Patterns
  2. نماذج تصميم السلوكية Behavioral Patterns
  3. نماذج تصميم هيكلية Structural Patterns

نماذج إنشائية[عدل]

الاسم بالإنجليزية الوصف
Abstract factory يوفر واجهة لإنشاء عائلات من أغراض مستقلة أو مرتبطة مع بعضها من دون التصريح عن الصف الذي تم استخدامه.
Builder يفصل عملية بناء غرض مركب عن عملية تمثيل هذا الغرض ويسمح لعملية البناء الواحدة بأن تعطي أكثر من تمثيل.
Factory method يوفر واجهة لإنشاء غرض وحيد تقوم الصفوف الفرعية في اختيار من اي صف سينشأ هذا الغرض.
Lazy initialization يتم فيه تأجيل إنشاء الغرض أو القيام بحساب ما أو عملية ما الى وقت لاحق بحيث تكون تكلفة هذه العملية كبيرة لذا يتم تأجيلها إلى ان يصبح هناك حاجة لها.
Multiton pattern يضمن أن هناك غرض واحد فقط تم انشاؤه من الصف الهدف ويضمن تمكن كل الصفوف الأخرى من الوصول الى هذا الغرض دون الحاجة لإنشاء غرض جديد.
Object pool pattern يساعد في تجنب حجز و تحرير الموارد المكلف عن طريق تدوير الأغراض التي لم يعد هناك حاجة لاستخدامها.
Prototype pattern يصنع غرض واحد فقط من الصف وعند الحاجة لأغراض أخرى فيتم نسخ الغرض الذي تم انشاؤوه في المرة الأولى
Resource Acquisition Is Initialization يضمن أن الموارد المحجوزة قد تم تحريرها عن طريق ربط هذه الموارد مع دورة حياة الغرض
Singleton pattern يضمن أن الصف قد تم إنشاء غرض واحد منه فقط ويؤمن وصول عام من قبل كل الأغراض الباقية الى هذا الغرض