"डेटा छिपाने" और "एनकैप्सुलेशन" के बीच अंतर क्या है?


29

मैं "जावा कंसीडर इन प्रैक्टिस" पढ़ रहा हूं और कहा जाता है: "सौभाग्य से, वही ऑब्जेक्ट-ओरिएंटेड तकनीकें जो आपको अच्छी तरह से संगठित, रख-रखाव वाली कक्षाएं लिखने में मदद करती हैं - जैसे कि एनकैप्सुलेशन और डेटा छिपाना-थ्रेड को सुरक्षित बनाने में भी आपकी मदद करता है। कक्षाएं। "

समस्या # 1 - मैंने डेटा छिपाने के बारे में कभी नहीं सुना और यह नहीं जानता कि यह क्या है।

समस्या # 2 - मैंने हमेशा सोचा था कि एनकैप्सुलेशन निजी बनाम सार्वजनिक का उपयोग कर रहा है, और वास्तव में डेटा छुपा रहा है।

क्या आप बता सकते हैं कि डेटा छिपाना क्या है और यह एनकैप्सुलेशन से कैसे भिन्न है?


2
कोड पूरा द्वितीय संस्करण पढ़ें । यह आपके कई सवाल का जवाब देगा।
शिप्लू मोकादिम

जानकारी छिपाने के बारे में, देखें: javaworld.com/jw-05-2001/jw-0518-encapsulation.html
डेव जार्विस

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

जवाबों:


19

डेटा और सूचना छिपाना एक व्यापक धारणा है, जो कंप्यूटर विज्ञान और सॉफ्टवेयर इंजीनियरिंग में पाया जाता है। यह इस तथ्य को संदर्भित करता है कि कंप्यूटर प्रोग्राम का वह हिस्सा जो बदल सकता है, अन्य मॉड्यूल / क्लाइंट से सुलभ नहीं होना चाहिए।

एनकैप्सुलेशन एक शब्द है जो ऑब्जेक्ट-ओरिएंटेड प्रतिमान में पाया जाता है और डेटा को निजी क्षेत्रों में रखने और इसे केवल तरीकों से संशोधित करने के लिए संदर्भित करता है।

इस प्रकार एनकैप्सुलेशन को ऑब्जेक्ट-ओरिएंटेड सिस्टम में डेटा छुपाने के तरीके के रूप में देखा जा सकता है


1
जवाब देने के लिए धन्यवाद। मुझे अभी भी समझ में नहीं आया, कि अगर डेटा छिपाना एक जैसा है, लेकिन एनकैप्सुलेशन की तुलना में बस थोड़ा व्यापक है, तो इसे पुस्तक में संदर्भित किया जाता है जैसे कि वे समान व्यापकता के थे और दूसरे सहित कोई भी नहीं।
ढाबा

लेखक शायद डेटा छुपा और जानकारी को इस अर्थ में छिपाते हैं कि डेटा छिपाना केवल डेटा संरचनाओं को छिपाता है - निजी क्षेत्र - जबकि जानकारी छिपाना केवल विवरणों के लिए किया जा रहा कार्यान्वयन विवरण (उदाहरण के लिए उपयोग किए गए एल्गोरिदम) को संदर्भित कर सकता है।
m3th0dman 16

2
आपके पास एक के बिना हो सकता है - पायथन को देखें, जहां कोई भी डेटा छिपा नहीं है (निजी या संरक्षित विशेषता जैसी कोई चीज नहीं है)।
लैट्टी

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

1
एनकैप्सुलेशन निजी क्षेत्र में डेटा नहीं रख रहा है, यह अधिक जानकारी छिपाना है। एनकैप्सुलेशन, एक सामान्य तरीके से, एक साथ एक कक्षा में सूचना / डेटा और तरीकों को एक साथ रखने की अवधारणा है।
nbr

6

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

एब्स्ट्रेक्शन और एनकैप्सुलेशन पूरक अवधारणाएं हैं: एब्स्ट्रेक्शन किसी ऑब्जेक्ट के अवलोकनीय व्यवहार पर केंद्रित होता है, जबकि एनकैप्सुलेशन कार्यान्वयन पर ध्यान केंद्रित करता है जो इस व्यवहार को जन्म देता है। एन्कैप्सुलेशन को अक्सर सूचना छिपाने (न केवल डेटा छिपाना) के माध्यम से प्राप्त किया जाता है, जो किसी वस्तु के सभी रहस्यों को छिपाने की प्रक्रिया है जो इसकी आवश्यक विशेषताओं में योगदान नहीं करता है; आमतौर पर, किसी ऑब्जेक्ट की संरचना छिपी होती है, साथ ही इसके तरीकों का कार्यान्वयन भी होता है।


5

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


4

से विकिपीडिया :

एक प्रोग्रामिंग भाषा में, एनकैप्सुलेशन का उपयोग दो संबंधित लेकिन अलग-अलग धारणाओं में से एक को संदर्भित करने के लिए किया जाता है, और कभी-कभी इसके संयोजन के लिए:

  • ऑब्जेक्ट के कुछ घटकों तक पहुंच को प्रतिबंधित करने के लिए एक भाषा तंत्र
  • एक भाषा निर्माण जो उस डेटा पर काम करने वाले तरीकों (या अन्य कार्यों) के साथ डेटा के बंडलिंग की सुविधा देता है

कुछ प्रोग्रामिंग भाषा शोधकर्ता और शिक्षाविद ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की एक विशिष्ट विशेषता के रूप में अकेले या दूसरे के साथ संयोजन में पहले अर्थ का उपयोग करते हैं, जबकि अन्य प्रोग्रामिंग भाषाएं जो वस्तुगत अभिविन्यास के रूप में भाषा ऑर्थोगोनल की एक विशेषता के रूप में लेक्सिकल क्लोजर व्यू एन्कैप्सुलेशन प्रदान करती हैं।

