ক্লাস এবং অবজেক্ট (Classes & Objects)
ক্লাস = ব্লুপ্রিন্ট, অবজেক্ট = বাড়ি (Classes = Blueprints, Objects = Houses)
কল্পনা করুন আপনি একজন স্থপতি বা আর্কিটেক্ট (architect)। আপনি একটি বাড়ির জন্য ব্লুপ্রিন্ট (blueprint) বা নকশা আঁকলেন — সেখানে বলা আছে "প্রতিটি বাড়ির একটি রং থাকবে, নির্দিষ্ট সংখ্যক ঘর থাকবে এবং একটি দরজা থাকবে যা খোলা বা বন্ধ করা যাবে।" এই ব্লুপ্রিন্টটিই হলো একটি ক্লাস (class)।
যখন আপনি সেই নকশা অনুযায়ী সত্যিই একটি বাড়ি তৈরি করেন, তখন আপনি একটি অবজেক্ট (object) পান (যাকে ইনস্ট্যান্স বা instance-ও বলা হয়)। আপনি একই ব্লুপ্রিন্ট ব্যবহার করে অনেকগুলো বাড়ি তৈরি করতে পারেন — একটি লাল রঙের, একটি নীল রঙের, একটি ৩ ঘরের, আবার একটি ৫ ঘরের। প্রতিটি বাড়িই নিজে থেকে একেকটি আলাদা অবজেক্ট, কিন্তু সেগুলো সবই একই নকশা বা কাঠামো মেনে তৈরি।
একটি ক্লাস মূলত দুটি জিনিসকে একসাথে যুক্ত রাখে:
- ফিল্ড (Fields) (যাকে অনেক সময় ইনস্ট্যান্স ভ্যারিয়েবলও বলা হয়) — অবজেক্টগুলো যে ডেটা বা তথ্য ধারণ করে (যেমন রং, নাম, স্কোর)
- মেথড (Methods) — অবজেক্টগুলো যেসব কাজ করতে পারে (যেমন দৌড়ানো, লাফ দেওয়া, হিসাব করা)
আপনার প্রথম ক্লাস (Your First Class)
অ্যাক্সেস মডিফায়ার এবং এনক্যাপসুলেশন (Access Modifiers & Encapsulation)
কোনো ক্লাসের ভেতরের সবকিছুরই যে বাইরে থেকে অ্যাক্সেস বা প্রবেশের অনুমতি থাকতে হবে, এমন কোনো কথা নেই। ধরুন একটি এটিএম (ATM) মেশিনের কথা — আপনি কার্ড ঢোকাতে পারেন এবং পিন দিতে পারেন (এটি হলো পাবলিক ইন্টারফেস বা public interface), কিন্তু আপনি চাইলেও মেশিনের ভেতর হাত ঢুকিয়ে এর টাকার বাক্স বা কলকব্জা নাড়তে পারবেন না (এটি হলো প্রাইভেট ইন্টারনাল বা private internals)।
জাভাতে এই ব্যাপারগুলো নিয়ন্ত্রণ করার জন্য অ্যাক্সেস মডিফায়ার (access modifiers) রয়েছে:
public— যে কেউ এতে অ্যাক্সেস করতে পারবে। এটি অনেকটা সদর দরজার মতো।private— এটি কেবল ওই একই ক্লাসের ভেতরের কোড থেকেই অ্যাক্সেস করা যাবে। এটি তালাবদ্ধ সিন্দুকের মতো।protected— এর নিজের ক্লাসের ভেতর থেকে এবং এর সাবক্লাস (subclass) থেকে অ্যাক্সেস করা যাবে।- (modifier ছাড়া) — একে "প্যাকেজ-প্রাইভেট (package-private)" বলা হয়, যা কেবল একই প্যাকেজের (package) ভেতর থেকে অ্যাক্সেস করা যায়।
ভেতরের ডেটাকে লুকিয়ে রেখে কেবল প্রয়োজনীয় অংশটুকুই বাইরে প্রকাশ করার এই চর্চাকে বলা হয় এনক্যাপসুলেশন (encapsulation)। আপনি গেটার (getters) এবং সেটার (setters) ব্যবহার করে প্রাইভেট ফিল্ডগুলোর অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন।