مثال: إشعارات وأسئلة

نستعمل الوراثة لنمذجة أصناف تشترك في بيانات وطرائق، ثم نخصّص ما يختلف بينها في تطبيقين:

  1. إشعارات تُعرض بصيغة البريد الإلكتروني أو الرسائل النصية.
  2. أسئلة اختبار تختلف طريقة التحقق من إجاباتها، وتشترك في حساب الدرجة.

المثال الأول: الإشعارات

نقسم الإشعار بحسب طريقة إرساله إلى رسالة SMS أو رسالة بريد إلكتروني. نمثل هذه كما مثلنا علاقة المستطيل والمثلث بالشكل:

تعريف صنف الإشعار

التنسيق مجرّد، أما الإرسال فمنفّذ ويستدعي تنسيق الكائن. لذلك لا يمكن إنشاء Notification مباشرة، بينما تستطيع الأصناف التي توفر التنسيق أن ترث الإرسال.

البريد الإلكتروني

الإشعار بالبريد الإلكتروني يختصُّ بالعنوان (subject)؛ ولزيادته على الأصل (الرسالة والمسلتم) يجب أن نمررهما إليه بـ super() . كذلك يختص بطريقة التنسيق (format):

الرسالة النصية

أما الرسالة النصية فلا تحتاج أن تخصص شيئًا في عند تعيينها يختلف عن الإشعار العادي، لذلك لا نحتاج إلى __init__ هنا. لكن التنسيق (format) هو الذي سيختلف فقط:

إرسال الإشعارات معًا

ننشئ خمسة كائنات من صنفين: رسالتَي بريد إلكتروني وثلاث رسائل نصية. لكل كائن مستلمه ورسالته، ثم نرسلها جميعًا بحلقة واحدة.

عند استدعاء email1.send() تعمل Notification.send، لكن self هو كائن البريد الإلكتروني؛ لذلك يستدعي self.format() الطريقة EmailNotification.format.

المثال الثاني: أسئلة الاختبار

تشترك جميع الأسئلةفي أن لها جوابًا صحيحًا (correct) ونقاطًا (point) تُرصَد (score) بحسب التحقق من صحة الجواب (check). ونعبر عن ذلك بهذا التعريف:

تعريف صنف السؤال

نجعل التحقق مجرّدًا لأن كل نوع سؤال يفسّر الإجابة بطريقة مختلفة. وننفّذ حساب الدرجة مرة واحدة اعتمادًا على نتيجة التحقق:

لا يمكن إنشاء Question مباشرة لأن التحقق ما زال مجرّدًا. يوفر كل نوع سؤال طريقة التحقق، ويستعمل حساب الدرجة الموروث كما هو.

التقسيم باعتبار طريقة إجابة المتعلم

  • حرف واحد في إجابة سؤال الخيارات.
  • نص في إجابة سؤال إكمال الفراغ.

الاختيار من متعدد

نخزن الخيارات في قاموس يربط الحرف بالنص، ونخزن الإجابة الصحيحة بوصفها مفتاح الخيار: A أو B أو C. وللتحقق من إجابة المتعلم نزيل المسافات المحيطة ونحوّل الحرف إلى حرف كبير، ثم نقارنه بالمفتاح الصحيح:

إكمال الفراغ

نخزن الكلمة الناقصة بأحرف صغيرة ومن دون مسافات محيطة. ونخصّص التحقق ليقبل اختلاف حالة الأحرف والمسافات في إجابة المتعلم:

حساب درجة الاختبار

نفترض أن الإجابات نصوص، وأن الإجابة الصحيحة للاختيار من متعدد هي مفتاح أحد الخيارات بأحرف كبيرة، ولإكمال الفراغ هي الكلمة الناقصة بأحرف صغيرة ومن دون مسافات محيطة.

ننشئ ثلاثة كائنات: سؤالَي اختيار من متعدد، ثم سؤال إكمال فراغ:

نفترض أننا عرضناها على المستخدم، والآن جاءتنا محاولاته:

نصحح هذه الإجابات:

استعملنا طريقة إرسال واحدة لإشعارات يختلف تنسيقها، وطريقة حساب درجة واحدة لأسئلة يختلف التحقق من إجاباتها. نستدعي الطريقة نفسها لكل كائن، ويأتي السلوك المناسب من صنفه، مهما تعددت الكائنات من الصنف نفسه.