ট্র্যাক
/
Java
Java
/
অনুশীলনী
/
জাদুকর ও যোদ্ধা ২
জাদুকর ও যোদ্ধা ২

জাদুকর ও যোদ্ধা ২

লার্নিং অনুশীলনী

ভূমিকা

মেথড ওভারলোডিং

Java-তে মেথড ওভারলোডিং এমন একটি ফিচার, যা একটি ক্লাসকে একই নামের একাধিক মেথড রাখার সুযোগ দেয়, যদি তাদের প্যারামিটার তালিকা আলাদা হয়। এটি কম্পাইল-টাইম (বা স্ট্যাটিক) পলিমরফিজমের সাথে সম্পর্কিত। একই ধরনের কাজ করে কিন্তু ইনপুট আলাদা, এমন মেথড তৈরি করার জন্য এই কনসেপ্টটি খুবই গুরুত্বপূর্ণ।

কেন মেথড ওভারলোড করবেন?

মেথড ওভারলোডিং প্রোগ্রামের পাঠযোগ্যতা বাড়ায়। আলাদা আলাদা মেথডকে একই নাম দেওয়া যায়, তবে প্যারামিটার আলাদা হবে। প্যারামিটারের সংখ্যা বা প্যারামিটারের টাইপের ওপর নির্ভর করে সংশ্লিষ্ট মেথডটি কল করা হয়।

কীভাবে মেথড ওভারলোড করবেন?

মেথড ওভারলোডিংয়ের মূল চাবিকাঠি হলো মেথডের সিগনেচার। দুটি মেথডের সিগনেচার আলাদা হলে তাদের আলাদা বলে ধরা হবে। একটি মেথড ওভারলোড করার দুইটি উপায় আছে:

১. প্যারামিটারের সংখ্যা ভিন্ন: মেথডের নাম একই হতে পারে, কিন্তু প্যারামিটারের সংখ্যা আলাদা।

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);
    }
}

২. প্যারামিটারের টাইপ ভিন্ন: মেথডের নাম ও প্যারামিটারের সংখ্যা একই হতে পারে, কিন্তু টাইপ আলাদা।

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

জাদুকর ও যোদ্ধা ২ শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।