একটি ক্লাস-এর একটি ইনস্ট্যান্স তৈরি করা হয় new অপারেটরের মাধ্যমে তার কনস্ট্রাক্টর কল করে। কনস্ট্রাক্টর হলো এক বিশেষ ধরনের মেথড, যার উদ্দেশ্য হলো সদ্য তৈরি একটি ইনস্ট্যান্স ইনিশিয়ালাইজ করা। কনস্ট্রাক্টর দেখতে সাধারণ মেথডের মতোই, তবে এদের কোনো রিটার্ন টাইপ থাকে না এবং নামটি ক্লাসের নামের সাথে মিলে যায়।
class Library {
private int books;
public Library() {
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
সাধারণ মেথডের মতোই কনস্ট্রাক্টরেও প্যারামিটার থাকতে পারে। কনস্ট্রাক্টরের প্যারামিটার সাধারণত পরে ব্যবহারের জন্য (প্রাইভেট) ফিল্ড হিসেবে সংরক্ষণ করা হয়, অথবা কোনো এককালীন হিসাব-নিকাশে ব্যবহার করা হয়। সাধারণ মেথডে আর্গুমেন্ট পাস করার মতোই কনস্ট্রাক্টরেও আর্গুমেন্ট পাস করা যায়।
class Building {
private int numberOfStories;
private int totalHeight;
public Building(int numberOfStories, double storyHeight) {
this.numberOfStories = numberOfStories;
this.totalHeight = numberOfStories * storyHeight;
}
}
// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2);
এই অনুশীলনীতে আপনি বিভিন্ন ধরনের রিমোট কন্ট্রোলড গাড়ির মধ্যে রেসের আয়োজন করবেন। প্রতিটি গাড়ির নিজস্ব গতি ও ব্যাটারি ড্রেনের বৈশিষ্ট্য থাকে।
গাড়িগুলো সম্পূর্ণ (১০০%) ব্যাটারি নিয়ে শুরু করে। প্রতিবার যখন আপনি রিমোট কন্ট্রোল দিয়ে গাড়িটি চালান, তখন এটি গাড়ির গতির সমান মিটার অতিক্রম করে এবং অবশিষ্ট ব্যাটারি শতাংশ কমে যায় গাড়ির ব্যাটারি ড্রেনের পরিমাণে।
গাড়ির ব্যাটারি যদি তার ব্যাটারি ড্রেনের শতাংশের চেয়ে কম হয়ে যায়, তবে আর গাড়িটি চালানো যাবে না।
প্রতিটি রেস ট্র্যাকের নিজস্ব দূরত্ব থাকে। ব্যাটারি শেষ হওয়ার আগেই গাড়িটি ট্র্যাকটি শেষ করতে পারে কি না, তা দেখে গাড়িগুলো পরীক্ষা করা হয়।
এখানে আপনার জন্য ছয়টি কাজ আছে, যার প্রতিটিতে রিমোট কন্ট্রোলড গাড়ির ইনস্ট্যান্স নিয়ে কাজ করতে হবে।
NeedForSpeed ক্লাসের জন্য একটি কনস্ট্রাক্টর ডিফাইন করে রিমোট কন্ট্রোলড গাড়ি তৈরি করার সুযোগ দিন, যেটি প্যারামিটার হিসেবে নেয় গাড়ির গতি (মিটারে) এবং ব্যাটারি ড্রেনের শতাংশ (দুটোই int টাইপের):
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
RaceTrack ক্লাসের জন্য একটি কনস্ট্রাক্টর ডিফাইন করে রেস ট্র্যাক তৈরি করার সুযোগ দিন, যেটি একমাত্র প্যারামিটার হিসেবে নেয় ট্র্যাকের দূরত্ব (মিটারে) (যেটি int টাইপের):
int distance = 800;
var raceTrack = new RaceTrack(distance);
NeedForSpeed.drive() মেথডটি ইমপ্লিমেন্ট করুন, যেটি গাড়ির গতি অনুযায়ী অতিক্রান্ত মিটারের সংখ্যা আপডেট করে। এছাড়া NeedForSpeed.distanceDriven() মেথডটি ইমপ্লিমেন্ট করুন, যেটি গাড়িটি কত মিটার অতিক্রম করেছে তা রিটার্ন করে:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();
car.distanceDriven();
// => 5
গাড়ির ব্যাটারি ড্রেন অনুযায়ী ব্যাটারি কমাতে NeedForSpeed.drive() মেথডটি আপডেট করুন। এছাড়া NeedForSpeed.batteryDrained() মেথডটি ইমপ্লিমেন্ট করুন, যেটি বোঝায় ব্যাটারি এতটাই শেষ যে আর গাড়ি চালানো যাবে না কি না:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();
car.batteryDrained();
// => false
সবচেয়ে বেশি বিক্রি হওয়া রিমোট কন্ট্রোলড গাড়িটি হলো Nitro, যার সর্বোচ্চ গতি ৫০ মিটার এবং ব্যাটারি ড্রেন ৪%। এই ধরনের গাড়ি রিটার্ন করার জন্য (স্ট্যাটিক) NeedForSpeed.nitro() মেথডটি ইমপ্লিমেন্ট করুন:
var car = NeedForSpeed.nitro();
car.drive();
car.distanceDriven();
// => 50
একটি রেস শেষ করতে হলে গাড়িটিকে রেসের দূরত্ব অতিক্রম করতে সক্ষম হতে হবে। এর মানে হলো ফিনিশ লাইন পার হওয়ার আগেই তার ব্যাটারি শেষ হয়ে যাওয়া চলবে না। RaceTrack.canFinishRace() মেথডটি ইমপ্লিমেন্ট করুন, যেটি প্যারামিটার হিসেবে একটি NeedForSpeed ইনস্ট্যান্স নেয় এবং গাড়িটি রেস শেষ করতে পারলে true রিটার্ন করে; অন্যথায় false রিটার্ন করে:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
int distance1 = 100;
var race1 = new RaceTrack(distance1);
int distance2 = 300;
var race2 = new RaceTrack(distance2);
race1.canFinishRace(car);
// => true
race2.canFinishRace(car);
// => false
Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।