लगभग यह सब एनकैप्सुलेशन की एक बुनियादी गलतफहमी को दर्शाता है, और यह कैसे लागू होता है।
प्रारंभिक प्रतिक्रिया जिसे आप एनकैप्सुलेशन तोड़ रहे थे, वह सिर्फ गलत है। आपके आवेदन में वेतन वृद्धि / वेतन वृद्धि या जोड़ने / हटाने के बजाय फ्रिज में पनीर के मूल्य को निर्धारित करने की आवश्यकता हो सकती है। इसके अलावा, यह शब्दार्थ नहीं है, इससे कोई फर्क नहीं पड़ता कि आप इसे क्या कहते हैं, यदि आपको उन विशेषताओं को एक्सेस करने और / या बदलने की आवश्यकता है जो आप उन्हें प्रदान करके इनकैप्सुलेशन को नहीं तोड़ते हैं। अंत में, एनकैप्सुलेशन वास्तव में "छिपाना" के बारे में नहीं है, यह राज्य और मूल्यों तक पहुंच को नियंत्रित करने के बारे में है जो कि कक्षा के बाहर सार्वजनिक या हेरफेर करने की आवश्यकता नहीं है, जबकि इसे उन लोगों को प्रदान करना चाहिए जो आंतरिक रूप से उपलब्ध कराए गए कार्य को करना और प्रदर्शन करना चाहिए।
जब कोई मान प्राप्त करने या सेट करने की वैध आवश्यकता होती है, तो एक गेट्टर या सेटर इनकैप्सुलेशन को नहीं तोड़ता है। यही कारण है कि तरीकों को सार्वजनिक किया जा सकता है।
एनकैप्सुलेशन डेटा रखने के बारे में है और विधियाँ जो उस डेटा को सीधे एक तार्किक स्थान, कक्षा में एक साथ संशोधित करती हैं।
इस विशेष मामले में, स्पष्ट रूप से आवेदन में पनीर के मूल्य को बदलने की आवश्यकता है। यह कैसे किया जाता है, इसके बावजूद, जब तक आप ऑब्जेक्ट ओरिएंटेड स्टाइल का पालन नहीं कर रहे हैं, तब तक जब तक आप क्लास में इनकैप्सुलेटेड हैं, तब तक गेट / सेट या ऐड / रिमूव के जरिए।
स्पष्टीकरण के लिए, मैं इस बात का उदाहरण दूंगा कि विधि नाम या तार्किक निष्पादन की परवाह किए बिना पहुँच प्रदान करके कैसे अतिक्रमण को तोड़ा जाता है।
मान लें कि आपके फ्रिज में एक "जीवनकाल" है, फ्रिज से पहले बस कई टिक टिक अब चालू नहीं है (तर्क के लिए, फ्रिज की मरम्मत नहीं की जा सकती)। तार्किक रूप से कोई तरीका नहीं है कि एक उपयोगकर्ता (या आपके बाकी एप्लिकेशन) को इस मूल्य को बदलने में सक्षम होना चाहिए। यह निजी होना चाहिए। यह केवल एक अलग सार्वजनिक विशेषता के माध्यम से दिखाई देगा, जिसे "isWorking" के रूप में जाना जाता है। जब जीवनकाल समाप्त हो जाता है, आंतरिक रूप से फ्रिज सेट झूठी के लिए काम कर रहा है।
जीवन भर की गणना के निष्पादन और इसके आइसिंगिंग स्विच को उतारने से फ्रिज में सभी आंतरिक होते हैं, बाहर कुछ भी नहीं हो सकता है / प्रक्रिया को प्रभावित करने में सक्षम होना चाहिए। isWorking केवल दिखाई देनी चाहिए, इस प्रकार एक गेटक इनकैप्सुलेशन को नहीं तोड़ता है। हालाँकि जीवनकाल की प्रक्रिया के तत्वों के लिए एक्सेसर्स जोड़ने से आपका एनकैप्सुलेशन टूट जाएगा।
ज्यादातर चीजों की तरह, एनकैप्सुलेशन की परिभाषा शाब्दिक नहीं है, यह सापेक्ष है। क्या आपको कक्षा के बाहर एक्स को देखने में सक्षम होना चाहिए? क्या आपको वाई बदलने में सक्षम होना चाहिए? क्या वह सब कुछ है जो इस वर्ग में आपकी वस्तु पर लागू होता है या कार्यक्षमता कई वर्गों में फैली हुई है?
putCheese
फ्रिज में पनीर जोड़ देगा, औरtakeCheese
इसे हटा देगा - ये (उच्च स्तर) डोमेन-ओरिएंटेड एब्स्ट्रक्शन हैं, ऑब्जेक्ट फ़ील्ड गेटर्स एंड सेटर्स (जो (निम्न-स्तरीय) कंप्यूटर प्रोग्रामिंग एब्स्ट्रक्शन हैं) के बजाय।