বেশ কয়েকটি উত্তর ইতিমধ্যে এই আকর্ষণীয় থ্রেডে যুক্ত করা হয়েছে, তবে কেন এই আচরণটি এরকম হওয়ার কারণটির সঠিক কারণ আমি খুব একটা খুঁজে পাইনি । আমাকে একবার চেষ্টা করে দেখুন:
দিনগুলোতে ফিরে যাও
নব্বইয়ের দশকে স্মার্টটাক এবং জাভার 90 এর মাঝামাঝি সময়ে অবজেক্ট-ওরিয়েন্টেশন ধারণাটি পরিপক্ক হয়েছিল। তথ্য গোপন করা, মূলত কেবল ওওর কাছে উপলব্ধ ধারণা হিসাবে ধারণা করা হয়নি (1978 সালে প্রথম উল্লেখ করা হয়েছে), ছোট শ্রেণিতে একটি শ্রেণীর সমস্ত ডেটা (ক্ষেত্র) ব্যক্তিগত, সমস্ত পদ্ধতি জনসাধারণ হিসাবে চালু হয়েছিল। নব্বইয়ের দশকে ওয়ের অনেকগুলি নতুন উন্নয়নের সময়, বার্ট্র্যান্ড মায়ার তাঁর ল্যান্ডমার্ক বই অবজেক্ট ওরিয়েন্টেড সফটওয়্যার কনস্ট্রাকশন (ওওএসসি) -তে বেশিরভাগ ওও ধারণাগুলিকে আনুষ্ঠানিক করার চেষ্টা করেছিলেন যা তখন থেকে ওও ধারণা এবং ভাষা নকশার (প্রায়) চূড়ান্ত রেফারেন্স হিসাবে বিবেচিত হয় ।
বেসরকারী দৃশ্যমানতার ক্ষেত্রে
মায়ারের মতে একটি পদ্ধতি ক্লাসের একটি সংজ্ঞায়িত সেট (1922-23 পৃষ্ঠা) এ উপলব্ধ করা উচিত। এটি স্পষ্টতই তথ্য গোপনের খুব উচ্চতর গ্রানুলারিটি দেয়, নিম্নলিখিত বৈশিষ্ট্যটি ক্লাসএ এবং ক্লাসবি এবং তাদের সমস্ত বংশধরদের জন্য উপলব্ধ:
feature {classA, classB}
methodName
private
তিনি নিম্নলিখিত ক্ষেত্রে বলেছেন: কোনও প্রকারটিকে তার নিজস্ব শ্রেণীর কাছে দৃশ্যমান হিসাবে স্পষ্টভাবে ঘোষণা না করে আপনি কোনও যোগ্য কলটিতে সেই বৈশিষ্ট্যটি (পদ্ধতি / ক্ষেত্র) অ্যাক্সেস করতে পারবেন না। অর্থাৎ যদি x
পরিবর্তনশীল হয় তবে এটি x.doSomething()
অনুমোদিত নয়। অযোগ্য অ্যাক্সেস অনুমোদিত, অবশ্যই শ্রেণীর মধ্যেই।
অন্য কথায়: একই শ্রেণীর উদাহরণ দিয়ে অ্যাক্সেসের অনুমতি দেওয়ার জন্য আপনাকে সেই শ্রেণীর মাধ্যমে পদ্ধতিটি অ্যাক্সেসের স্পষ্টভাবে অনুমতি দিতে হবে। এটিকে কখনও কখনও ক্লাস-প্রাইভেট বনাম উদাহরণ-প্রাইভেট বলা হয়।
প্রোগ্রামিং ভাষায় ইনস্ট্যান্স-প্রাইভেট
আমি বর্তমানে কমপক্ষে দুটি ভাষার ব্যবহার জানি যা ক্লাস-প্রাইভেট তথ্য গোপনের বিপরীতে লুকিয়ে থাকা উদাহরণ-প্রাইভেট তথ্য ব্যবহার করে use একটি হ'ল আইফেল, মায়ার দ্বারা ডিজাইন করা একটি ভাষা, যা ওওকে চূড়ান্ত পর্যায়ে নিয়ে যায়। অন্যটি রুবি, আজকাল অনেক বেশি সাধারণ ভাষা। রুবিতে, এর private
অর্থ: "এই উদাহরণটিতে ব্যক্তিগত" ।
ভাষা নকশা জন্য পছন্দ
এটি প্রস্তাবিত হয়েছে যে উদাহরণ-বেসরকারীকে অনুমতি দেওয়া সংকলকটির পক্ষে শক্ত হবে। আমি এটি মনে করি না, কারণ পদ্ধতিগুলিতে কেবল যোগ্য কলগুলি অনুমতি দেওয়া বা বর্জন করা তুলনামূলক সহজ। যদি কোনও ব্যক্তিগত পদ্ধতির doSomething()
জন্য অনুমোদিত হয় এবং x.doSomething()
তা না হয় তবে কোনও ভাষা ডিজাইনার কার্যকরভাবে ব্যক্তিগত পদ্ধতি এবং ক্ষেত্রগুলির জন্য কেবলমাত্র অ্যাক্সেসযোগ্যতার সংজ্ঞা দিয়েছেন।
প্রযুক্তিগত দৃষ্টিকোণ থেকে, কোনও উপায় বা অন্য কোনও উপায় বাছাই করার কোনও কারণ নেই (উদাহরণস্বরূপ, যখন বিবেচনা করা হচ্ছে যে আইফেল ডট নেট একাধিক উত্তরাধিকার সহ আইএল দিয়ে এটি করতে পারে তবে এই বৈশিষ্ট্যটি সরবরাহ না করার কোনও সহজাত কারণ নেই)।
অবশ্যই এটি স্বাদের বিষয় এবং অন্যরা যেমন ইতিমধ্যে উল্লেখ করেছে, ব্যক্তিগত পদ্ধতি এবং ক্ষেত্রগুলির শ্রেণিক স্তরের দৃশ্যমানতার বৈশিষ্ট্য ব্যতীত বেশ কয়েকটি পদ্ধতি রচনা করা আরও কঠিন হতে পারে।
কেন সি # কেবল শ্রেণীর এনক্যাপসুলেশনকে মঞ্জুরি দেয় এবং এনক্যাপসুলেশন নয় instance
আপনি উদাহরণস্বরূপ এনক্যাপসুলেশনে ইন্টারনেট থ্রেডগুলি লক্ষ্য করেন (এমন একটি শব্দ যা মাঝে মাঝে শ্রেণি স্তরের বিপরীতে উদাহরণস্বরূপ কোনও ভাষা অ্যাক্সেস সংশোধককে সংজ্ঞায়িত করে এমন একটি শব্দটি বোঝাতে ব্যবহৃত হয়), ধারণাটি প্রায়শই নকল করা হয়। তবে, কিছু আধুনিক ভাষাগুলি উদাহরণস্বরূপ এনক্যাপসুলেশন, কমপক্ষে ব্যক্তিগত অ্যাক্সেস সংশোধকর জন্য ব্যবহার করে তা বিবেচনা করে আপনি আধুনিক প্রোগ্রামিং বিশ্বে এটি হতে পারে এবং এর ব্যবহার হতে পারে think
তবে, সি # এর ভাষা নকশার জন্য C ++ এবং জাভাতে দৃly়ভাবে দেখেছেন। আইফেল এবং মডিউলা -3 ছবিতে ছিলাম, আইফেলের নিখোঁজ হওয়া বহু বৈশিষ্ট্য বিবেচনা করে (একাধিক উত্তরাধিকার) আমি বিশ্বাস করি যে যখন এটি ব্যক্তিগত অ্যাক্সেস মডিফায়ারে আসে তখন তারা জাভা এবং সি ++ হিসাবে একই পথটি বেছে নিয়েছিল।
আপনি যদি সত্যিই কেন জানতে চান যে আপনি কেন এরিক লিপার্ট, ক্রিজিস্টফ কোয়ালিনা, আন্ডারস হেজলসবার্গ বা অন্য কেউ সি # এর মান নিয়ে কাজ করেছেন তাদের ধরে রাখার চেষ্টা করা উচিত। দুর্ভাগ্যক্রমে, আমি বর্ণিত দ্য সি # প্রোগ্রামিং ল্যাঙ্গুয়েজে একটি নির্দিষ্ট নোট খুঁজে পাইনি ।