الدرس 8 من 10
الأصناف والخصائص
- 14 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
المُنشئ وprivate set والتغليف
الشرح
الصنف قالب، والكائن نسخة مصنوعة منه لها بياناتها الخاصّة، مثل var hero = new Player("ليان", 100);. وتستدعي new المُنشئ (constructor)، وهو دالة تحمل اسم الصنف نفسه ولا تكتب لها نوع إرجاع، ووظيفتها تجهيز الكائن الجديد. وكل ما في الصنف خاصّ (private) ما لم تقل غير ذلك، فما تريد استعماله من خارج الصنف تكتب قبله public.
والحقل العامّ public int Hp; يسمح لأي كود أن يكتب hero.Hp = 9999، أما الخاصيّة (property) public int Hp { get; private set; } فيمكن قراءتها من أي مكان ولا يمكن تغييرها إلا من داخل الصنف، فتمرّ كل التغييرات عبر دوال الصنف، وهذه الدوال هي التي تفرض قواعد اللعبة، فلا ينزل الضرر بالصحّة تحت الصفر ولا يتجاوز الشفاء الحدّ الأقصى. وهذا ما يُسمّى التغليف (encapsulation).
وتكتب الخاصيّة المحسوبة بسهم، مثل public bool IsAlive => Hp > 0;، وهي لا تُخزَّن بل تُحسب من Hp في كل مرّة تقرؤها، فتبقى دائمًا متّفقة معها.
المطلوب
حوّل حقول Player الثلاثة Name وMaxHp وHp إلى خصائص { get; private set; }، واجعل المُنشئ يحفظ الاسم والصحّة القصوى ويبدأ اللاعب بصحّة كاملة. ثم اجعل IsAlive صحيحة ما دامت Hp أكبر من صفر، وTakeDamage(amount) تُنقص Hp دون أن تنزل بها تحت الصفر، وHeal(amount) تزيدها دون أن تتجاوز MaxHp، ولا تشفي لاعبًا سقط.
الفحوص
6 فحوص- المُنشئ يحفظ الاسم ويبدأ بصحّة كاملة
- الدالة TakeDamage تُنقص الصحّة
- الصحّة لا تنزل تحت الصفر، وIsAlive تصير false
- الدالة Heal تزيد الصحّة ولا تتجاوز MaxHp
- اللاعب الذي سقط لا يُشفى
- الخصائص Name وMaxHp وHp تُقرأ من الخارج ولا تتغيّر منه