"हैलो, अमीगो! मैं आज के व्याख्यान को इनकैप्सुलेशन को समर्पित करना चाहता हूं आपके पास पहले से ही एक सामान्य विचार है कि यह क्या है।"

एनकैप्सुलेशन - 1

तो एनकैप्सुलेशन के क्या फायदे हैं? कई हैं, लेकिन मैं चार का उल्लेख करूंगा जो मेरे विचार में सबसे महत्वपूर्ण हैं:

1) वैध आंतरिक स्थिति।

प्रोग्राम में अक्सर कई वर्ग होते हैं जो एक ही वस्तु के साथ इंटरैक्ट करते हैं। ऑब्जेक्ट के आंतरिक डेटा के साथ एक साथ इंटरैक्ट करके, वे ऑब्जेक्ट की डेटा अखंडता का उल्लंघन कर सकते हैं, जिससे ऑब्जेक्ट ठीक से काम करना बंद कर सकता है।

तो वस्तु को अपने आंतरिक डेटा में किसी भी परिवर्तन को ट्रैक करना चाहिए, या बेहतर अभी तक - यह उन परिवर्तनों को करने वाला होना चाहिए।

यदि हम नहीं चाहते कि कुछ क्लास वेरिएबल को अन्य क्लासेस द्वारा बदला जाए, तो हम इसे प्राइवेट घोषित करते हैं , जिसका अर्थ है कि केवल उस क्लास के तरीके ही इसे एक्सेस कर सकते हैं। यदि हम चाहते हैं कि चर अन्य वर्गों के लिए केवल पढ़ने के लिए हों, तो हम इन चरों में सार्वजनिक गेट्टर जोड़ते हैं।

उदाहरण के लिए, हम चाहते हैं कि हर कोई यह जाने कि हमारे संग्रह में कितने तत्व हैं, लेकिन कोई भी हमारी अनुमति के बिना इसे बदलने में सक्षम नहीं होना चाहिए। इस मामले में, हम एक चर निजी int गिनती और एक विधि public getCount() घोषित करते हैं ।

उचित एनकैप्सुलेशन गारंटी देता है कि अन्य वर्ग सीधे हमारे वर्ग के आंतरिक डेटा तक नहीं पहुंच सकते हैं और परिणामस्वरूप, हम उनके कार्यों को नियंत्रित करने में सक्षम हुए बिना इसे बदल नहीं सकते हैं। उन्हें उस वर्ग पर विधियों को कॉल करना होगा जिसमें वेरिएबल्स शामिल हैं जिन्हें बदला जाएगा।

यह मानना ​​​​सबसे अच्छा है कि अन्य प्रोग्रामर हमेशा आपकी कक्षाओं का उपयोग उस तरीके से करेंगे जो उनके लिए सबसे सुविधाजनक है, न कि उस तरीके से जो आपके (या आपकी कक्षा) के लिए सबसे सुरक्षित होगा। यह बग का स्रोत है, और उन्हें रोकने का एक तरीका है।

2) पैरामीटर जाँच।

कभी-कभी आपको अपनी कक्षा के तरीकों में पारित पैरामीटर की जांच करने की आवश्यकता होती है। उदाहरण के लिए, मान लीजिए कि हमारे पास एक वर्ग है जो एक "व्यक्ति" का प्रतिनिधित्व करता है और आप इसकी जन्मतिथि निर्दिष्ट कर सकते हैं। हमें यह सत्यापित करना चाहिए कि पास किया गया कोई भी डेटा प्रोग्राम के लॉजिक और क्लास के लॉजिक से मेल खाता है। उदाहरण के लिए, कोई 13वां महीना नहीं है, कोई 30 फरवरी नहीं है, आदि।

"कोई 30 फरवरी की जन्मतिथि क्यों बताएगा?"

"ठीक है, सबसे पहले, यह डेटा प्रविष्टि त्रुटि का परिणाम हो सकता है।"

दूसरा, इससे पहले कि कोई प्रोग्राम क्लॉकवर्क की तरह काम करे, उसमें बहुत सारे बग हो सकते हैं। उदाहरण के लिए, ऐसा कुछ हो सकता है।

