Access Specifiers (Contd.) (lecture 22)-18dWcNZ7mR0 21.4 KB
Newer Older
Vandan Mujadia's avatar
Vandan Mujadia committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
प्रोग्रामिंग का भाग 2 में स्वागत है C ++ में।
 हमने इस मॉड्यूल(module) में अलग-अलग एक्सेस(access) स्पेसियर(specifier) पर चर्चा की है, इसलिए एक क्लास(class) के सदस्य के दृश्यता विकल्प।
 हमने सीखा है कि सार्वजनिक और निजी एक्सेस(access) स्पेसियर(specifier) हैं जिनका उपयोग यह नियंत्रित करने के लिए किया जा सकता है कि कौन क्लास(class) के किस हिस्से तक पहुंच सकता है।
 सार्वजनिक विवरणकर्ताओं का अर्थ है कि कोई भी, जो कि कोई वैश्विक कार्य है या कोई अन्य क्लास(class) उस सदस्य तक पहुंच सकता है जिसे सार्वजनिक रूप से निर्दिष्ट किया गया है, लेकिन यदि कुछ सदस्य डेटा(data) सदस्य या विधि को निजी के रूप में निर्दिष्ट किया गया है, तो डेटा(data) सदस्य या विधि को केवल भीतर से ही एक्सेस(access) किया जा सकता है।
 क्लास(class) की परिभाषा या उसी क्लास(class) के अन्य तरीकों से अधिक सटीक है, लेकिन इसे किसी और द्वारा एक्सेस(access) नहीं किया जा सकता है।
 इसके आधार पर हमने जानकारी को छिपाने के सिद्धांत को रेखांकित किया है जहाँ हमने निर्धारित किया है कि हमारे पास हमेशा निजी के रूप में विशेषताएँ या डेटा(data) सदस्य होने चाहिए और वे विधियाँ जो सार्वजनिक रूप से हमें ऑब्जेक्ट(object) के व्यवहार से राज्य की मूल छिपाना दे रही हैं।
 और हमने एक उदाहरण का उपयोग करते हुए देखा है कि यदि आप डेटा(data) सदस्यों को सार्वजनिक रूप से लगाते हैं तो यदि आप क्रियान्वयन को उजागर करते हैं तो कौन-कौन सी कठिनाइयाँ और जोखिम हैं जो एक चलेंगे, इसके बजाय यदि डेटा(data) सदस्य निजी हैं और केवल विधियाँ हैं स्टैक(stack) प्रकार या स्टैक(stack) क्लास(class), पुश(push), पॉप(pop), टॉप(top) और खाली सार्वजनिक हैं तो एक आवेदन मूल रूप से इस बात की परवाह किए बिना स्टैक(stack) का उपयोग करने में सक्षम होगा कि स्टैक(stack) को लिखने की प्रक्रिया में स्टैक(stack) से छेड़छाड़ के किसी भी जोखिम को चलाने के बिना वास्तव में कैसे लागू किया जाता है।
 आवेदन।
 अंत में, हमने दिखाया है कि हेडर और कार्यान्वयन फ़ाइलों के संदर्भ में जानकारी छिपाने के लिए आमतौर पर एक कोड(code) ऑब्जेक्ट(object)-ओरिएंटेड(oriented) C ++ कोड(code) कैसे व्यवस्थित किया जाना चाहिए।
 हम अगली बार एक मुहावरे(idioms) के बारे में बात करेंगे, जिसे आमतौर पर गेट-सेट मुहावरे(idioms) के रूप में जाना जाता है, जिसका उपयोग किसी क्लास(class) या ऑब्जेक्ट(object) के अलग-अलग सदस्यों में ठीक दाने वाले अभिगम नियंत्रण के लिए किया जाता है।
 हम जानते हैं कि हम सभी विशेषताओं को निजी रूप में रखेंगे और हम विधियों को सार्वजनिक रूप से रखेंगे और यह पूरी तरह से डेटा(data) तक पहुंच को प्रतिबंधित करता है, जो कि आपके पास एक चरम सीमा हो सकती है।
 अब आम तौर पर हम इस पहुंच को ठीक करना चाहते हैं और हम चुनिंदा सार्वजनिक सदस्य कार्य प्रदान करना चाहते हैं या फ़ंक्शन(function) पढ़ना या डेटा(data) प्राप्त करना या फ़ंक्शन(function) लिखना या डेटा(data) पर तरीके सेट करना चाहते हैं जिसे हमने उन्हें निजी बनाकर संरक्षित किया है।
 तो, मैं सिर्फ उदाहरण के संदर्भ में पूरे विचार का वर्णन करता हूं, यहां एक क्लास(class) है जो मैं हूं बस इसे एक क्लास MyClass के रूप में कहें जो बहुत महत्वपूर्ण नहीं है।
 चार डेटा(data) मेंबर हैं और मैंने यहां क्लास डेफिनेशन की शुरुआत के बाद किसी भी एक्सेस(access) स्पेसिफायर का इस्तेमाल नहीं किया है, जिसका मतलब है कि डिफ़ॉल्ट रूप से ये डेटा(data) मेंबर्स वहां प्राइवेट होते हैं और इन डेटा(data) मेंबर्स का इरादा इस तरह होता है कि पहले डेटा(data) मेंबर्स पढ़ें लिखना एक डेटा(data) सदस्य है, जैसा कि मैं एक डेटा(data) सदस्य हूं, यह निजी है, इसलिए कोई भी सीधे आ सकता है और इसका मूल्य नहीं बदल सकता है, लेकिन इसके उपयोग के संदर्भ में मैं इसके मूल्य को पढ़ना और लिखना चाहूंगा।
 उदाहरण के लिए, यह एक जटिल संख्या के पुन: घटकों की तरह एक सदस्य है, एक जटिल संख्या के im घटक या तो, मुझे इस घटक के मूल्य को पढ़ने और सेट करने की आवश्यकता होगी यदि मैं एक जटिल संख्या पढ़ रहा हूं।
 यदि मैं एक जटिल संख्या का वर्तमान मूल्य लिख रहा हूं तो मुझे पुनः, im घटक और फिर इसी तरह पढ़ना होगा।
 बड़ी संख्या में डेटा(data) सदस्य कुल सदस्य पढ़े लिखे होने के लिए निकले।
 इसलिए, मुझे कुछ तंत्र प्रदान करने की आवश्यकता है जिसके द्वारा मुझे वह करने में सक्षम होना चाहिए और ऐसा करने का सरल तरीका यह है कि एक जोड़ी गेट-सेट कार्य प्रदान करें।
 क्या मिलता है, सेट फंक्शन करते हैं? इस वेरिएबल पर रीड राइट पर एक गेट फंक्शन का कहना है कि एक नाम getReadWrite है, यह बस इस डेटा(data) मेंबर को लेता है और उसे लौटा देता है।
 इस विधि को सार्वजनिक स्थान पर रखा जाता है, इसलिए किसी भी बाहरी फ़ंक्शन(function) या किसी अन्य क्लास(class) के किसी भी अन्य सदस्य फ़ंक्शन(function) को getReadWrite फ़ंक्शन(function) को मूल रूप से कॉल कर सकते हैं, क्योंकि यह सार्वजनिक स्थान पर उपलब्ध है।
 और यह बदले में निजी सदस्य को एक्सेस(access) करेगा और उसका मूल्य लौटाएगा।
 तो एक तरह से हम इसे चुनिंदा रूप से बाहरी दुनिया के लिए इस मूल्य के नियंत्रण के साथ बना रहे हैं कि जब भी किसी को ऐसा करना हो तो किसी को इस विशेष से गुजरना होगा उदाहरण के लिए, इसे प्राप्त करने के बीच एक मूल अंतर क्या है और हमें यह कहने दें कि मेरे पास एक ऐसा सेट है जो एक मान v ले सकता है और वास्तव में एक विज्ञान है जो डेटा(data) सदस्यों द्वारा पढ़ा जाता है।
 इसलिए मूल रूप से, अगर मुझे दोनों मिल गए हैं गेट और सेट कर दिया गया है, तो मैं पढ़ सकता हूं और साथ ही इस चर को लिख सकता हूं, readwrite।
 अब अब आपको आश्चर्य होगा सवाल है कि आप क्यों चाहते हैं इसे निजी बनाने के लिए और फिर सार्वजनिक तरीकों की एक जोड़ी रखें जो इसे प्राप्त कर सकते हैं और इसे सेट कर सकते हैं, हम बस इसे सार्वजनिक कर सकते हैं और कोई भी इसे बदल सकता है।
 लेकिन हां, पढ़ने लिखने के मामले में यह समान है, लेकिन एक बड़ा अंतर है क्योंकि अगर मैंने इसे सार्वजनिक रूप से रखा तो ऑब्जेक्ट(object) को कभी भी पता नहीं चलेगा, जब यह किया जा रहा है तो यह विशेष डेटा(data) सदस्य पढ़ रहा है या जब यह किया जा रहा है पढ़ें।
 लेकिन अगर यह एक फ़ंक्शन(function) के माध्यम से किया जाता है तो एक विधि है जब इसे पढ़ा जा रहा है तो मैं यहां कुछ गणना भी कर सकता हूं।
 जब लिखा जा रहा है तो मैं इस मूल्य को लिखे जाने से पहले या बाद में कुछ गणना भी कर सकता हूं।
 इसलिए, ऑब्जेक्ट(object) हमेशा इस बात से अवगत रहेगी कि रीड राइट का मूल्य बदल दिया गया है या रीड राइट का मूल्य किसी ने पढ़ लिया है।
 इसलिए, इस डेटा(data) सदस्य को सार्वजनिक पहुंच के रूप में रखना ठीक नहीं है।
 अब, अन्य डेटा(data) सदस्यों के लिए आ रहा है अगर हम अगले एक को देखते हैं जिसे हम बस बनाना चाहते हैं यह केवल पढ़ा।
 इसलिए, किसी भी मॉडल के विभिन्न वास्तविक दुनिया डेटा(data) प्रकारों के संदर्भ में बहुत कुछ है, एन्कैप्सुलेशन हम पाएंगे कि बहुत सारे डेटा(data) हैं जो केवल जन्म तिथि की तरह पढ़ा जाता है।
 किसी व्यक्ति के जन्म की तारीख बदलती नहीं है, इसलिए इसे उस व्यक्ति के लिए ऑब्जेक्ट(object) बनाते समय इसे किसी चीज़ पर सेट किया जाना चाहिए और उसके बाद इसे बदलना संभव नहीं होना चाहिए, इसे नियंत्रित करने का सबसे अच्छा तरीका है कि इसे एक के साथ बनाया जाए निजी पहुंच और फिर उस पर केवल एक फ़ंक्शन(function) प्राप्त करने की अनुमति दें।
 तो, जो किसी को जन्म की तारीख को पढ़ने और संभवतः उस व्यक्ति की आयु की गणना करने या कर्मचारी आईडी पढ़ने और बाहर की जाँच करने, छात्र के रोल नंबर को पढ़ने, और छात्र की ग्रेड खोजने और इतने पर करने की अनुमति देगा।
 ये सभी फ़ंक्शन(function) हमें उस डेटा(data) को प्राप्त करने की अनुमति देंगे, लेकिन उस डेटा(data) को बदलने में सक्षम नहीं होंगे।
 तो, इसका मतलब है कि यह विशेष रूप से अगर मैं सिर्फ प्राप्त फ़ंक्शन(function) प्रदान करता हूं और प्रतिक्रिया देने वाला डेटा(data) केवल डेटा(data) पढ़ा जाता है।
 एक बार जब आप इसे प्राप्त करते हैं, तो जाहिर है कि आराम बहुत सीधे आगे हो जाता है यह सिर्फ सभी संभव संयोजनों को पूरा कर रहा है I एक सही केवल वैरिएबल हो सकता है यदि आपके पास बस उस वैरिएबल पर एक सेट मेथड हो लेकिन कोई तरीका नहीं है तो आश्चर्य न करें कि वेरिएबल केवल लिखा जा सकता है कई वेरिएबल्स होते हैं जिन्हें केवल लिखा जा सकता है।
 एक बहुत ही सामान्य उदाहरण पासवर्ड है, क्योंकि पासवर्ड इतना संवेदनशील है कि आम तौर पर आप किसी भी तंत्र को एक पासवर्ड पढ़ने की अनुमति नहीं देना चाहेंगे, जो आप चाहते हैं, अनुमति देनी पड़ सकती है, पासवर्ड बदलने के लिए एक तंत्र है जरूरत है।
 तो, पासवर्ड एक ऐसी चीज है जिसे आप सिर्फ लिखते हैं आप कभी भी उस मूल्यों को नहीं पढ़ते हैं।
 आप केवल सेट कर सकते हैं और कोई कार्य नहीं कर सकते हैं जो इसे केवल एक लेखन बनाता है।
 इसी तरह, अंतिम समूह में आपके पास स्टैक(stack) या डेटा(data) के शीर्ष जैसे अदृश्य सदस्य हो सकते हैं स्टैक(stack) की सरणी आप यह जानना नहीं चाहते हैं कि स्टैक(stack) उन सभी को कैसे संचालित करता है जो आप जानना चाहते हैं पुश(push), पॉप(pop), टॉप(top) और खाली जो आपको काम करना चाहिए।
 तो, शीर्ष या डेटा(data) के मूल्य को पढ़ने या शीर्ष या डेटा(data) के मूल्य को बदलने / सेट करने के लिए या तो कोई विधि नहीं होनी चाहिए, और इसलिए उस पर कोई सेट-प्राप्त विधियाँ नहीं होनी चाहिए।
 इसलिए, इस सेट-गेट मुहावरे(idioms) के साथ, जैसा कि आप देख सकते हैं कि हम डेटा(data) सदस्यों की पहुँच पर एक बहुत अच्छा अनाज नियंत्रण बना सकते हैं और विभिन्न तरीकों की समान पहुँच भी की जा सकती है, लेकिन निश्चित रूप से गेट-सेट एक विशिष्ट मुहावरा है डेटा(data) सदस्यों के लिए वह काम करता है जो आपको अधिक परिमित चीजें करने की अनुमति देता है।
 साथ में हम इस मॉड्यूल(module) को बंद कर देंगे।
 इस मॉड्यूल(module)में हमने एक्सेस(access) स्पेसर्स को समझा है कि वे क्लास(class) के सदस्यों, सार्वजनिक और निजी लोगों की दृश्यता को नियंत्रित करने में कैसे मदद करते हैं।
 इनका उपयोग किया जा सकता है जैसा कि हमने इंटरफ़ेस के माध्यम से व्यवहार को उजागर करते हुए एक क्लास(class) के कार्यान्वयन के बारे में जानकारी छिपाने के लिए देखा है और हमने विशेष रूप से देखा है कि गेट-सेट के तरीकों को एक विशिष्ट मुहावरे(idioms) का उपयोग अक्सर C ++ में बहुत बढ़िया अनाज नियंत्रण प्रदान करने के लिए किया जाता है।
 आप अपने डिज़ाइन में जो डेटा(data) सदस्य उपलब्ध कराना चाहते हैं, उसके संदर्भ में इंटरफ़ेस।