مخططات الكائنات
مخططات الكائنات
مخطط الأصناف يصف القالب — الشكل الذي ستتبعه كل نسخة من الصنف. أما مخطط الكائنات فيذهب خطوة أبعد: إذ يُظهر لقطة من النظام في لحظة زمنية محددة، مع نسخ حقيقية تحمل قيماً حقيقية. حيث يقول مخطط الأصناف "كل مريض يملك اسماً وتاريخ ميلاد"، يقول مخطط الكائنات "الآن، توجد مريضة اسمها سارة أحمد مولودة في 1990-03-14". كلا المخططين يستخدمان اللغة البصرية ذاتها، لكنهما يجيبان على أسئلة مختلفة.
لماذا تهم مخططات الكائنات المحللين؟
مخططات الكائنات أداة تحقق قوية. بعد رسم مخطط الأصناف، يمكنك تحديه بالسؤال: "هل أستطيع إنتاج مخطط كائنات صحيح يمثل سيناريو حقيقياً من المتطلبات؟" إذا لم تستطع — لأن التعددية خاطئة، أو لأن علاقة إلزامية مفقودة، أو لأن سمة لا قيمة منطقية لها — فمخطط الأصناف يحتاج إلى تصحيح. كما تخدم مخططات الكائنات أغراضاً أخرى:
- حالات اختبار للنموذج — التحقق من أن بنية الأصناف تدعم كل سيناريو وصفه العمل.
- التواصل مع أصحاب المصلحة — الكائنات المسماة بقيم حقيقية أسهل بكثير على غير التقنيين من الأصناف المجردة.
- نقاط بداية لبيانات الاختبار — يستطيع المطورون والمختبرون استخدام مخططات الكائنات مباشرةً لكتابة اختبارات الوحدة أو بذر قاعدة البيانات.
الرمز: صندوق الاسم:الصنف المسطّر
القاعدة بسيطة وقاطعة: في مخطط الكائنات يُكتب تسمية كل صندوق نسخة بالشكل objectName : ClassName مع وضع خط تحت التسمية كاملاً. هذا التسطير هو الفارق البصري الوحيد بين صندوق الصنف وصندوق الكائن — كلاهما مستطيل مقسوم بخطوط أفقية. الأقسام هي:
- القسم العلوي — تسمية
objectName : ClassNameالمسطّرة. يمكن حذف اسم الكائن إن كان مجهولاً، فيُكتب: ClassName(مسطّراً أيضاً). - القسم السفلي (قائمة الفتحات) — فتحات السمات، كل منها مكتوبة بالشكل
attributeName = value. تظهر فقط السمات ذات القيم المعروفة أو ذات الصلة؛ يمكن حذف غيرها. - قسم العمليات — يُخفى تقريباً دائماً في مخططات الكائنات؛ تُظهر الحالة لا السلوك.
name : Class كاملاً؛ لا تسطّر الاسم وحده ولا الصنف وحده.
الروابط: العلاقات بين الكائنات
في مخطط الأصناف، تربط الترابطات الأصنافَ ببعضها. في مخطط الكائنات، تسمى الروابط المقابلة links. الرابط هو ببساطة نسخة من ترابط. يُرسم كخط مستقيم بين صندوقي كائنين، مع تسمية اختيارية باسم الترابط أو الدور. لا تظهر رؤوس السهام ولا التعددية على الرابط نفسه — التعددية قيد على مستوى الصنف لا على مستوى النسخة الفردية.
لقطة كاملة: حجز مواعيد العيادة
تخيّل نظام العيادة في الساعة العاشرة صباحاً يوم الاثنين. مريضتان حجزتا موعدين، الأول مع الدكتور خالد والثاني لا يزال في انتظار التأكيد. يرصد مخطط الكائنات التالي تلك اللحظة بالضبط:
name : Class هو نسخة محددة. الخطوط بين الصناديق هي روابط — نسخ من الترابطات. لاحظ أن كلاً من appt1 وappt2 يرتبطان بالكائن drKhalid ذاته: طبيب واحد وحجزان، وهو بالضبط ما تسمح به التعددية 1..* في مخطط الأصناف.
الكائنات المجهولة
أحياناً لا تحتاج إلى تسمية كائن؛ تريد فقط إظهار وجود نسخة من صنف معين. يمكنك كتابة : ClassName (مع تسطير النقطتين والصنف) للدلالة على نسخة مجهولة. يشيع ذلك عند إظهار مجموعة من الكائنات حيث لا تضيف الأسماء الفردية وضوحاً، كأن تُظهر ثلاثة كائنات مجهولة : OrderItem مرتبطة بكائن واحد order1 : Order.
متى تستخدم مخططات الكائنات؟
مخططات الكائنات ليست مطلوبة في كل مشروع. استخدمها بعناية في هذه المواقف:
- بعد الانتهاء من مخطط الأصناف — تحقق من النموذج بتمثيل السيناريو الأكثر تعقيداً من المتطلبات.
- عندما يتشكك صاحب مصلحة في علاقة ما — مثال ملموس بأسماء وقيم حقيقية يحسم الغموض أسرع من الرموز المجردة.
- قبل كتابة بيانات الاختبار — سلّم المخطط لفريق ضمان الجودة كنقطة بداية لبذر قاعدة البيانات.
- عند الخلاف حول التعددية — إذا اختلف الفريق حول ما إذا كان يمكن لطالب التسجيل في صفر مقررات، ارسم الحالة الحدية كمخطط كائنات ودع أصحاب المصلحة يقررون.
من مخطط الكائنات إلى مخطط الأصناف
تساعدك مخططات الكائنات أيضاً في اكتشاف الأصناف المفقودة. خلال رسم لقطة العيادة أعلاه، قد يُدرك المحلل أن صنف TimeSlot ضروري لمنع التعارض في الحجوزات — هذه الفكرة جاءت من محاولة تعيين قيمة وقت ملموسة للموعد. هذا التدفق العكسي (مخطط الكائنات يكشف ثغرة، المحلل يصلح مخطط الأصناف) جزء طبيعي وصحي من النمذجة التكرارية.
ملخص
مخطط الكائنات هو لقطة نسخ مسماة من نموذج الأصناف في لحظة زمنية محددة. يحمل كل صندوق نسخة تسمية مسطّرة objectName : ClassName ويسرد فتحات السمات بقيم حقيقية. الروابط (نسخ الترابطات) تصل الكائنات ببعضها تماماً كما تصل الترابطات الأصنافَ، لكن دون علامات تعددية. تُحقق مخططات الكائنات من مخططات الأصناف، وتوصّل السيناريوهات الملموسة لأصحاب المصلحة، وتُهيئ بيانات الاختبار. في الدرس القادم ستُترجم كلا المخططين مباشرةً إلى جداول قاعدة بيانات وبنية كود.