सूचना गोपनीय

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

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

सूचना छिपाने का एक सामान्य उपयोग डेटा के लिए भौतिक भंडारण लेआउट को छिपाना है ताकि अगर इसे बदला जाए, तो परिवर्तन कुल कार्यक्रम के एक छोटे उपसमुच्चय तक सीमित हो। उदाहरण के लिए, यदि एक त्रि-आयामी बिंदु ($x$, $y$, $z$) को तीन तैरनेवाला स्थल अदिश (कम्प्यूटिंग) चर के साथ एक कार्यक्रम में दर्शाया गया है और बाद में, प्रतिनिधित्व को आकार तीन के एकल सरणी डेटा संरचना चर में बदल दिया गया है,एक मॉड्यूल जिसे सूचना छिपाने के लिए डिज़ाइन किया गया है ध्यान में रखते हुए शेष कार्यक्रम को इस तरह के बदलाव से बचाएंगे।

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

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

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

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

एक इंटरफ़ेस के पीछे सॉफ्टवेयर को एनकैप्सुलेट करना उन वस्तुओं के निर्माण की अनुमति देता है जो वास्तविक दुनिया में वस्तुओं के व्यवहार और परस्पर क्रियाओं की नकल करते हैं। उदाहरण के लिए, एक साधारण डिजिटल अलार्म घड़ी एक वास्तविक दुनिया की वस्तु है जिसे एक साधारण व्यक्ति उपयोग और समझ सकता है। वे समझ सकते हैं कि अलार्म घड़ी क्या करती है, और दिए गए इंटरफ़ेस (बटन और स्क्रीन) के माध्यम से इसका उपयोग कैसे करें, बिना घड़ी के अंदर के हर हिस्से को समझे। इसी तरह, अगर घड़ी को एक अलग मॉडल से बदल दिया गया था, तो सामान्य व्यक्ति इसे उसी तरह से इस्तेमाल करना जारी रख सकता था, बशर्ते कि इंटरफ़ेस उसी तरह काम करता हो।

ऑब्जेक्ट-उन्मुख प्रोग्रामिंग भाषा की अधिक ठोस सेटिंग में, इस धारणा का उपयोग या तो एक सूचना छुपा तंत्र, एक बंडलिंग तंत्र, या दोनों के संयोजन के लिए किया जाता है। (विवरण के लिए संपुटीकरण (ऑब्जेक्ट-उन्मुख प्रोग्रामिंग) देखें।)

इतिहास
सूचना छिपाने की अवधारणा को पहली बार 1972 में डेविड पारनास द्वारा वर्णित किया गया था। इससे पहले, प्रतिरूपकता पर रिचर्ड गौथियर और स्टीफन पोंट ने अपनी 1970 की पुस्तक डिजाइनिंग उप-प्रणाली प्रोग्राम्स में चर्चा की थी, हालांकि मॉड्यूलर प्रोग्रामिंग का उपयोग कई वाणिज्यिक साइटों पर पहले कई वर्षों से किया जा रहा था - विशेष रूप से I/O उप-प्रणालियों और  सॉफ्टवेयर पुस्तकालय  में - इसके अधिग्रहण के बिना 'जानकारी छिपाने' टैग - लेकिन इसी तरह के कारणों के साथ-साथ अधिक स्पष्ट कोड पुन: उपयोग कारण।

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

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

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

इंजीनियरों ने कार को कार्य के टुकड़ों में विभाजित करके डिज़ाइन किया है जो टीमों को सौंपा गया है। प्रत्येक टीम तब अपने सॉफ़्टवेयर घटक को एक विशेष मानक या इंटरफ़ेस के लिए डिज़ाइन करती है जो टीम को घटक के डिज़ाइन में लचीलेपन की अनुमति देता है जबकि एक ही समय में यह सुनिश्चित करता है कि सभी घटक एक साथ फिट होंगे।

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

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

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

यह भी देखें

 * कार्यान्वयन विरासत
 * वंशानुक्रम शब्दार्थ
 * प्रतिरूपकता (प्रोग्रामिंग)
 * अपारदर्शी डेटा प्रकार
 * आभासी विरासत
 * पारदर्शिता (मानव-कंप्यूटर संपर्क)
 * कार्यक्षेत्र (प्रोग्रामिंग)
 * विभागीकरण (सूचना सुरक्षा)
 * डेमेटर का नियम