दूसरी परिभाषा इस तथ्य से प्रेरित है कि कई ओओपी भाषाओं में घटकों को छिपाना स्वचालित नहीं है या उन्हें ओवरराइड किया जा सकता है; इस प्रकार, सूचना छिपाई को दूसरी परिभाषा पसंद करने वालों द्वारा एक अलग धारणा के रूप में परिभाषित किया गया है।


आपके जवाब के लिए धन्यवाद। एक अनुवर्ती प्रश्न: 1) क्या जावा प्रोग्रामिंग भाषा में ऐसी सुविधाएं हैं जो एनकैप्सुलेशन से संबंधित दूसरी धारणा है? 2) मुझे समझ में नहीं आता है कि डेटा छिपाना मायने क्यों रखता है। उदाहरण के लिए जावा में आप प्रतिबिंब के माध्यम से किसी भी क्षेत्र (सार्वजनिक या निजी) तक पहुँच सकते हैं।
ढबला

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

2

वे अक्सर चर्चा में विनिमेय रूप से उपयोग किए जाते हैं, और अक्सर मुझे लगता है कि वे एक ही उद्देश्य को प्राप्त करने के लिए एक साथ काम करते हैं, और जबकि निम्नलिखित पूरी तरह से सटीक नहीं हो सकता है, यह कुछ सार्थक अंतर प्रदान कर सकता है, अगर कोई भेद करने की आवश्यकता है:

जब एन्कैप्सुलेशन के बारे में बात की जाती है, तो अक्सर इसे एक प्रक्रियात्मक / कार्यात्मक तंत्र के रूप में लागू किया जाता है। अंतर्निहित स्थिति के लिए कुछ प्रकार के गार्ड हैं, और गार्ड के माध्यम से पहुंच के लिए कुछ प्रोटोकॉल का उपयोग करने की आवश्यकता होती है, जिसे एक्सेस दिया जाना चाहिए (वांछित राज्य को पढ़ें या परिवर्तित करें)। इनकैप्सुलेशन भी पहुंच के कारण होने वाले दुष्प्रभावों के लिए अवसर प्रदान करता है (जैसे कैस्केडिंग राज्य परिवर्तन, या अधिसूचना / किसी घटना को उठाना / एक संकेत जारी करना जब ब्याज की चीज पढ़ी या बदल दी जाती है) तो अनुवर्ती कार्रवाई शुरू की जा सकती है। फिर, मैं अक्सर एक अवधारणा के रूप में एनकैप्सुलेशन के बारे में सोचता हूं जो एक ऐसी चीज है जिसे एक प्रक्रिया के रूप में लागू किया जाता है।

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


0

वे अक्सर, शायद आमतौर पर, परस्पर विनिमय करते हैं। लेकिन ध्यान दें कि बूच के ऊपर उद्धरण कहते हैं, " जानकारी छिपाने के माध्यम से अक्सर एनकैप्सुलेशन प्राप्त किया जाता है ..." अर्थात सबसे अधिक बार, लेकिन हर मामले में हमेशा नहीं।

ध्यान दें कि अजगर कक्षाओं में डेटा रोल करने की अनुमति देता है, लेकिन निजी चर की अनुमति नहीं देता है। तो यह कहा जा सकता है कि पायथन डेटा छुपाए बिना एनकैप्सुलेशन प्रदान करता है।

आप अपने सभी सदस्य चर बनाकर जावा में एक ही काम कर सकते हैं public, लेकिन हर किसी को दिल का दौरा देने से अलग, आप डेटा छिपाने का लाभ ढीला कर देंगे ... अर्थात किसी वस्तु के शब्दार्थ को उसके राज्य में पहुंच को प्रतिबंधित करके संरक्षित करना।


0

OO में, एनकैप्सुलेशन वह जगह है जहाँ सूचना किसी वस्तु के भीतर होती है। उदाहरण के लिए, एक Personएक है nameऔर व्यक्ति के ग्राहकों (आप IE) पता है कि व्यक्ति एक नाम रखती है, या तो सार्वजनिक क्षेत्रों या एक्सेसर विधियों के माध्यम से। और, उम्मीद है, आपको नामों के कुछ वैश्विक सरणी आदि में भी नाम रखने की आवश्यकता नहीं है, इसलिए असहनीय स्पेगेटी कोड से बचने के लिए यह एक बड़ा कदम है। लेकिन ग्राहक को अभी भी कुछ जानने की जरूरत है कि व्यक्ति नाम कैसे संभालता है: जैसे अंतरिक्ष या अल्पविराम सीमांकित?

डाटा छुपाने वह जगह है जहाँ Personएक नाम क्षेत्र है, लेकिन, सिद्धांत रूप में कम से कम, कोई नहीं जानता । यह क्षेत्र निजी है जिसमें कोई सार्वजनिक अभिगम विधि नहीं है। ग्राहक एक डेटाबेस रिकॉर्ड, XML, HTTP POST, जो भी हो, से एक नाम पारित कर सकते हैं, लेकिन व्यक्ति किस तरह से नाम को संभालता है इसका आंतरिक कार्य "ब्लैक बॉक्स" है। व्यक्ति के भविष्य के कार्यान्वयन को बदलने के लिए स्वतंत्र हैं, उदाहरण के लिए, ए firstNameऔर ए पर स्विच करने के लिए lastName

एक आदर्श दुनिया में डेटा छिपाना एनकैप्सुलेशन से बेहतर है, लेकिन सभी दुनिया आदर्श नहीं हैं। :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.