المسارات
/
Java
Java
/
التمارين
/
السحرة والمحاربون 2
السحرة والمحاربون 2

السحرة والمحاربون 2

تمرين تعلّمي

مقدمة

التحميل الزائد للطرق

في Java، التحميل الزائد للطرق ميزة تسمح للصنف بأن يحتوي على أكثر من طريقة تحمل الاسم نفسه، إذا اختلفت قوائم معاملاتها. وهو مرتبط بتعدد الأشكال في وقت الترجمة (أو الساكن). هذا المفهوم جوهري لإنشاء طرق تؤدي مهامًا متشابهة لكن بمدخلات مختلفة.

لماذا نُحمّل الطرق تحميلًا زائدًا؟

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

كيف نُحمّل الطرق تحميلًا زائدًا؟

مفتاح التحميل الزائد للطرق هو توقيع الطريقة. تُعدّ الطريقتان مختلفتين إذا اختلف توقيعهما. وهناك أسلوبان لتحميل الطرق تحميلًا زائدًا:

  1. عدد مختلف من المعاملات: يمكن أن تحمل الطرق الاسم نفسه لكن بعدد مختلف من المعاملات.

    public class Display {
    
        public void show(int x) {
            System.out.println("Show with int: " + x);
        }
    
        public void show(int x, int y) {
            System.out.println("Show with two ints: " + x + ", " + y);
        }
    }
    
  2. أنواع مختلفة من المعاملات: يمكن أن تحمل الطرق الاسم نفسه والعدد نفسه من المعاملات لكن بأنواع مختلفة.

    public class Display {
    
        public void show(int x) {
            System.out.println("Show with int: " + x);
        }
    
        public void show(String s) {
            System.out.println("Show with String: " + s);
        }
    }
    

نقاط يجب تذكّرها

  • الطرق المُحمّلة يجب أن تغيّر قائمة الوسائط.
  • الطرق المُحمّلة يمكنها أيضًا تغيير نوع الإرجاع، لكن مجرد تغيير نوع الإرجاع لا يُعدّ تحميلًا زائدًا للطرق.
  • يمكن تحميل الطرق تحميلًا زائدًا في الصنف نفسه أو في صنف فرعي.

في هذا المفهوم، سنستكشف أمثلة وفروقًا دقيقة متعددة للتحميل الزائد للطرق في Java.

التعليمات

في هذا التمرين، تلعب مع أفضل أصدقائك لعبة تقمّص أدوار تُدعى "Wizard and Warriors". أنت سيد اللعبة، أي الشخص المسؤول عن إحياء عالم اللعبة للاعبين. ومن الجوانب الأساسية في ذلك وصف اللعبة للاعبين: ما حالة الشخصية، وكيف تبدو البلدة التي يزورونها، وما إلى ذلك.

لديك خمس مهام تطلب منك وصف أجزاء من اللعبة للاعبين.

1. وصف شخصية

لكل شخصية صنف ومستوى وعدد من نقاط الصحة، وتوصف كما يلي: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.". نفّذ الطريقة GameMaster.describe التي تأخذ Character كمعاملها الوحيد وتُرجع وصفه.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

new GameMaster().describe(character);
// => "You're a level 4 Wizard with 28 hit points."

2. وصف وجهة

لكل وجهة اسم وعدد من السكان، وتوصف كما يلي: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.". نفّذ الطريقة GameMaster.describe التي تأخذ Destination كمعاملها الوحيد وتُرجع وصفها.

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."

3. وصف كيفية السفر

يمكن للشخصيات السفر إلى وجهة باستخدام أحد خيارين:

  • سيرًا على الأقدام، وتوصف كما يلي: "You're traveling to your destination by walking."
  • على ظهر حصان، وتوصف كما يلي: "You're traveling to your destination on horseback."

نفّذ الطريقة GameMaster.describe التي تأخذ TravelMethod كمعاملها الوحيد وتُرجع وصفها.

new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."

4. وصف شخصية تسافر إلى وجهة

عندما تسافر شخصية إلى وجهة، يُوصف ذلك بأنه مزيج من الأوصاف الفردية: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>". نفّذ الطريقة GameMaster.describe التي تأخذ Character وDestination وTravelMethod كمعاملاتها وتُرجع وصفها.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(character, destination, TravelMethod.HORSEBACK);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination on horseback. You've arrived at Muros, which has 732 inhabitants."

5. وصف شخصية تسافر إلى وجهة دون تحديد كيفية السفر

في معظم الحالات، تسافر الشخصيات إلى وجهة سيرًا على الأقدام. وللتسهيل، يُسمح للاعبين بحذف ذكر كيفية السفر، وفي هذه الحالة يُفترض أن السفر سيرًا على الأقدام. نفّذ الطريقة GameMaster.describe التي تأخذ Character وDestination كمعاملاتها وتُرجع وصفها.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(character, destination);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination by walking. You've arrived at Muros, which has 732 inhabitants."
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Java Exercism

مستعد لبدء السحرة والمحاربون 2؟

سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.