UML: مخططات الفئات والكائنات

استخلاص الفئات من المتطلبات

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

استخلاص الفئات من المتطلبات

أمامك وثيقة متطلبات معتمدة. مهمتك الآن تحويل ذلك النص إلى الهيكل الأوّلي لمخطط الفئات — أي تحديد الكيانات التي يحتاج النظام إلى تخزينها وإدارتها. تُسمّى هذه العملية اكتشاف فئات النطاق، وتقوم على أسلوبين متكاملين: تحليل الأسماء وبطاقات CRC.

الخطوة الأولى — تحليل الأسماء

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

"يُسجّل المريض في النظام باستخدام اسمه وتاريخ ميلاده وبيانات التواصل. ثم يبحث عن موعد متاح مع طبيب مختار في قسم عيادة محدد. عند اختيار الموعد يُنشئ النظام حجزًا ويُرسل تأكيدًا للمريض."

تسفر عملية تحديد الأسماء عن: مريض، نظام، اسم، تاريخ ميلاد، بيانات التواصل، موعد متاح، طبيب، قسم العيادة، حجز، تأكيد.

صفّ القائمة باستخدام أربعة أسئلة معيارية:

  1. هل هو ذو صلة بالنطاق؟نظام يشير إلى البرنامج ذاته؛ احذفه.
  2. هل هو سمة تابعة لكيان آخر؟اسم وتاريخ الميلاد وبيانات التواصل خصائص للكيان Patient؛ حوّلها إلى سمات.
  3. هل هو مخرج وليس كيانًا مُخزَّنًا؟تأكيد إشعار يُرسَل للخارج؛ ليس فئة في الغالب ما لم تُحتفظ بسجل له.
  4. هل هو جهة خارجية؟ — الجهات الخارجية تظهر في مخططات حالات الاستخدام لا في مخططات الفئات.

بعد تطبيق هذه المعايير يبقى خمسة مرشحين راسخين: Patient، AppointmentSlot، Doctor، Department، Booking. هذه قائمة فئاتك الأولية.

ابدأ بشبكة واسعة ثم صفّ. من الأسلم جمع أسماء زائدة وحذف المكرر لاحقًا، بدلًا من إغفال فئة في مرحلة مبكرة. احتفظ بـقائمة المحذوفات مع الأسباب — أصحاب المصلحة قد يطعنون في قراراتك، والتوثيق يبني الثقة.

الخطوة الثانية — بطاقات CRC

بطاقة الفئة-المسؤولية-المتعاون (CRC) هي بطاقة فهرس 3×5 إنش (أو جدول على لوح أبيض) مقسّمة إلى ثلاثة أقسام: اسم الفئة في الأعلى، عمود أيسر للمسؤوليات — ما تعرفه الفئة أو تفعله — وعمود أيمن للمتعاونين — الفئات الأخرى التي تحتاج مساعدتها. ابتكر هذه البطاقات كنت بيك وورد كانينغهام أداةً خفيفة تُشارك فيها خبراء المجال مباشرةً.

في ما يلي بطاقات CRC لنطاق العيادة:

CRC Cards for Clinic Booking Domain Patient Responsibilities Collaborators Maintain personal info Request appointment View booking history Booking AppointmentSlot Doctor Responsibilities Collaborators Maintain schedule Belong to department Manage availability AppointmentSlot Department Booking Responsibilities Collaborators Record date & time Track booking status Link patient to slot Patient AppointmentSlot AppointmentSlot Responsibilities Collaborators Store date/time/duration Know availability status Belong to a Doctor Doctor Booking Department Responsibilities Collaborators Hold name & location Group doctors by specialty Doctor
بطاقات CRC لخمس فئات رئيسية في نطاق نظام حجز العيادة.

لاحظ كيف يتتبّع عمود المتعاونين في كل بطاقة علاقة ضمنية: Booking تحتاج كلًا من Patient وAppointmentSlot؛ وAppointmentSlot تحتاج Doctor. هذه التعاونات ستصبح ارتباطات تُرسمها كخطوط في مخطط الفئات الكامل.

