UML: مخططات حالات الاستخدام والسيناريوهات

علاقتا Include و Extend

18 دقيقة الدرس 4 من 10

علاقتا Include و Extend

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

تذكير بالتدوين: تُرسم كلتا العلاقتين على شكل أسهم متقطعة مُعلَّمة بالنمط بين علامتي «». اتجاه السهم هو مفتاح التمييز بينهما — وهو الجانب الذي يُخطئه معظم المحللين في البداية.

علاقة <<include>>

استخدم <<include>> عندما تستدعي حالة استخدام أخرى دائماً وبصورة غير مشروطة. فكّر فيها على أنها استدعاء دالة فرعية: في كل مرة تُنفَّذ فيها حالة الاستخدام الأساسية، تُنفَّذ الحالة المضمَّنة أيضاً. يشير السهم من حالة الاستخدام الأساسية إلى الحالة المضمَّنة — أي "أنا أستدعيك دائماً".

المحفز الكلاسيكي: تلاحظ أن حالتَي استخدام أو أكثر تتشاركان كتلة كبيرة من الخطوات المتطابقة. بدلاً من تكرار هذا المنطق، تستخرجه كحالة استخدام مستقلة ثم تُضمِّنها عبر <<include>> في كلا المستدعيَين.

مثال — صيدلية إلكترونية: تستلزم كلٌّ من تقديم طلب وتجديد وصفة طبية مصادقة العميل. تُستخرج عملية المصادقة كحالة استخدام مستقلة وتُضمَّن في كلتيهما.

include relationship in an Online Pharmacy system Online Pharmacy System Customer Pharmacist Place Order Renew Prescription Authenticate Customer Dispense Medication «include» «include»
تستدعي كلٌّ من Place Order و Renew Prescription دائماً حالة Authenticate Customer عبر <<include>>.

لاحظ الأسهم: كلتا حالتَي الاستخدام الأساسيتين تشيران نحو Authenticate Customer. هذه هي القاعدة المحددة — تشير حالة الاستخدام الأساسية نحو الحالة المضمَّنة. إن رسمته بالاتجاه المعاكس، يُقرأ على أنه الحالة المضمَّنة هي التي تستدعي الحالة الأساسية، وهو خطأ.

علاقة <<extend>>

استخدم <<extend>> عندما تُضيف حالة استخدام سلوكاً اختيارياً أو مشروطاً إلى أخرى. تنفَّذ الامتداد فقط في ظروف معينة — فهي تنويع وليست روتيناً فرعياً مضموناً. يشير السهم من حالة الاستخدام الموسِّعة إلى حالة الاستخدام الأساسية، وهو عكس <<include>>. اقرأها هكذا: "أنا أوسِّعك عند تحقق شرط معين".

المحفز الكلاسيكي: لديك تدفق أساسي يعمل بكفاءة تامة، لكن ثمة مسار اختياري يسلكه بعض المستخدمين فقط — أو لا ينطلق إلا في ظروف محددة. نمذجته كـ<<extend>> تُبقي حالة الاستخدام الأساسية نظيفة وواضحة.

مثال — حجز موعد في عيادة: حالة الاستخدام الأساسية هي حجز موعد. في ظروف معينة (مثلاً اختار المريض طبيباً محدداً أو رُفع علم حالة مزمنة)، قد يُضيف النظام اختيارياً طلب خطاب إحالة أو إخطار طبيب الأسرة.

نقاط الامتداد: رسمياً، تُعلن حالة الاستخدام التي تقبل الامتدادات عن نقطة امتداد واحدة أو أكثر — مواضع محددة في تدفقها يمكن للامتداد أن يُدرج نفسه فيها. في السيناريوهات النصية تكتبها كقائمة نقطية؛ وفي المخططات يُضاف عادةً ملاحظة صغيرة مرتبطة بشكل البيضاوي لحالة الاستخدام الأساسية. كثير من الفرق تُهمل تسميات نقاط الامتداد في المخططات السريعة دون أن تفقد المعنى — لكن أدرجها في المواصفات الرسمية.
extend relationship in a Clinic Booking system Clinic Appointment System Patient Book Appointment ext. point: chronic condition Request Referral Letter Notify GP (optional) «extend» «extend» condition: specialist referral needed at ext. point: chronic condition condition: patient opts in to GP alerts
تشير حالات الاستخدام الموسِّعة نحو حالة الاستخدام الأساسية؛ تشرح الملاحظات الشرطَ الذي يُطلق كل امتداد.

مقارنة جنباً إلى جنب

يُلخّص الجدول أدناه الفرق الجوهري. احفظه قبل مراجعتك التالية للمخطط.

العلاقة | اتجاه السهم | متى تُنفَّذ | القياس ----------------|--------------------------|-----------------|--------------------------- <<include>> | الأساسية ← المضمَّنة | دائماً | استدعاء دالة / روتين فرعي <<extend>> | الموسِّعة ← الأساسية | بشرط | مكوِّن إضافي اختياري
الخطأ الأكثر شيوعاً: رسم كلا السهمين في الاتجاه نفسه. تذكر — <<include>> و<<extend>> يشيران في اتجاهين متعاكسين. إن كانت جميع أسهمك المتقطعة تشير في الاتجاه ذاته، فثمة خطأ ما.

مثال مُدمَج: مكتبة إلكترونية

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

Combined include and extend relationships in a Library system Library Management System Member Librarian Search Catalogue Borrow Book Return Book Log Search Query Verify Membership Apply Fine Send SMS Reminder «include» «include» «extend» «extend» «include» (دائماً) «extend» (بشرط)
نظام مكتبة يجمع <<include>> (أزرق، يُنفَّذ دائماً) و<<extend>> (كهرماني، يُنفَّذ بشرط).

دليل اتخاذ القرار العملي

عندما تكون أمام السبورة البيضاء وغير متأكد من أي العلاقتين تستخدم، اطرح على نفسك سؤالين:

  1. هل السلوك مطلوب في كل مرة بلا استثناء؟ إن كانت الإجابة نعم → <<include>>. حالة الاستخدام الأساسية غير مكتملة بدونه.
  2. هل هو اختياري، نادر، أو مشروط؟ إن كانت الإجابة نعم → <<extend>>. حالة الاستخدام الأساسية تعمل بشكل مثالي بدونه.

اختبار ثانوي: هل يمكنك حذف حالة الاستخدام المرشحة دون إفساد التدفق الأساسي؟ إن نعم → على الأرجح <<extend>>. إن انهار التدفق الأساسي بدونها → <<include>> بالتأكيد.

ابقَ موجزاً. كل سهم <<include>> أو <<extend>> تُضيفه هو التزام بتوثيق العلاقة في السيناريوهات المكتوبة. لا تُنمذَج المسارات الاختيارية إلا إن كانت ذات أهمية حقيقية للعمل. الإفراط في استخدام <<extend>> لكل تنويع طفيف ينتج مخططات يصعب صيانتها.

ملخص

  • <<include>>: تُنفَّذ دائماً؛ يشير السهم من الأساسية إلى المضمَّنة؛ تُستخدم لاستخراج السلوك الإلزامي المشترك.
  • <<extend>>: مشروطة أو اختيارية؛ يشير السهم من الموسِّعة إلى الأساسية؛ تُستخدم للتدفقات الإضافية أو الاستثنائية.
  • كلتاهما تستخدمان أسهماً متقطعة مع نمط بين علامتي « » — الاتجاه فقط هو ما يختلف.
  • أعلن عن نقطة امتداد على شكل البيضاوي لحالة الاستخدام الأساسية كلما احتاج شرط الإطلاق إلى توصيل واضح.