مفهوم تصميم البرمجيات:
تصميم البرمجيات هو عملية تحويل متطلبات المستخدم إلى الشكل المناسب، مما يساعد المبرمج في كتابة كود البرنامج وتنفيذه، ولتقييم متطلبات المستخدم، يتم إنشاء مستند (SRS)، اختصار لـ (Software Requirement Specification)، وتعني مواصفات متطلبات البرمجيات، بينما بالنسبة لكتابة الكود وتنفيذه، هناك حاجة لمتطلبات أكثر تحديدًا وتفصيلاً في شروط البرامج، يمكن استخدام ناتج هذه العملية مباشرة لكتابة الكود في لغة البرمجة المناسبة.
تصميم البرمجيات هو الخطوة الأولى في دورة حياة تطوير البرمجيات التي تنقل التركيز من مجال المشكلة إلى مجال الحل، يحاول تحديد كيفية تلبية المتطلبات المذكورة في مستند (SRS).
مستويات تصميم البرمجيات:
ينتج عن تصميم البرامج ثلاثة مستويات من النتائج:
التصميم المعماري: التصميم المعماري هو أعلى نسخة مجردة من النظام، يحدد البرنامج كنظام به العديد من المكونات التي تتفاعل مع بعضها البعض، في هذا المستوى، يحصل المصممون على فكرة للحل المقترح.
تصميم عالي المستوى: يخرق التصميم عالي المستوى مفهوم “الكيان الواحد – المكون المتعدد” للتصميم المعماري، إذ أنه يعرض الأنظمة الفرعية والوحدات ويصور تفاعلها مع بعضها البعض بشكل أقل تجريدًا، ويركز التصميم عالي المستوى على كيفية تنفيذ النظام مع جميع مكوناته في شكل وحدات، يتعرف على الهيكل المعياري لكل نظام فرعي وعلاقتهم وتفاعلهم مع بعضه البعض.
التصميم التفصيلي: يتعامل التصميم التفصيلي مع جزء التنفيذ لما كان يُنظر إليه على أنه نظام وأنظمته الفرعية في التصميمين السابقين، والتصميم التفصيلي أكثر تفصيلاً تجاه الوحدات وتطبيقاتها، يحدد الهيكل المنطقي لكل وحدة وواجهات للتواصل مع الوحدات الأخرى.
مفاهيم مهمة في تصميم البرمجيات:
النمذجة Modularization:
النمذجة هي تقنية لتقسيم نظام البرمجي إلى عدة وحدات منفصلة ومستقلة، والتي من المتوقع أن تكون قادرة على تنفيذ المهمة (المهام) بشكل مستقل، قد تعمل هذه الوحدات كبنية أساسية للبرنامج بأكمله، يميل المصممون إلى تصميم وحدات بحيث يمكن تنفيذها أو ترجمتها بشكل منفصل ومستقل، يتبع التصميم المعياري عن غير قصد قواعد استراتيجية لحل المشكلات، مثل “فرق تسد”، وذلك بسبب وجود العديد من الفوائد الأخرى المرتبطة بالتصميم المعياري للبرنامج، ومن فوائد استخدام النمذجة:
- المكونات الأصغر أسهل في الصيانة.
- يمكن تقسيم البرنامج على أساس الجوانب الوظيفية.
- يمكن إدخال المستوى المطلوب من التجريد في البرنامج.
- يمكن إعادة استخدام المكونات عالية التماسك مرة أخرى.
- يمكن جعل التنفيذ المتزامن ممكنًا.
- مرغوب فيه من الناحية الأمنية.
التزامن Concurrency:
من المفترض أن يتم تنفيذ جميع البرامج بالتسلسل، من خلال التنفيذ المتسلسل، فإننا نعني أنه سيتم تنفيذ تعليمات الكود واحدة تلو الأخرى، مما يعني أن جزءًا واحدًا فقط من البرنامج يتم تنشيطه في أي وقت، لنفترض أن البرنامج يحتوي على وحدات متعددة، إذن يمكن العثور على وحدة فقط من جميع الوحدات نشطة في أي وقت من التنفيذ.
في تصميم البرامج، يتم تنفيذ التزامن عن طريق تقسيم البرنامج إلى عدة وحدات تنفيذ مستقلة، وتنفيذها بالتوازي، بمعنى آخر، يوفر التزامن القدرة للبرنامج على تنفيذ أكثر من جزء من الكود بالتوازي مع بعضها البعض، من الضروري للمبرمجين والمصممين التعرف على تلك الوحدات، والتي يمكن تنفيذها بالتوازي.
مثال: ميزة التدقيق الإملائي في معالج الكلمات هي وحدة من البرنامج، والتي تعمل جنبًا إلى جنب مع معالج الكلمات نفسه.
الارتباط والتماسك Coupling and Cohesion:
عندما يتم تقسيم البرنامج إلى وحدات، يتم تقسيم مهامه إلى عدة وحدات بناءً على بعض الخصائص، كما نعلم، الوحدات النمطية (modules) هي مجموعة من التعليمات التي تم وضعها معًا من أجل تحقيق بعض المهام، على الرغم من أنها تعتبر كيانًا واحدًا ولكن قد تشير إلى بعضها البعض للعمل معًا، هناك مقاييس يمكن من خلالها قياس جودة تصميم الوحدات وتفاعلها فيما بينها، تسمى هذه التدابير الارتباط والتماسك.
التماسك Cohesion:
التماسك هو مقياس يحدد درجة الاعتماد الداخلي داخل عناصر الوحدة، كلما زاد التماسك، كان تصميم البرنامج أفضل، وهناك سبعة أنواع من التماسك وهي:
التماسك العرضي: هو تماسك غير مخطط له وعشوائي، والذي قد يكون نتيجة تقسيم البرنامج إلى وحدات من أجل النمذجة، نظرًا لأنه غير مخطط له، فقد يؤدي إلى إرباك المبرمجين وهو غير مقبول بشكل عام.
التماسك المنطقي: عندما يتم تجميع العناصر المصنفة منطقيًا في وحدة.
التماسك الزمني: عندما يتم تنظيم عناصر الوحدة بحيث تتم معالجتها في نقطة زمنية مماثلة.
التماسك الإجرائي: عندما يتم تجميع عناصر الوحدة معًا، والتي يتم تنفيذها بالتسلسل من أجل أداء مهمة واحدة.
التماسك التواصلي: عندما يتم تجميع عناصر الوحدة معًا، والتي يتم تنفيذها بشكل متسلسل وتعمل على نفس البيانات (المعلومات).
التماسك المتسلسل: عندما يتم تجميع عناصر الوحدة؛ لأن مخرجات أحد العناصر يعمل كمدخلات لعنصر آخر وما إلى ذلك.
التماسك الوظيفي: يعتبر أعلى درجة من التماسك، وهو مطلوب للغاية، حيث يتم تجميع عناصر الوحدة في التماسك الوظيفي؛ لأنها تساهم جميعها في وظيفة واحدة محددة جيدًا، ويمكن أيضًا إعادة استخدامها.
الارتباط Coupling:
الارتباط هو مقياس يحدد مستوى الاعتماد المتبادل بين وحدات البرنامج، يطلق على أي مستوى تتداخل للوحدات وتفاعلها مع بعضها البعض، كلما كان الارتباط أقل، كان البرنامج أفضل، هناك خمسة مستويات من الاقتران وهي:
ارتباط المحتوى: عندما تتمكن الوحدة من الوصول المباشرة إلى محتوى وحدة أخرى أو تعديلها أو الرجوع إليها.
ارتباط مشترك: عندما يكون للوحدات المتعددة حق الوصول إلى بعض البيانات العالمية (أي المرئية على مستوى البرنامج) وقرأتها وتعديلها.
ارتباط التحكم: تسمى وحدتان بـ “التحكم المرتبط” إذا قررت إحداهما وظيفة الوحدة الأخرى أو غيرت تدفق تنفيذها.
ارتباط الطوابع: عندما تشترك وحدات متعددة في هياكل البيانات وتعمل على جزء مختلف منه.
ارتباط البيانات: ويحدث عندما تتفاعل وحدتان مع بعضهما البعض عن طريق تمرير البيانات (كـ معامل “parameter”)، إذا مرّرت أي وحدة بهيكل البيانات كمعامل، فيجب أن تستخدم الوحدة المستقبلة جميع مكوناتها.