جلسات CRC ورش عمل جماعية، لا تمارين فردية. اجمع خبراء النطاق والمطورين والمحلل الرئيسي حول طاولة. سلّم كل شخص بطاقة فئة أو اثنتين واطلب منه لعب دور السيناريو — "أنا Booking؛ ماذا أحتاج منك يا AppointmentSlot؟" يكشف هذا التمثيل الدرامي بسرعة المسؤوليات المفقودة والتبعيات الخفية التي يفوتها التحليل النصي وحده.

تطبيق الأسلوبين معًا

في الممارسة الفعلية يُستخدَم تحليل الأسماء وبطاقات CRC بصورة تكرارية:

  1. شغّل تحليل الأسماء على وثيقة المتطلبات لاستخلاص قائمة الفئات المرشحة.
  2. أنشئ بطاقة CRC لكل مرشح ناجٍ.
  3. استعرض السيناريوهات الرئيسية (قصص المستخدمين أو حالات الاستخدام) بالبطاقات، مُوزِّعًا المسؤوليات ومدوِّنًا التعاونات.
  4. احذف الفئات التي لا مسؤوليات لها؛ ادمج الفئات المتشابهة جدًا؛ اقسم الفئات التي تمتلك قائمة مسؤوليات طويلة جدًا.

لنأخذ نطاقًا ثانيًا — متجر كتب إلكتروني. سيناريو مختصر: "يتصفح العميل الكتالوج، ويضيف كتبًا إلى سلة التسوق، ويثبت طلبًا، ويستلم فاتورة." يُنتج تحليل الأسماء: Customer، catalogue، Book، ShoppingCart، Order، Invoice. بعد التصفية:

  • catalogue — بالأحرف الصغيرة، يشير إلى سلوك استعلام لا فئة مستقلة. حوّله إلى تابع استعلام في Book — أو احتفظ به إن كانت للكتالوج قواعد خاصة به.
  • Customer، Book، ShoppingCart، Order، Invoice — جميعها تنجو من التصفية.

ستكشف بطاقات CRC أن ShoppingCart تتعاون مع Book (تحتوي على بنود) ومع Customer (تنتمي لجلسة)، وأن Order تتعاون مع ShoppingCart (تُنشأ منها) ومع Invoice (تُحفّز إنشاءها).

Candidate Class Map — Online Bookstore Customer name, email placeOrder() ShoppingCart items, total addItem(), remove() Book isbn, title, price getDetails() Order date, status confirm() Invoice total, tax generate() يتعاون مع (مسودة — قيد التحسين)
خريطة الفئات المرشحة لنطاق متجر الكتب الإلكتروني، مستخرجة من تحليل الأسماء وجلسات CRC.

أخطاء شائعة يجب تجنبها

  • الإبقاء على أسماء واجهة المستخدم: كلمات مثل شاشة وصفحة وزر وتقرير تصف الواجهة لا النطاق؛ احذفها.
  • تحويل كل سمة إلى فئة: عنوان البريد الإلكتروني ورقم الهاتف وISBN قيم مُخزَّنة داخل فئة أخرى — لا فئات قائمة بذاتها — إلا إذا فرض العمل قواعد خاصة بها (كفئة PhoneNumber بتنسيق وتحقق مخصص).
  • إغفال الفئات الضمنية: بعض الفئات لا تظهر كأسماء لأن المتطلب يصف أثرها فقط. مثلًا: "يحتفظ النظام بسجل لجميع التغييرات" تستلزم فئة ChangeLog أو AuditEntry لم يُصرَّح باسمها.
قائمة المرشحين ليست مخطط فئات نهائيًا. في هذه المرحلة أنت تكتشف النطاق لا تُصمّم البنية. التعدديات والوراثة وتوقيعات التوابع تأتي لاحقًا. عامل قائمة الأسماء وبطاقات CRC كفرضيات عمل — كل حوار مع خبير النطاق هو فرصة لتنقيحها.

ملخص

يحوّل اكتشاف فئات النطاق وثيقة المتطلبات إلى مادة خام للنمذجة. يمنحك تحليل الأسماء أسلوبًا سريعًا وقابلًا للتكرار لاستخلاص الفئات المرشحة من النثر. وتمنحك بطاقات CRC أسلوب ورشة عمل لتوزيع المسؤوليات وكشف التعاونات والتحقق من القائمة مع خبراء النطاق. يُنتج الأسلوبان معًا نقطة انطلاق موثّقة لمخطط الفئات الرسمي الذي ستبنيه في الدروس القادمة.