نماذج التصميم (هندسة البرمجيات)
تعتبر نماذج التصميم (من الإنكليزيّة: Design Patterns) فرعا مهمّا من فروع وعلوم هندسة البرمجيات رغم أنتقاد البعض له. تهدف نماذج التصميم إلى الاستخدام المتكرر لحلول وضعت لمشاكل تعتبر في حد ذاتها متكررة أو متواجدة بكثرة في عملية تصميم البرمجيات. لا تنطبق هذه النظرية على تصميم البرمجيات فقط، بل تتعدداه إلى عدة علوم أخرى مثل هندسة المباني وهندسة الإلكترونيات وحتّى الطبخ.
من الأخطاء المنتشرة اعتبار نماذج التصميم حلولًا كاملة أو جاهزة للاستخدام مباشرة، فهي لا تغدو أن تكون إلا نموذجا كما يدل اسمها يحتاج للتكييف والتحديد أكثر لكي يواجه مشكلة محددة. أغلب نماذج التصميم تعتمد على التوجه الكائني في البرمجة. لذلك نجدها تضع تصوراً قائم على التفاعلات والعلاقات الممكنة بين مختلف الفئات المكونة للبرنامج.
الفكرة من وراء نماذح البرمجة
لنقرب الفكرة إلى ذهن القارئ, علينا أن نربط الموضوع بمثال حي من الحياة اليومية. تخيل أنك تقود سيارتك في مكان منعزل ولأول مرة وفجأة اختلت سيطرتك على السيارة بسبب وجود عطل في الاطار. لأول مرة في حياتك تجد أنك بحاجة إلى تغيير الاطار مع أنك لم تعمل ذلك من قبل (لنفترض أنك فتاة شقراء تعودت على تلقي المساعدات من أصحاب الشهامة). سوف تبدأ بالتفكير بجميع الحلول المتاحة أمامك. عادة ما كنت ترى الناس يقومون برفع السيارة فتفعل نفس الشيء, ثم انك بحاجة إلى فصل البراغي, يا إلهي!!! انها مشدودة بشكل قوي وأنا لا أستطيع السيطرة على العجل لأنه في الهواء وكلما أحاول دار العجل, إذا علي أن انزل السيارة أولا وأفصل البراغي والسيارة على الأرض... وهكذا. تعلمك من هذا الدرس يجعل خطوات إصلاح العجلة اسرع وما برمجة الحاسوب ببعيد عن هذا المثال. دائما ما نواجه مشاكل في البرمجة سبق وأن تعرضنا لها مرارا فنحاول تطبيق الحلول السابقة عليها واعادة استخدام هذه الاساليب مع اعادة تعديلها بما يتوافق والمشكلة الراهنة...
تاريخ نماذج التصميم
ورد مصطلح نماذج (Patterns) أول مرة على لسان كريستوفر آلكسندر، وأوّل من أسقط المصطلح على هندسة البرمجيّات كان وارد كونينغهام.
في الحقيقة، لم تحظى نماذج التصميم بالشعبيّة إلاّ بعد نشر كتاب Design Patterns. Elements of reusable code سنة 1994. حدث في نفس السنة تنظيم أوّل مؤتمر مخصّص لمناقشة نماذج التصميم.
المكونات الرئيسية لقوالب التصميم
كريستوفر ألكسندر كتب عن قوالب التصميم: "كل قالب يصف مشكلة متكررة الحدوث, مع تقديم لفكرة علاج أو خوارزمية يمكن تطبيقها لملايين المرات دون ان تجد تشابه تام بين الحلول" طبعا نحن نتحدث عن أمراض برمجية وليس عن الانفلونزا!! هناك أربع مكونات رئيسية لقوالب التصميم:
- الاسم : الاسم يختزل عليك ذكر المشكلة وعلاجها والنتائج المترتبة على تطبيق القالب, تصور!! لكن قد يكون أحيانا ايجاد اسم ملائم أكثر صعوبة من ايجاد حل للمشكلة. لتقريب الفكرة, تذكر عندما كنت مبتدءً في البرمجة وبدأت بعمل ادخال تعديلات على برنامج زميلك ثم فوجئت بالمتغير "س" أو "ص" أمامك, معبر جدا!!
- المشكلة : وصف للمشكلة ومتى تقوم بتطبيق القالب. قد تقوم بشرح لمشاكل معينة أو هيكلية التصنيف (أو الصنف) "class" وقد تقوم بتقديم عدد من الأغراض الواجب توافرها قبل الشروع بتطبيق الحل.
- الحل : شرح العناصر اللازمة للحل وكيفية ربطها وتعاونها. لا يقوم الحل بتقديم شرح تفصيلي لحل المشكلة وإنما يقوم بإعطاء حل تجريدي أو فكرة أولية للحل. تذكر أنه من الصعب أن تجد شخصان يقومان بالبرمجة بالطريقة ذاتها.
- النتائج والعواقب : النتائج المترتبة عند تطبيق القالب وهي الصوت الخفي من المكونات. تبحث بشكل عام استهلاك المكونات وتستخدم لتقويم القالب أونموذج التصميم.
أنماط نماذج التصميم
حسب GoF تصنف نماذج التصميم إلى 3 أنماط أو مجموعات:
- نماذج التصميم الإنشائية أو الخلقية Creational Patterns
- نماذج التصميم السلوكية Behavioral Patterns
- نماذج التصميم الهيكلية Structural Patterns
تصنيفات قوالب التصميم
هناك ثلاثة تصنيفات لقوالب التصميم:
- الانشائية (Creational): تعنى هذه القوالب بعمليات الإنشاء.من الممكن ان يتم تصنيفها إلى قسمين: إنشاء التصنيفات (classes) وإنشاء أبناء التصنيفات (objects). من الأغلب أن تستخدم التصنيفات مبدأ الوراثة (inheritance) بينما تستخدم أبناء التصنيفات مبدأ التفويض (Delegation).
- البنائية (Structural): وتعنى بتركيب التصنيفات أو أبناء التصنيفات.
- التعاملية (Behavioral): تعنى بعمليات الاتصال بين الأبناء
ملف:Icon-gears.png | هذه بذرة مقالة عن موضوع تقني تحتاج للنمو والتحسين، فساهم في إثرائها بالمشاركة في تحريرها. |
af:Ontwerpspatroon (rekenaarwetenskap) als:Entwurfsmuster ast:Patrón de diseñu bg:Шаблони за дизайн bs:Računarska dizajn šema ca:Patró de disseny (informàtica) cs:Návrhový vzor da:Design pattern de:Entwurfsmuster el:Σχεδιαστικά πρότυπα Design pattern (computer science)]] es:Patrón de diseño fa:الگوی طراحی (دانش رایانه) fi:Suunnittelumalli fr:Patron de conception gl:Patrón de deseño he:תבנית עיצוב hi:डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) id:Pola desain it:Design pattern ja:デザインパターン (ソフトウェア) ko:디자인 패턴 lt:Projektavimo pavyzdys ml:ഡിസൈൻ പാറ്റേൺ (കമ്പ്യൂട്ടർ ശാസ്ത്രം) nl:Ontwerppatroon no:Designmønster pl:Wzorzec projektowy (informatyka) pt:Padrão de projeto de software ru:Шаблон проектирования sh:Dizajn shema simple:Design pattern sr:Пројектни узорци sv:Designmönster ta:வடிவமைப்புப் பாங்கு th:ดีไซน์แพตเทิร์น tr:Tasarım örüntüleri uk:Шаблони проектування програмного забезпечення vi:Mẫu thiết kế (khoa học máy tính) zh:设计模式 (计算机)