الخطوات السوية لإنتاج برامج قوية - لغة UML (الجزء 1)

تعد هذه المقالة الجزء الثاني من السلسلة المكتوبة المسماة "الخطوات السوية، لإنتاج برامج قوية" التي تعنى بهندسة البرمجيات Software Engineering ولغة UML المستخدمة لنمذجة الأنظمة يمكنك قراءة المقالة الأولى عبر الرابط التالي: الخطوات السوية لإنتاج برامج قوية (مدخل إلى Software Engineering)
حينما أكمل المبرمج اللبيب حديثه عن أهمية مرحلة التحليل في هندسة البرمجيات، وذكر سوء عاقبة غياب التحليل أو الاستناد إلى تحليل سيء Bad Design في مختلف الجوانب: المال والوقت والسمعة وغيرها. اقتنع المبرمج العجول، ثم قال مستفسرا:
إن كان لا بد من مرحلة التحليل يا صديقي، فبماذا تنصحني؟ وهل علي تعلم تقنيات معينة لضمان سلامة التحليل؟ وهل هنالك وسائل تساعدنا في هذه المرحلة؟
لاذ المبرمج اللبيب بالصمت برهة ثم أجاب بانبساط:
مجرد طرحك لهذه الأسئلة دليل على استيعابك لأهمية مرحلة التحليل في نجاح مشاريع IT، لذلك ركز معي وبإذن الله ستجد أجوبة شافية لأسئلتك الآنفة.
سأفترض مسبقا أنك مثل الكثير من مطوري البرمجيات، تشتغل على تطبيقات سطح المكتب Desktop applications أو على أنظمة لشركات ومؤسسات Entreprise Systems، وتقوم بالانكباب على مشاريع تستنزف جهدك ووقتك وصبرك عبر صعوباتها وتعقيداتها...
ضحك المبرمج العجول قائلا:
لا تستغرب من تعقيدات الأنظمة، فطريق البرمجة ليس مفروشا بالورود... وإلا لسلكه العاشقون !
ابتسم المبرمج اللبيب ثم استطرد:
وهل في ذلك شك! لكن أبشر  فهنالك لغة إن أنت أتقنتها أو على الأقل فهمتها وعرفت كيف تستخدمها بشكل مضبوط، ستعرف كيف تدير تعقيدات المشاريع Projects Complexity.
و قبل أن أحدثك عن هذه اللغة أريد أن أصفعك ببعض المعلومات لتفتح عينيك جيدا، اعلم أن نسبة قليلة من مشاريع IT هي التي تنجح، والنسبة الأكبر من هذه المشاريع إما يكتب لها الموت قبل الاكتمال، أو يتم تسليمها لأصحابها منقوصة، مشوبة بعيوب وأخطاء أو غير مرضية.
هذه المشاريع قد تكون اشتغلت عليها مؤسسات بحيالها، أو مبرمجون متمرسون، لكن مع ذلك كتب لها الفشل، بسبب غياب فن إدارة المشاريع Project Management، و سوء تقدير تفاصيل النظام حق قدرها، وعدم الاستناد على تحليل سليم يخول فهم النظام فهما شاملا قبل كتابة أول سطر من الكود.
ثم ضع في بالك أن هنالك فرقا بين التحليل Analysis وبين التصميم Design، فالأول (التحليل) هو ما نستهل به عملية إنشاء البرمجيات، والغرض منه هو فهم المشكلة Understanding the problem واستيعابها بشكل سليم، أما التصميم Design فهو يأتي بعد مرحلة التحليل ويعني تهيئة وصياغة الحل المناسب لمشكلة المشروع.
وتذكر جيدا أن هندسة البرمجيات ماهي إلا نشاط تمثيلي أو نمذجي Modeling Activity لأي مشكلة نريد حلها، لأنه لا سبيل إلى التعامل مع تعقيدات الأنظمة إلا عبر نمذجتها (تصور النظام على شكل نماذج وتمثيلات).
وللقيام بأي نشاط نمذجي وتمثيلي لا بد من لغات مخصصة لذلك، وأشهر اللغات المخصصة لهذا الغرض هي لغة UML، وهي اختصار ل Unified Modeling Language، ويمكننا ترجمتها إلى اللغة العربية كالتالي لغة النمذجة الموحدة.
UML هي لغة لنمذجة وتحليل وتصميم المشاريع، وسميت لغة لأنها تؤدي تقريبا نفس الدور المنوط باللغات التي نعرفها، مثلا حينما نتحدث باللغة العربية فنحن نقوم بوصف أشياء وأشخاص وأحداث عبر استخدام الكلمات والإشارات. كذلك UML فنحن نستعملها كلغة لوصف وتمثيل المشاريع والأنظمة عبر استعمال مجموعة من المخططتن Diagrams والأشكال Notations.
على سبيل المثال إذا أردنا أن نصف الهاتف بلغتنا العربية سنقول عنه:
الهاتف هو جهاز الكتروني صغير بحجم الكف، يتكون من أزرار وشاشة، نستخدمه لإجراء واستقبال الاتصالات الصوتية، وكذلك تبادل الرسائل المصورة والنصية.
هذا التعريف أو الوصف لو دققنا فيه جيدا سنلاحظ أنه يركز على أمرين أساسيين:
1. خصائص الجهاز Properties (صغير، بحجم الكف، مكون من أزرار وشاشة)
2. وظائف الجهاز Functionality (إجراء المكالمات، استقبال المكالمات، بعث الرسائل، استقبال الرسائل)
وقد نضيف إلى هذين القسمين قسما ثالثا لا نتلفظ به لكننا نقوم به وهو القسم السلوكي Behavior، ويعني كيفية القيام بتلك الوظائف التي يوفرها الهاتف، وكمثال بسيط على سلوكيات الجهاز، نستطيع أن نقول: لكي نجري اتصال نقوم بإدخال رقم المخاطب ثم نضغط على زر اتصال، ونستطيع كذلك التمثيل عليه ب: لكي نبعث رسالة ندخل إلى قائمة الهاتف، ونضغط على أيقونة الرسائل، ثم نقوم بكتابة الرسالة ورقم هاتف المرسل إليه، وبعد ذلك نضغط على زر إرسال.
هذه كلها من السلوكيات التي نقوم بها من أجل الاستفادة من وظائف الهاتف.
هكذا نتكلم باللغات البشرية، فألفاظنا لا تحيد عن هذه الأقسام الثلاثة: الخصائص، الوظائف، السلوكيات، طبعا مع إضافة خصائص اللغة من أساليب بيانية وبلاغية وغيرها.
نفس الكلام ينطبق على لغة UML، نعم هي لغة والدليل أننا نستخدمها من أجل إجراء الثلاثية السابقة، لكن من أجل توصيف وتمثيل ونمذجة وتحليل الأنظمة والمشاريع عبر مجموعة من القواعد والرسومات والأشكال التي توفرها لنا هذه اللغة الرائعة من أجل الحصول على تحليل دقيق للمشروع، فعلى سبيل المثال نستطيع توصيف جهاز الهاتف بلغة UML على الشكل التالي:

