ট্র্যাক
/
Java
Java
/
অনুশীলনী
/
রিমোট কন্ট্রোল প্রতিযোগিতা
রিমোট কন্ট্রোল প্রতিযোগিতা

রিমোট কন্ট্রোল প্রতিযোগিতা

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

ভূমিকা

ইন্টারফেস

ইন্টারফেস হলো এমন একটি টাইপ, যার সদস্যগুলো মিলে পরস্পর সম্পর্কিত কিছু ফাংশনালিটি সংজ্ঞায়িত করে। এটি একটি ক্লাসের ব্যবহারকে তার ইমপ্লিমেন্টেশন থেকে আলাদা রাখে, ফলে একই ক্লাসের একাধিক ভিন্ন ইমপ্লিমেন্টেশন তৈরি করা যায়, কিংবা ফরম্যাটিং, তুলনা বা কনভার্সনের মতো কিছু জেনেরিক আচরণ সাপোর্ট করা যায়।

একটি ইন্টারফেসের সিনট্যাক্স অনেকটা ক্লাসের মতোই, তবে পার্থক্য হলো এখানে মেথডগুলো শুধু সিগনেচার হিসেবে থাকে, কোনো বডি দেওয়া হয় না।

public interface Language {
    String getLanguageName();
    String speak();
}

public class ItalianTraveller implements Language, Cloneable {

    // from Language interface
    public String getLanguageName() {
        return "Italiano";
    }

    // from Language interface
    public String speak() {
        return "Ciao mondo";
    }

    // from Cloneable interface
    public Object clone() {
        ItalianTraveller it = new ItalianTraveller();
        return it;
    }
}

ইন্টারফেসে সংজ্ঞায়িত সব অপারেশন যে ক্লাস ইন্টারফেসটি ইমপ্লিমেন্ট করে, তাকে অবশ্যই ইমপ্লিমেন্ট করতে হবে।

ইন্টারফেসে সাধারণত ইনস্ট্যান্স মেথড থাকে।

উপরে দেখানো Cloneable ছাড়াও Java Class Library-তে পাওয়া এমন একটি ইন্টারফেসের উদাহরণ হলো Comparable<T>। কলেকশনে ডিফল্ট জেনেরিক সর্ট অর্ডার দরকার হলে Comparable<T> ইন্টারফেসটি ইমপ্লিমেন্ট করা যায়।

নির্দেশনা

এই অনুশীলনীতে আপনি রিমোট কন্ট্রোল কার নিয়ে আরও কিছু কাজ করবেন।

একটি পরীক্ষামূলক কার তৈরি করা হয়েছে এবং প্রোডাকশন ও পরীক্ষামূলক, দুই ধরনের মডেল সামলানোর জন্য টেস্ট ট্র্যাকটি উপযোগী করে তুলতে হবে। দুই ধরনের কারই ইতিমধ্যে তৈরি হয়ে গেছে, আর টেস্ট ট্র্যাকে তাদের দুটিকেই সামলানোর একটি উপায় আপনাকে বের করতে হবে।

এর সঙ্গে, প্রোডাকশন কারগুলোও কিছুটা সফল হতে শুরু করেছে। প্রোডাকশন কারগুলোর একটি র‍্যাঙ্কিং প্রকাশ করে প্রতিযোগিতার মনোভাব ধরে রাখতে টিম বস উৎসুক।

1. ইন্টারফেসটি ইমপ্লিমেন্ট করুন

RemoteControlCar ইন্টারফেসে অনুগ্রহ করে দুটি মেথড যোগ করুন:

  • drive(), যা কিছুই রিটার্ন করে না, এবং
  • getDistanceTravelled(), যা একটি int রিটার্ন করে।

এরপর ProductionRemoteControlCar ও ExperimentalRemoteControlCar-কে RemoteControlCar ইন্টারফেসটি ইমপ্লিমেন্ট করান। এর মধ্যে ইন্টারফেসের দাবি করা সব মেথড ইমপ্লিমেন্ট করাও অন্তর্ভুক্ত।

2. ড্রাইভ

.drive()-এর প্রতিটি কল যেন কারটিকে একটি নির্দিষ্ট দূরত্ব অতিক্রম করায়:

  • একটি ProductionRemoteControlCar ১০ ইউনিট চলে,
  • একটি ExperimentalRemoteControlCar ২০ ইউনিট চলে।

.getDistanceTravelled() মেথডটি কারটি তার পুরো জীবদ্দশায় যত ইউনিট অতিক্রম করেছে, সেই সংখ্যাটি রিটার্ন করবে।

ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
        
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20

3. রেস

TestTrack.race(RemoteControlCar car) মেথডটি ইমপ্লিমেন্ট করুন, যেখানে car-গুলো drive() করার সুযোগ পায়।

TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown

4. প্রোডাকশন কারগুলো সাজানোর অনুমতি দিন

ProductionRemoteControlCar ক্লাসে অনুগ্রহ করে Comparable<T> ইন্টারফেসটি ইমপ্লিমেন্ট করুন। কারগুলোর ডিফল্ট সাজানোর ক্রম হবে জয়ের সংখ্যার অবরোহী ক্রম।

পাস করা কারগুলোকে জয়ের সংখ্যার অবরোহী ক্রমে সাজিয়ে রিটার্ন করার জন্য স্ট্যাটিক TestTrack.getRankedCars() ইমপ্লিমেন্ট করুন।

ProductionRemoteControlCar prc1 = new ProductionRemoteControlCar();
ProductionRemoteControlCar prc2 = new ProductionRemoteControlCar();
prc1.setNumberOfVictories(2);
prc2.setNumberOfVictories(3);
List<ProductionRemoteControlCar> unsortedCars = new ArrayList<>();
unsortedCars.add(prc1);
unsortedCars.add(prc2);
List<ProductionRemoteControlCar> rankings = TestTrack.getRankedCars(unsortedCars);
// => rankings.get(0) == prc2
// => rankings.get(1) == prc1
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Java Exercism

রিমোট কন্ট্রোল প্রতিযোগিতা শুরু করতে প্রস্তুত?

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