সম্পাদনা করুন: প্রায়শই দীর্ঘ জিজ্ঞাসা পাঠ করা আমার << >> অপারেটরটির ওভারলোডিং এবং classes শ্রেণির বন্ধু হিসাবে যুক্ত করার ধারণাটি পছন্দ হয় তবে আমি নিশ্চিত নই যে এটি কীভাবে ক্যাপসুলেশনটি ভঙ্গ করে না
এটি কীভাবে এনক্যাপসুলেশন ভাঙ্গবে?
আপনি কোনও ডেটা সদস্যের সীমাবদ্ধ অ্যাক্সেসের অনুমতি দিলে আপনি এনক্যাপসুলেশন ভেঙে দেন । নিম্নলিখিত ক্লাস বিবেচনা করুন:
class c1 {
public:
int x;
};
class c2 {
public:
int foo();
private:
int x;
};
class c3 {
friend int foo();
private:
int x;
};
c1
স্পষ্টতই encapsulated হয় না। এতে যে কেউ পড়তে ও পরিবর্তন করতে পারবেন x
। আমাদের কাছে কোনও ধরণের অ্যাক্সেস নিয়ন্ত্রণ কার্যকর করার কোনও উপায় নেই।
c2
স্পষ্টতই encapsulated হয়। এখানে জনসাধারণের অ্যাক্সেস নেই x
। আপনি যা করতে পারেন তা হ'ল foo
ফাংশনটি কল করুন যা ক্লাসে কিছু অর্থপূর্ণ অপারেশন করে ।
c3
? যে কম encapsulated হয়? এটি কি সীমাহীন অ্যাক্সেসের অনুমতি দেয় x
? এটি অজানা ফাংশন অ্যাক্সেস অনুমতি দেয়?
না। এটি ক্লাসের ব্যক্তিগত সদস্যদের অ্যাক্সেস করার জন্য নির্দিষ্টভাবে একটি ফাংশনটিকে অনুমতি দেয় । ঠিক যেমন c2
করেছেন। এবং ঠিক যেমন c2
, যে একটি ফাংশনটিতে অ্যাক্সেস রয়েছে সেটি হ'ল "কিছু এলোমেলো, অজানা ফাংশন" নয়, "ক্লাস সংজ্ঞাতে তালিকাভুক্ত ফাংশন"। ঠিক যেমন c2
, আমরা ক্লাস সংজ্ঞাগুলি দেখে, কার অ্যাক্সেস রয়েছে তার একটি সম্পূর্ণ তালিকা দেখে আমরা দেখতে পাচ্ছি ।
সুতরাং ঠিক কিভাবে এই কম encapsulated হয়? ক্লাসের ব্যক্তিগত সদস্যদের কাছে একই পরিমাণ কোড অ্যাক্সেস রয়েছে। আর সবাই কার কার অ্যাক্সেস আছে বর্গ সংজ্ঞা তালিকাভুক্ত করা হয়।
friend
এনক্যাপসুলেশন ভাঙবে না। এটি কিছু জাভা প্রোগ্রামারদের অস্বস্তি বোধ করে, কারণ যখন তারা "ওওপি" বলে, তখন তাদের আসলে "জাভা" বোঝায় । যখন তারা বলে "encapsulation", তারা মানে না "ব্যক্তিগত সদস্যদের নির্বিচারে ব্যবহারের থেকে রক্ষা করা হবে", কিন্তু "একটি Java শ্রেণি যেখানে শুধুমাত্র এক্সেস ব্যক্তিগত সদস্যদের সক্ষম ফাংশন, বর্গ সদস্য", যদিও এটি সম্পূর্ণ অর্থহীন বিষয় জন্য বিভিন্ন কারণে ।
প্রথমত, ইতিমধ্যে প্রদর্শিত হিসাবে, এটি খুব সীমাবদ্ধ। বন্ধু পদ্ধতির ক্ষেত্রেও এটি করার অনুমতি না দেওয়ার কোনও কারণ নেই।
দ্বিতীয়ত, এটি যথেষ্ট সীমাবদ্ধ নয় । চতুর্থ শ্রেণীর বিবেচনা করুন:
class c4 {
public:
int getx();
void setx(int x);
private:
int x;
};
পূর্ববর্তী জাভা মানসিকতা অনুসারে এটি পুরোপুরি নিবিড়ভাবে আবদ্ধ।
এবং এখনও, এটি একেবারে কাউকে এক্স পড়তে এবং সংশোধন করার অনুমতি দেয় । কীভাবে তা কীভাবে বোঝায়? (ইঙ্গিত: এটি না)
নীচের লাইন: এনক্যাপসুলেশন কোন ফাংশনগুলি ব্যক্তিগত সদস্যদের অ্যাক্সেস করতে পারে তা নিয়ন্ত্রণ করতে সক্ষম হচ্ছে। এটা না অবিকল যেখানে এই ফাংশন সংজ্ঞা অবস্থিত হয় সম্পর্কে।