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

رفعتلو ضغطو