इस दिलचस्प सूत्र में कुछ उत्तर पहले ही जोड़े जा चुके हैं, हालांकि, मुझे इस बात का असली कारण नहीं मिला कि यह व्यवहार किस तरह से है। मुझे इसे आजमाइए:
पुराने दिनों में
80 के दशक में स्मॉलटाक के बीच और 90 के दशक के मध्य में ऑब्जेक्ट-ओरिएंटेशन की अवधारणा परिपक्व हो गई। सूचना छिपाना, मूल रूप से केवल OO के लिए उपलब्ध एक अवधारणा के रूप में नहीं सोचा गया था (1978 में पहली बार उल्लेख किया गया है), स्मॉलटाक में पेश किया गया था क्योंकि एक वर्ग के सभी डेटा (फ़ील्ड) निजी हैं, सभी विधियाँ सार्वजनिक हैं। 90 के दशक में OO के कई नए विकासों के दौरान, बर्ट्रेंड मेयर ने अपनी ऐतिहासिक पुस्तक ऑब्जेक्ट ओरिएंटेड सॉफ्टवेयर कंस्ट्रक्शन (OOSC) में OO की बहुत सी अवधारणाओं को औपचारिक रूप देने की कोशिश की, जिसके बाद से OO अवधारणाओं और भाषा डिजाइन पर एक (लगभग) निश्चित संदर्भ माना जाता है ।
निजी दृश्यता के मामले में
मेयर के अनुसार एक विधि को वर्गों के एक निर्धारित सेट के लिए उपलब्ध कराया जाना चाहिए (पृष्ठ 192-193)। यह जाहिर तौर पर सूचना छुपाने की एक बहुत बड़ी ग्रैन्युलैरिटी देता है, निम्न सुविधा क्लासए और क्लासबी और उनके सभी वंशजों के लिए उपलब्ध है:
feature {classA, classB}
methodName
मामले में private
वह निम्नलिखित कहता है: स्पष्ट रूप से एक प्रकार की घोषणा के बिना अपनी ही कक्षा में, आप एक योग्य कॉल में उस सुविधा (विधि / क्षेत्र) तक नहीं पहुंच सकते। यानी यदि x
एक चर है, x.doSomething()
अनुमति नहीं है। अयोग्य प्रवेश की अनुमति है, ज़ाहिर है, कक्षा के अंदर ही।
दूसरे शब्दों में: एक ही वर्ग के एक उदाहरण द्वारा उपयोग की अनुमति देने के लिए, आपको स्पष्ट रूप से उस वर्ग द्वारा विधि के उपयोग की अनुमति देनी होगी। इसे कभी-कभी उदाहरण-निजी बनाम कक्षा-निजी कहा जाता है।
प्रोग्रामिंग भाषाओं में उदाहरण-निजी
मुझे वर्तमान में उपयोग में आने वाली कम से कम दो भाषाओं का पता है जो वर्ग-निजी जानकारी छिपाने के विपरीत, उदाहरण-निजी जानकारी को छिपाने का उपयोग करती हैं। एक है एफिल, मेयर द्वारा डिजाइन की गई एक भाषा है, जो OO को उसके चरम चरम पर ले जाती है। रूबी, आजकल एक सामान्य भाषा है। रूबी में, का private
अर्थ है: "इस उदाहरण के लिए निजी" ।
भाषा डिजाइन के लिए विकल्प
यह सुझाव दिया गया है कि संकलक के लिए उदाहरण-निजी की अनुमति देना कठिन होगा। मुझे ऐसा नहीं लगता है, क्योंकि यह केवल विधियों के लिए योग्य कॉल को अनुमति देने या अस्वीकार करने के लिए अपेक्षाकृत सरल है। यदि किसी निजी विधि के लिए, doSomething()
अनुमति दी गई है और x.doSomething()
नहीं है, तो एक भाषा डिजाइनर ने प्रभावी रूप से केवल निजी तरीकों और क्षेत्रों के लिए आवृत्ति-पहुंच को परिभाषित किया है।
तकनीकी दृष्टिकोण से, कोई एक रास्ता या दूसरा चुनने का कोई कारण नहीं है (esp। जब यह विचार करते हुए कि एफिल .नेट IL के साथ ऐसा कर सकता है, यहां तक कि कई विरासत के साथ, इस सुविधा को प्रदान करने का कोई अंतर्निहित कारण नहीं है)।
बेशक, यह स्वाद की बात है और जैसा कि दूसरों ने पहले ही उल्लेख किया है, निजी विधियों और क्षेत्रों के वर्ग-स्तरीय दृश्यता की सुविधा के बिना लिखने के लिए काफी कुछ तरीके कठिन हो सकते हैं।
क्यों C # केवल वर्ग एनकैप्सुलेशन की अनुमति देता है और उदाहरण एनकैप्सुलेशन नहीं
यदि आप उदाहरण के एन्कैप्सुलेशन पर इंटरनेट थ्रेड्स को देखते हैं (एक शब्द कभी-कभी इस तथ्य को संदर्भित करता था कि एक भाषा उदाहरण के स्तर पर पहुंच संशोधक को परिभाषित करती है, जैसा कि कक्षा स्तर के विपरीत), अवधारणा अक्सर पर आधारित होती है। हालाँकि, यह देखते हुए कि कुछ आधुनिक भाषाएँ कम से कम निजी पहुँच संशोधक के लिए उदाहरण encapsulation का उपयोग करती हैं, आपको लगता है कि यह आधुनिक प्रोग्रामिंग दुनिया में उपयोग की जा सकती है और है।
हालाँकि, C # ने अपनी भाषा डिज़ाइन के लिए C ++ और Java में सबसे कठिन रूप से देखा है। जबकि एफिल और मोडुला -3 भी तस्वीर में थे, एफिल की कई विशेषताओं को याद करते हुए (कई विरासत) गायब होने के बारे में मेरा मानना है कि उन्होंने निजी एक्सेस संशोधक के लिए जावा और सी ++ के समान मार्ग चुना।
यदि आप वास्तव में जानना चाहते हैं कि आपको एरिक लिपर्ट, क्रिज़ीस्टोफ़ सेल्विना, एंडर्स हेज़ेल्सबर्ग या किसी और को पकड़ने की कोशिश करनी चाहिए जिसने सी # के मानक पर काम किया। दुर्भाग्य से, मुझे एन # सी # प्रोग्रामिंग लैंग्वेज में एक निश्चित नोट नहीं मिला ।