अनुवादक से। यह मार्क सीमन के ब्लॉग की श्रृंखला की एक अनुवाद है। मैं कुछ पदों को संयोजित नहीं करना चाहता, इस तथ्य के बावजूद कि वे आकार में छोटे हैं, लेकिन सिर्फ मार्क द्वारा प्रस्तावित संरचना का पालन करने का प्रयास करते हैं।अनुवादक से थोड़ा अधिक। पीओके-योके का अनुवाद "मूर्खतापूर्ण" या गलती सहिष्णु के रूप में किया जा सकता है।एनकैप्सुलेशन ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) में सबसे गलतफहमियों में से एक है। ऐसा लगता है कि ज्यादातर लोग सोचते हैं कि, एनकैप्सुलेशन से संबंधित है, "
जानकारी छुपाने " की अवधारणा का सीधा
सा मतलब है कि निजी क्षेत्रों को सार्वजनिक संपत्तियों (या गेट्टर \ सेटर) के माध्यम से उन भाषाओं में खोला जाना चाहिए जिनके पास संपत्ति का समर्थन नहीं है )।
क्या आपने कभी सोचा है कि निम्नलिखित की तरह विरासत कोड का
वास्तविक लाभ क्या है?
private string name; public string Name { get { return this.name; } set { this.name = value; } }
मेरे लिए, यह कोड बहुत अधिक बेमानी लग रहा है (और
स्वचालित गुण उत्तर नहीं हैं, यह केवल कंपाइलर की एक चाल है, जो अभी भी क्षेत्र बनाएगा)। कोई भी जानकारी वास्तव में छिपी नहीं है।
डेरिक बेली ने एक
अच्छी पोस्ट के बारे में लिखा
कि यह एनकैप्सुलेशन विधि बहुत संकीर्ण क्यों है , इसलिए मैंने यहां अपने निष्कर्ष को नहीं दोहराया।
तो एनकैप्सुलेशन का क्या
मतलब है ?
ऑब्जेक्ट ओरिएंटेशन का मुख्य लाभ कोड (वर्गों) के संबंधित टुकड़ों का उत्पादन होता है जो दी गई समस्याओं को एक बार और सभी के लिए हल करता है, ताकि प्रोग्रामर इन कक्षाओं का उपयोग उनके आंतरिक कार्यान्वयन विवरण के बारे में कुछ भी जाने बिना कर सकें।
यह एन्कैप्सुलेशन का पूरा सार है: उपभोक्ता क्षेत्र को पूरी तरह से समझने की आवश्यकता के बिना किसी समस्या के समाधान का एक प्रस्ताव (प्रकटीकरण)।
यहाँ एक अच्छी तरह से डिज़ाइन की गई कक्षाओं की सूची दी गई है:
- SQL सर्वर के साथ संयोजन में ADO.NET का उपयोग करने के लिए आपको किसी तालिका डेटा स्ट्रीम ( TDS ) के आंतरिक विवरण को समझने की आवश्यकता नहीं है।
- WPF या WinForms का उपयोग करने के लिए आपको स्क्रीन पर ड्राइंग के आंतरिक विवरण को समझने की आवश्यकता नहीं है।
- डि कंटेनर का उपयोग करने के लिए आपको प्रतिबिंब के आंतरिक विवरण को समझने की आवश्यकता नहीं है।
- आपको यह समझने की ज़रूरत नहीं है कि .NET फ्रेमवर्क का उपयोग करके सूची को सॉर्ट करने के लिए सूची को कुशलतापूर्वक कैसे सॉर्ट करना है।
- आदि
यह इसकी विशेषता है जो एनकैप्सुलेशन को इतना महत्वपूर्ण बनाता है। वर्ग को उन सूचनाओं को छिपाना चाहिए जो इसे "भोले" उपयोगकर्ताओं से बचाने के लिए एन्क्रिप्ट करती हैं।
विकिपीडिया निम्नलिखित कहता है:किसी ऑब्जेक्ट के इनसाइड्स को छिपाना उसकी अखंडता को सुनिश्चित करता है, उपयोगकर्ताओं को आंतरिक घटक डेटा को असंगत या गलत स्थिति में स्थापित करने से बचाता है।
ध्यान रखें कि उपयोगकर्ताओं
को पूरी तरह से एक वर्ग कार्यान्वयन के आंतरिक को समझने की
उम्मीद नहीं है । इससे एनकैप्सुलेशन की परिभाषा स्पष्ट हो जाती है:
एन्कैप्सुलेशन गलती सहिष्णुता सुनिश्चित करने के लिए एक तंत्र है।
यह इस से पालन नहीं करता है कि एनकैप्सुलेशन का अर्थ है जटिलताओं को छिपाना। जब भी जटिलता छिपी होती है (
जैसा कि प्रदाता पैटर्न के मामले में है ), प्रतिक्रिया समय बढ़ता है। फास्ट फीडबैक को अत्यधिक पसंद किया जाता है, इसलिए जब भी संभव हो फीडबैक में देरी से बचा जाता है।
एनकैप्सुलेशन जटिलता को छिपाने के बारे में नहीं है, बल्कि यह कि दोष-सहिष्णु तरीके से जटिलता को कैसे उजागर किया जाए।
लीन (
अनुवादक का ध्यान दें: एक दुबला सॉफ्टवेयर विकास प्रक्रिया ) में, इसे मूर्खता (
पोका-योक ) के रूप में जाना जाता है, मुझे केवल एक पोका-योक डिज़ाइन के रूप में एनकैप्सुलेशन के बारे में सोचना सही लगता है: एपीआई जो कि कुछ भी गलत करना मुश्किल है। संभव।
यह देखते हुए कि
संकलन सबसे सस्ता फीडबैक तंत्र है , एपीआई को डिजाइन करना बेहतर होता है ताकि कोड केवल तभी संकलित हो सके जब कक्षाएं सही तरीके से उपयोग की जाती हैं। (पी
। रेम। अनुवादक। मुझे लगता है कि यह कहना अधिक सही है: "एपीआई को इस तरह से डिज़ाइन करें (यदि संभव हो तो), यदि इसे गलत तरीके से उपयोग किया जाता है, तो उपयोगकर्ताओं को एक समस्या का संकेत करने वाली संकलन त्रुटियां प्राप्त होती हैं और यदि यह संभव नहीं है, तो इसमें एक सूचना प्राप्त होगी। कार्यक्रम का निष्पादन जितनी जल्दी हो सके। )
पोस्ट की एक श्रृंखला में, मैं विभिन्न "डिज़ाइन ओडर्स" देखूंगा जो कि इनकैप्सुलेशन को तोड़ते हैं और एक गाइड तैयार करते हैं कि डिज़ाइन किए गए कोड को कैसे और अधिक सुरक्षित बनाने के लिए इसे बेहतर बनाया जाए, इस प्रकार "गंध" से सुगंध तक बढ़ रहा है।
- डिजाइन की "गंध": अस्थायी रूप से जुड़ा हुआ है।
- डिजाइन की "गंध": आदिम के साथ एक जुनून।
- कोड गंध: स्वचालित गुण।
- डिजाइन गंध: निरर्थक आवश्यक विशेषता।
- डिजाइन गंध: डिफ़ॉल्ट निर्माता।
पोस्टस्क्रिप्ट:
सीमाओं पर, अनुप्रयोग ऑब्जेक्ट ओरिएंटेड नहीं हैं।