एक प्रोग्रामर कोड लिखता है जो निर्धारित करता है कि परसों किसका जन्मदिन है। मान लें कि आज 3 मार्च है। कार्यक्रम वर्तमान तिथि में 2 जोड़ता है और 5 मार्च को पैदा हुए सभी लोगों को ढूंढता है। अब तक, बहुत अच्छा।

लेकिन जब 30 मार्च आता है, तो प्रोग्राम को कोई नहीं मिलता, क्योंकि 32 मार्च नहीं होता है।

"मुझे याद है कि जब हमने ArrayList का अध्ययन किया था तो मैंने इसके कोड को देखा था, और यह सुनिश्चित करने के लिए कि इंडेक्स पैरामीटर शून्य से अधिक या बराबर है और सरणी की लंबाई से कम है, यह सुनिश्चित करने के लिए प्राप्त और सेट विधियों में चेक थे। कोड एक फेंक देगा।" अपवाद अगर सरणी में इंडेक्स से संबंधित कोई तत्व नहीं है।

"हाँ, यह क्लासिक इनपुट जाँच है। "

3) कक्षाओं के अंदर कोड बदलते समय कम बग।

मान लीजिए कि हमने एक बड़ी परियोजना के हिस्से के रूप में वास्तव में सहायक कक्षा लिखी है। सभी इसे इतना पसंद करते हैं कि अन्य प्रोग्रामर इसे अपने कोड में सैकड़ों स्थानों पर उपयोग करने लगे।

कक्षा इतनी उपयोगी साबित हुई कि आपने इसे सुधारने का निर्णय लिया। लेकिन अगर आप कक्षा में किसी भी तरीके से छुटकारा पा लेते हैं, तो दर्जनों अन्य प्रोग्रामर के कोड अब संकलित नहीं होंगे। उन्हें जल्दी से अपना कोड फिर से लिखना होगा। और जितना अधिक पुनर्लेखन होता है, बग के लिए उतने ही अधिक अवसर होते हैं। यदि आप नियमित रूप से निर्माण को तोड़ते हैं, तो आप से घृणा की जाएगी।

लेकिन अगर हम निजी के रूप में चिह्नित विधियों को बदलते हैं, तो हम जानते हैं कि इन विधियों को कहीं भी किसी और के कोड द्वारा नहीं कहा जाता है। हम उन्हें फिर से लिख सकते हैं, और संख्या और प्रकार के मापदंडों को बदल सकते हैं, और निर्भर कोड अभी भी काम करेगा। या कम से कम यह अभी भी संकलन करेगा।

4) हम परिभाषित करते हैं कि अन्य वस्तुएँ हमारी वस्तु के साथ कैसे परस्पर क्रिया करेंगी।

हम प्रतिबंधित कर सकते हैं कि हमारी वस्तु पर क्या कार्रवाई की जा सकती है। उदाहरण के लिए, हम चाहते हैं कि एक वर्ग का केवल एक उदाहरण बनाया जाए - भले ही वह परियोजना में एक साथ कई स्थानों पर बनाया गया हो। और हम इसे एनकैप्सुलेशन का उपयोग करके प्राप्त कर सकते हैं।

एनकैप्सुलेशन - 2

एनकैप्सुलेशन हमें अतिरिक्त प्रतिबंध लगाने देता है जो अतिरिक्त लाभों में बदल सकते हैं । उदाहरण के लिए, स्ट्रिंग वर्ग को एक अपरिवर्तनीय वस्तु के रूप में कार्यान्वित किया जाता है। इसके निर्माण और इसके विनाश के बीच स्ट्रिंग वर्ग के उदाहरणों को बदला नहीं जा सकता है। स्ट्रिंग क्लास के सभी तरीके (निकालें, सबस्ट्रिंग, ...) एक नया स्ट्रिंग लौटाते हैं और किसी भी तरह से उस वस्तु को नहीं बदलते हैं जिस पर उन्हें बुलाया जाता है।

"पवित्र गाय। तो यह ऐसा ही है।"

"एनकैप्सुलेशन पेचीदा है।"

"मैं सहमत हूं।"