ডেটা হাইডিং (Data Hiding) অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং-এ একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা প্রোগ্রামের ফাংশনগুলোর ক্লাসের ইন্টারন্যাল রিপ্রেজেন্টেশনে সরাসরি অ্যাক্সেস রোধ করে। ক্লাস মেম্বারগুলোর অ্যাক্সেস রেস্ট্রিকশন নির্দিষ্ট করা হয় অ্যাক্সেস স্পেসিফায়ার (access specifier) দিয়ে: public, private, protected।
ডিফল্ট অ্যাক্সেস (ক্লাসে) হলো private।
সিনট্যাক্স উদাহরণ
class Base {
public:
// পাবলিক মেম্বার: কোথা থেকে কখনো অ্যাক্সেসযোগ্য
protected:
// প্রোটেক্টেড মেম্বার: ডেরাইভড ক্লাস থেকে অ্যাক্সেসযোগ্য
private:
// প্রাইভেট মেম্বার: শুধু ক্লাস এবং ফ্রেন্ড ফাংশন থেকে অ্যাক্সেসযোগ্য
};
তুলনামূলক ব্যাখ্যা
| অ্যাক্সেস স্পেসিফায়ার | ক্লাসের ভিতর থেকে | ডেরাইভড ক্লাস থেকে | বাহ্যিক কোড (main ইত্যাদি) থেকে |
|---|---|---|---|
| public | ✅ অ্যাক্সেসযোগ্য | ✅ অ্যাক্সেসযোগ্য | ✅ অ্যাক্সেসযোগ্য |
| protected | ✅ অ্যাক্সেসযোগ্য | ✅ অ্যাক্সেসযোগ্য | ❌ অ্যাক্সেসযোগ্য নয় |
| private | ✅ অ্যাক্সেসযোগ্য | ❌ অ্যাক্সেসযোগ্য নয় | ❌ অ্যাক্সেসযোগ্য নয় |
ইনহেরিট্যান্স টাইপ অনুযায়ী বেস ক্লাস মেম্বারের অ্যাক্সেসিবিলিটি
| বেস ক্লাস মেম্বার | public inheritance | protected inheritance | private inheritance |
|---|---|---|---|
| public | public | protected | private |
| protected | protected | protected | private |
| private | অ্যাক্সেসযোগ্য নয় | অ্যাক্সেসযোগ্য নয় | অ্যাক্সেসযোগ্য নয় |
মূল সিদ্ধান্ত:
- public inheritance — "is-a" রিলেশনশিপ (যেমন: Dog is an Animal)। সবচেয়ে সাধারণ।
- protected inheritance — দুর্লভ, মূলত লাইব্রেরি ডেভেলপমেন্টে ব্যবহৃত হয়।
- private inheritance — "is-implemented-in-terms-of" (কম্পোজিশনের বিকল্প)۔ বেস ক্লাসের ইন্টারফেস এক্সপোজ করা না চাইলে।
টিপ: প্রাইভেট মেম্বারকে ডেরাইভড ক্লাস থেকে অ্যাক্সেস করতে চাইলে protected করুন বা পাবলিক/প্রোটেক্টেড গেটার/সেটার দিন।