الشكل 1: مثال على توصيف الهاتف بلغة UML
الشكل أعلاه يمثل مخططا من مخططات لغة UML يسمى مخطط الفئات Class diagram، وهو كما تلاحظون يعرض اسم الفئة المتناولة في التمثيل كعنوان للوحدة (في المثال هو Mobile)؛ ثم يعرض بعدها خصائص الفئة مع تحديد نوع بيانات كل خصيصة (طول وعرض ولون ونوع الهاتف)، وفي الختام وظائفها (إجراء واستقبال المكالمات والرسائل).
تتيح لنا لغة UML استخدام مجموعة من المخططات Diagrams المتنوعة حسب مراحل بناء المشروع، فهنالك مخططات نستخدمها أثناء جمع المتطلبات واستفسار العميل، وهنالك مخططات نستخدمها أثناء مرحلة تطوير المشروع وهنالك مخططات أخرى يختلف استخدامها مع اختلاف المرحلة التي نصل إليها في إنتاج المشروع.
أحيانا نحتاج إلى استخدام العديد من هذه المخططات وفي أحايين أخرى نجد أنفسنا غير ملزمين إلا ببعضها، والأمر الوحيد الذي يحدد لنا المخططات التي سنحتاجها هو تعقيد وصعوبة المشروع Project Complexity، فمثلا حينما يكون المشروع مفهوما وبسيطا من الأول كإنشاء برنامج لعرض عواصم البلدان، فعلينا ألا نبالغ في استخدام النماذج والإفراط في التحليل والدراسة، بينما الحال يختلف لما تزداد تعقيدات وتشبيكات النظام، فحينما يتعلق الأمر ببرنامج لحساب رواتب الموظفين بناء على عدد ساعات عملهم مع الأخذ بعين الاعتبار أوقات الغياب ودقائق التأخير وأيام الإجازات وغيرها من قيود، فنحن هنا ملزمون بالتريث واستخدام مخططات عديدة.
من بين المخططات المهمة التي نحتاجها في لغة UML، نذكر ما يلي:

  • مخطط حالة الاستخدام Use Case Diagram: هو أول نموذج نبدأ به عملية التحليل غالبا، ونستعمله أثناء جمع المتطلبات من لدن المستخدم، ويلزمنا في هذه المرحلة أن نتحدث مع المستخدم بلغة يفهمها وأن ننأى بأنفسنا عن المصطلحات البرمجية، لأن نموذج Use Case يعبر عن النظام من وجهة نظر المستخدم. ويستند هذا المخطط على شكلين رئيسيين وهما الممثل Actor وحالة الاستخدام Use case، ثم العلاقة بينهما. الممثل هو أي شخص أو أي شيء يتعامل مع النظام، بمعنى أنه ممكن أن يقدم أو يستلم شيئا من النظام، ويتم ترميز الممثل في UML بواسطة شكل شخص مرسوم كما يلي:
