ইন্টারফেস হলো এমন একটি টাইপ, যার সদস্যগুলো মিলে পরস্পর সম্পর্কিত কিছু ফাংশনালিটি সংজ্ঞায়িত করে। এটি একটি ক্লাসের ব্যবহারকে তার ইমপ্লিমেন্টেশন থেকে আলাদা রাখে, ফলে একই ক্লাসের একাধিক ভিন্ন ইমপ্লিমেন্টেশন তৈরি করা যায়, কিংবা ফরম্যাটিং, তুলনা বা কনভার্সনের মতো কিছু জেনেরিক আচরণ সাপোর্ট করা যায়।
একটি ইন্টারফেসের সিনট্যাক্স অনেকটা ক্লাসের মতোই, তবে পার্থক্য হলো এখানে মেথডগুলো শুধু সিগনেচার হিসেবে থাকে, কোনো বডি দেওয়া হয় না।
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> ইন্টারফেসটি ইমপ্লিমেন্ট করা যায়।
এই অনুশীলনীতে আপনি রিমোট কন্ট্রোল কার নিয়ে আরও কিছু কাজ করবেন।
একটি পরীক্ষামূলক কার তৈরি করা হয়েছে এবং প্রোডাকশন ও পরীক্ষামূলক, দুই ধরনের মডেল সামলানোর জন্য টেস্ট ট্র্যাকটি উপযোগী করে তুলতে হবে। দুই ধরনের কারই ইতিমধ্যে তৈরি হয়ে গেছে, আর টেস্ট ট্র্যাকে তাদের দুটিকেই সামলানোর একটি উপায় আপনাকে বের করতে হবে।
এর সঙ্গে, প্রোডাকশন কারগুলোও কিছুটা সফল হতে শুরু করেছে। প্রোডাকশন কারগুলোর একটি র্যাঙ্কিং প্রকাশ করে প্রতিযোগিতার মনোভাব ধরে রাখতে টিম বস উৎসুক।
RemoteControlCar ইন্টারফেসে অনুগ্রহ করে দুটি মেথড যোগ করুন:
drive(), যা কিছুই রিটার্ন করে না, এবংgetDistanceTravelled(), যা একটি int রিটার্ন করে।এরপর ProductionRemoteControlCar ও ExperimentalRemoteControlCar-কে RemoteControlCar ইন্টারফেসটি ইমপ্লিমেন্ট করান।
এর মধ্যে ইন্টারফেসের দাবি করা সব মেথড ইমপ্লিমেন্ট করাও অন্তর্ভুক্ত।
.drive()-এর প্রতিটি কল যেন কারটিকে একটি নির্দিষ্ট দূরত্ব অতিক্রম করায়:
ProductionRemoteControlCar ১০ ইউনিট চলে,ExperimentalRemoteControlCar ২০ ইউনিট চলে।.getDistanceTravelled() মেথডটি কারটি তার পুরো জীবদ্দশায় যত ইউনিট অতিক্রম করেছে, সেই সংখ্যাটি রিটার্ন করবে।
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
TestTrack.race(RemoteControlCar car) মেথডটি ইমপ্লিমেন্ট করুন, যেখানে car-গুলো drive() করার সুযোগ পায়।
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
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
Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।