জাভা-তে ক্লাস বলতে আমরা কী বোঝায়? এটি অবশ্যই স্কুলের মতো ক্লাস নয়, যেখানে শিক্ষার্থী এবং শিক্ষক থাকেন। একটি ক্লাস হলো আপনার কোডে একটি অবজেক্টের জন্য ব্লুপ্রিন্ট।
জাভা একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ। এর মানে এতে অনেক ফিচার রয়েছে যা আপনাকে রিযজেবল কোড লিখতে সাহায্য করে। অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং সব সাইজের প্রোগ্রামের জন্য উপযোগী কারণ এটি রিপিটেশন কমানো সাহায্য করে, যা আবার আপনার কোডকে আরও পড়া সহজ করে তোলে।
এই গাইডে আমরা জাভার দুটি গুরুত্বপূর্ণ কনসেপ্ট: ক্লাস এবং অবজেক্ট নিয়ে আলোচনা করব। সেগুলো কীভাবে কাজ করে এবং উদাহরণসহ কীভাবে ইমপ্লিমেন্ট করবেন তা দেখাব।
জাভা ক্লাস কী?
একটি ক্লাস হলো একটি অবজেক্টের জন্য ব্লুপ্রিন্টের মতো। যেভাবে একটি বেডরুমের ব্লুপ্রিন্ট বলে দেয় কী ধরনের দরজা এবং জানালা ইনস্টল করা হবে, তেমনি একটি ক্লাস আপনার প্রোগ্রামকে বলে দেয় একটি অবজেক্ট কী মেথড এবং মান অ্যাক্সেস ও সংরক্ষণ করতে পারবে।
ক্লাস উপযোগী কারণ এতে আপনি একটি নির্দিষ্ট ধরনের ডেটার কাঠামো একবার ঘোষণা করতে পারেন যা আপনি অবজেক্ট ঘোষণা করে একাধিকবার রেফারেন্স করতে পারেন।
একটি Employee ক্লাস ডিফাইন করি যাতে একটি ভেরিয়েবল এবং দুটি মেথড রয়েছে:
public class Employee {
boolean isOnVacation;
public void startVacation() {
isOnVacation = true;
System.out.println("You are now on vacation.");
}
public void endVacation() {
isOnVacation = false;
System.out.println("You are not on vacation anymore.");
}
}
আমাদের কোডে আমরা দুটি মেথড ডিফাইন করেছি: একটি কর্মচারির ছুটি শুরু করার জন্য, আরেকটি ছুটি শেষ করার জন্য। আমরা isOnVacation নামে একটি বুলিয়ান ইনস্ট্যান্স ভেরিয়েবল ঘোষণা করেছি এই ইনফরমেশন ট্র্যাক করার জন্য।
আমরা এখনো আমাদের Employee ক্লাসের কোনো অবজেক্ট তৈরি করিনি। আমরা শুধু ব্লুপ্রিন্ট রূপরেখা করেছি যা পরে সেই অবজেক্টগুলো কীভাবে আকার নেবে সেটি ডিফাইন করবে।
জাভা অবজেক্ট কী?
একটি অবজেক্ট হলো একটি নির্দিষ্ট ক্লাসের ইনস্ট্যান্স। আগের আমাদের Employee ব্লুপ্রিন্ট ব্যবহার করে একটি অবজেক্ট তৈরি করি। আমরা john নামে একটি অবজেক্ট তৈরি করব:
Employee john = new Employee();
এই কোড Employee ক্লাসের একটি ইনস্ট্যান্স তৈরি করে। লক্ষ্য করুন, আমাদের ক্লাসের নামের পর দুটি প্যারেনথেসিস যোগ করেছি, যা আমাদের কোডকে Employee ক্লাস রেফারেন্স করতে বলে। new কিওয়ার্ড আমাদের কোডকে সেই ক্লাসের একটি নতুন অবজেক্ট তৈরি করতে বলে।
এখন, আমাদের অবজেক্ট মেথডগুলো ব্যবহার করি:
Employee john = new Employee();
john.startVacation();
john.endVacation();
প্রোগ্রাম চালালে:
You are now on vacation.
You are not on vacation anymore.
আমাদের অবজেক্ট আমাদের Employee ক্লাসে ডিফাইন করা দুটি মেথড কল করেছে। এর ফলে সেই মেথডগুলোর কোড চলেছে। যখন আমরা john.startVacation() এক্সিকিউট করি, isOnVacation বুলিয়ানের মান true হয়ে যায়, এবং "You are now on vacation." মেসেজ জাভা কনসোলে প্রিন্ট হয়।
যদিও আমরা isOnVacation ভেরিয়েবলটি আমাদের ক্লাসের ভেতরে ডিফাইন করেছি, আমরা একটি নির্দিষ্ট অবজেক্টে যেটি অ্যাসাইন করা হয়েছে সেটি অ্যাক্সেস করতে পারি। এই কোডটি বিবেচনা করুন:
Employee john = new Employee();
john.startVacation();
john.endVacation();
System.out.println(john.isOnVacation);
এই কোড John-এর ছুটি শুরু এবং শেষ করবে—আগের উদাহরণের মতো—এবং তারপর isOnVacation ভেরিয়েবলের মান কনসোলে প্রিন্ট করবে:
You are now on vacation.
You are not on vacation anymore.
false
আমাদের isOnVacation মেথডের মান false।
জাভা কনস্ট্রাক্টর
কনস্ট্রাক্টর মেথড আপনাকে একটি ক্লাসে ডেটা ইনিশিয়ালাইজ করতে দেয়। আমাদের উপরের উদাহরণে, আমরা আমাদের ক্লাসের মূল বডিতে একটি ভেরিয়েবল ঘোষণা করেছি কিন্তু সেটি কোনো ডিফল্ট মান দিয়ে ইনিশিয়ালাইজ করিনি।
নিচের কোড বিবেচনা করুন:
class Employee {
boolean isOnVacation;
public Employee() {
isOnVacation = false;
System.out.println("Initialized values.");
}
...
}
এখন, আমাদের Employee ক্লাসের একটি অবজেক্ট তৈরি করি:
Employee john = new Employee();
john.startVacation();
যখন আমরা আমাদের john অবজেক্ট তৈরি করি, আমাদের কনস্ট্রাক্টর অটোমেটিক্যালি চলবে। এই মেথড আপনাকে সেই ডিফল্ট মানগুলো সেট করতে দেয় যা আপনি আপনার ক্লাসে রাখতে চান। আমাদের মেথড ফেরত দেবে:
Initialized values.
You are now on vacation.
এক্সিকিউশনের সময়, আমাদের কনস্ট্রাক্টর isOnVacation এর মান false সেট করবে। তারপর এটি আমাদের কনসোলে Initialized values প্রিন্ট করবে।
একাধিক অবজেক্ট তৈরি করা
যদি আমাদের দুজন কর্মচারি থাকে? কি আমরা একই ক্লাস ব্যবহার করতে পারি? হ্যাঁ! এটিই ক্লাস ব্যবহারের সুবিধা: আপনি একই ক্লাস ব্যবহার করে অনেক অবজেক্ট ঘোষণা করতে পারেন।
নিচের মেইন প্রোগ্রাম বিবেচনা করুন:
Employee john = new Employee();
john.startVacation();
john.endVacation();
System.out.println(john.isOnVacation);
Employee ian = new Employee();
ian.startVacation();
System.out.println(ian.isOnVacation);
কোড চালালে:
Initialized values.
You are now on vacation.
You are not on vacation anymore.
false
Initialized values.
You are now on vacation.
true
আমরা আমাদের Employee ক্লাসের দুটি অবজেক্ট তৈরি করেছি: john এবং ian। আমাদের কোডে, আমরা John-এর ছুটি শুরু এবং শেষ করেছি। তারপর, Ian-এর জন্য একটি অবজেক্ট তৈরি করি এবং তার ছুটি শুরু করি।
যখন আমরা john.isOnVacation প্রিন্ট করি, false ফেরত আসে; যখন Ian-এর অবজেক্টের জন্য একই কাজ করি, true ফেরত আসে। এর কারণ হলো আমাদের ক্লাসের প্রতিটি অবজেক্ট আলাদা। সেগুলো একই ব্লুপ্রিন্ট ব্যবহার করে, কিন্তু সেগুলো নিজস্ব মান সংরক্ষণ করতে পারে।
উপসংহার
ক্লাস এবং অবজেক্ট অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এর কোর্নারস্টোন। ক্লাস আপনাকে ব্লুপ্রিন্ট ডিফাইন করতে দেয়, যেসর থেকে আপনি অবজেক্ট ডিফাইন করতে পারেন।
চ্যালেঞ্জের জন্য প্রস্তুত? একটি প্রোগ্রাম তৈরি করুন যাতে একটি ক্লাস থাকে যা ট্র্যাক করে একজন শিক্ষার্থী তার টেস্ট পাস করেছে কিনা। এতে থাকা উচিত:
- একটি ভেরিয়েবল যা ট্র্যাক করে শিক্ষার্থী টেস্ট পাস করেছে কিনা।
- দুটি মেথড যা শিক্ষार्थী টেস্ট পাস করেছে কিনা সেটি পরিবর্তন করে।
- ঐচ্ছিকভাবে, আপনি একটি "if" স্টেটমেন্ট ব্যবহার করতে পারেন যাতে শিক্ষার্থীর নümerিক্যাল গ্রেডের ভিত্তিতে তাদের টেস্ট পাস/ফেইল করা উচিত কিনা সেটি ক্যালকুলেট করা যায়।
এখন আপনি জাভা-তে ক্লাস এবং অবজেক্ট এক্সপার্টের মতো ব্যবহার করতে পারবেন!