الشكل 2: توصيف الممثل Actor Notation
غالبا ما يعبر الممثل Actor عن شخص حقيقي يتفاعل مع النظام كالمستخدم الذي يستعمله، لكنه أحيانا ممكن أن يمثل نظاما آخر يتفاعل مع النظام المدروس، مثلا لو عندنا تطبيق معين يستقبل بيانات من تطبيق آخر، فهذا التطبيق الآخر يعتبر ممثلا Actor بالنسبة للتطبيق الأول، وللتوضيح: لنفرض أن لدينا تطبيق للآذان يستقبل آخر أوقات الآذان في مختلف البلاد من ويب سيرڤيس Web service، فهذا الويب سيرڤيس يعتبر ممثلا Actor في نظام تطبيق الآذان.

أما حالة الاستخدام Use Case فهي كل عملية ممكن أن يقوم بها الممثل في النظام، ويتم ترميزها بشلك بيضوي كما تعرض الصورة أدناه:
الشكل 3: توصيف حالات الاستخدام Use case Notation
وهذا مثال على كيفية استخدام مخطط حالة الاستخدام Use Case Diagram في نظام معلوماتي يسمح للطلبة بالولوج إليه من أجل مشاهدة درجاتهم، ومن أجل تحميل الدروس:

الشكل 4: مخطط Use case لنظام يتيح مشاهدة الدرجات وتحميل الدروس للطلاب

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

دام لكم البشر والفرح والسلام عليكم.

هناك 13 تعليقًا:

  1. جزاك الله خيرا وننتظر المزيد

    ردحذف
  2. استمتعت كثيرا بالمقالة انت صاحب اسلوب شيق وجميل وبسيط في الشرح والتوصيف .. جزاك الله خيرا .. ولكن لدى سؤال هل لغة ال UML تستخدم ايضا في تحليل مشاريع الويب كالمواقع وخلافه ؟؟

    ردحذف
    الردود
    1. نعم صديقي : تستخدم في تحليل اي نظام تريد بناءه من الصفر .

      حذف
  3. الف شكر على الخدمات الرائعة التي تقدمها والله يجازيك على كل جهودك المبذولة

    ردحذف
  4. ما يعجبني فيك أن مقالاتك زيادة على المنفعة فهي ممتعة
    حقا أسلوب رائع واصل بارك الله فيك

    ردحذف
  5. جزاك الله خيرا ....................... وفقك الله

    ردحذف
  6. تسلم اخي على الشرح الرائع
    وننتظر باقي الدروس

    ونأمل شرح الدروس بالقناة

    ردحذف
  7. جزاك الله الف خير

    ردحذف
  8. والله يا استاذ انت احد رواد المعلوماتية في العرب ........احبك ف الله اتمنى ان ازورك بالمغرب اتمنى لقاءك

    ردحذف
  9. جزاك الله الف خير عندي تسال ماهو الفرق بين UML , SQL

    ردحذف
  10. زادك الله علما ونفعا للمسلمين

    ردحذف