الدرس 8 من 10

الأصناف والتغليف

هدف الدرس

الحقول الخاصّة والمُنشئ وtoString

01

الشرح

الصنف قالب تصنع منه كائنات، لكل كائن بياناته في حقول وسلوكه في دوال. والدوال هنا تُكتب دون static لأنها تعمل على كائن معيّن وتستطيع قراءة حقوله. وتُنشئ new Player("Steve", 20) كائنًا جديدًا وتستدعي المُنشئ (constructor)، وهو دالة تحمل اسم الصنف ولا تكتب لها نوع إرجاع، ووظيفتها أن تضع القيم الأولى في الحقول. ويفرّق this.name = name بين حقل الكائن والمُعامِل الذي يحمل الاسم نفسه.

والتغليف (encapsulation) أن تجعل الحقول private فلا يصل إليها كود من خارج الصنف، وأن يمرّ كل تغيير عبر دوال public تطبّق القواعد. فلو كانت hp مكشوفة لاستطاع أي كود أن يكتب steve.hp = -50، أما إذا كان التغيير يمرّ عبر takeDamage فلن تنزل الصحة تحت الصفر أبدًا. ولقراءة الحقول دوال صغيرة تُسمّى getters، مثل getHp().

وحين تكتب println(steve) تُستدعى toString()، وإذا لم تعرّفها طُبع شيء مثل Player@1b6d3586. فعرّفها بـ @Override public String toString()، والعلامة @Override تطلب من المترجم أن يتأكّد من أنك تعيد تعريف دالة موجودة فعلًا، فيكشف لك خطأً في الاسم مثل tostring.

02

المطلوب

اجعل حقول Player خاصّة، وأكمل المُنشئ Player(name, maxHp) بحيث تبدأ الصحة ممتلئة، ثم أكمل getName() وgetHp(). واجعل takeDamage(amount) تُنقص الصحة دون أن تنزل تحت الصفر، وheal(amount) تزيدها دون أن تتجاوز maxHp، وisAlive() تُرجع true ما دامت الصحة فوق الصفر، ثم عرّف toString() لتُرجع نصًّا مثل Steve (HP 12/20).

الفحوص

6 فحوص
  1. المُنشئ يحفظ الاسم ويبدأ بصحة كاملة
  2. الدالة takeDamage تُنقص الصحة ولا تنزل تحت الصفر
  3. الدالة heal تزيد الصحة ولا تتجاوز الحدّ الأعلى
  4. الدالة isAlive تُرجع true حتى تنفد الصحة
  5. الدالة toString تُرجع النصّ بالشكل Steve (HP 12/20)
  6. كل الحقول private
03

تلميحات

0/3
Main.java
المخرجاتJava 13 (Judge0)

يُترجَم كودك الآن ويُشغَّل على الخادم.

–/6

يُترجَم كودك الآن ويُشغَّل على الخادم.

تجد 6 فحوص في بطاقة «المطلوب».