الدرس 8 من 10
الأصناف والتغليف
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
حقول خاصّة ومُنشئ و toString
الشرح
الصنف قالب تصنع منه كائنات، لكلٍّ منها بياناته في حقول وسلوكه في دوال. والدوال هنا بلا static: تعمل على كائن بعينه وترى حقوله. وnew Player("Steve", 20) تُنشئ كائنًا وتستدعي المُنشئ: دالة باسم الصنف بلا نوع مُرجع، تهيّئ الحقول. وthis.name = name تفرّق بين حقل الكائن والوسيط الذي يحمل الاسم نفسه.
والتغليف أن تكون الحقول private لا يمسّها كود من خارج الصنف، وأن يمرّ كل تغيير عبر دوال public تحرس القواعد. فلو كانت hp مكشوفة لكتب أيّ أحد steve.hp = -50، أما خلف takeDamage فالصحة لا تنزل تحت الصفر أبدًا. وللقراءة دوال صغيرة تُسمّى getters، مثل getHp().
وprintln(steve) تستدعي toString()، وبدونها يُطبع شيء مثل Player@1b6d3586. عرّفها بـ @Override public String toString(): التعليقة @Override تطلب من المترجم التأكّد من أنك تتجاوز دالة موجودة فعلًا، فيكشف خطأً في الاسم مثل tostring.
المطلوب
اجعل حقول Player خاصّة، وأكمل المُنشئ Player(name, maxHp) لتبدأ الصحة ممتلئة، ثم getName() وgetHp(). وtakeDamage(amount) تُنقص الصحة دون أن تنزل تحت الصفر، وheal(amount) تزيدها دون أن تتجاوز maxHp، وisAlive() تُرجع true ما دامت الصحة فوق الصفر. وعرّف toString() لتُرجع مثلًا Steve (HP 12/20).
معايير التصحيح
6 معايير- المُنشئ يحفظ الاسم ويبدأ بصحة كاملة
- takeDamage تُنقص الصحة ولا تنزل تحت الصفر
- heal تزيد الصحة ولا تتجاوز الحدّ الأعلى
- isAlive حتى تنفد الصحة
- toString بالشكل Steve (HP 12/20)
- الحقول خاصّة: private