8

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

तुम मुझे दिखा सकते हैं कुछ शक्तिशाली कायल छुपा जानकारी के माध्यम से कैप्सूलीकरण के लाभों के उदाहरण में?

उत्तर

20

उदाहरण मेरा पहला OO वर्ग में दी गई:

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

आपका वीसीआर इस इंटरफेस को लागू किया और छिपा दिया या समझाया यांत्रिक ड्राइव और टेप के विवरण।

एक मीडिया प्लेयर के एक नए कार्यान्वयन आता है (जैसे कि एक डीवीडी प्लेयर, जो बल्कि टेप से डिस्क का उपयोग करता है) यह कार्यान्वयन मीडिया प्लेयर में समझाया की जगह ले सकता है और उपयोगकर्ताओं को बस के रूप में इसका उपयोग जारी रख सकते हैं कि वे उनके वीसीआर के साथ किया (समान ऑपरेशन जैसे प्ले, पॉज़ इत्यादि ...)।

यह जानकारी छुपा के माध्यम से अमूर्त की अवधारणा है। यह कोड के कम coupling को जानने और प्रचार करने के बिना कार्यान्वयन विवरण बदलने की अनुमति देता है।

0

क्या? आप अभी तक आश्वस्त नहीं हैं?

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

इसके अलावा, यदि आप दुनिया में कोड के प्रत्येक टुकड़े को विशिष्ट ठोस वर्गों के कार्यान्वयन पर निर्भर करते हैं तो आप वास्तव में कुछ अमूर्त नहीं कर सकते हैं।

9

* एक इकाई ("फाइलें, पाइप, सॉकेट, टीटीआई इत्यादि) के एक निक्स में (" सबकुछ एक फाइल है ") मॉडल के व्यापक रूप से लागू करने के लिए उपकरण की एक विस्तृत श्रृंखला को अनुमति देता है डेटा स्रोतों/सिंकों की एक श्रृंखला इस तरह से है कि encapsulation के बिना बस संभव नहीं होगा।

इसी तरह, विभिन्न भाषाओं में धाराओं, सूचियों, सरणियों, फ़ाइलों पर सार संक्षेप की अवधारणा, आदि

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

0

दुनिया में लगभग हर जावा, सी #, और सी ++ कोड बेस में जानकारी छिपी हुई है: यह निजी के रूप में सरल है: कक्षाओं के वर्ग।

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

+0

मुझे नहीं पता कि मैं कहूंगा कि "कोड के शेष कोड के बारे में चिंता करने की आवश्यकता के बिना" कहने के लिए मैं अब तक जाऊंगा। केवल निजी सदस्यों को बदलने के दौरान आप निश्चित रूप से संकलन तोड़ सकते हैं। जब तक आप बाहरी इंटरफ़ेस नहीं बदलते हैं तब तक एक वर्ग के आंतरिक भाग को पूरी तरह से लिखने में सक्षम होने के साथ-साथ लाभ अधिक होता है। यह कुछ प्रकार के अनुकूलन के लिए बहुत अच्छा है। – Toji

2

मुझे पता है कि पहले से ही एक स्वीकृत जवाब है, लेकिन मैं एक और वहाँ बाहर फेंक करना चाहता था: ओपन/DirectX

न तो इन एपीआई के पूर्ण कार्यान्वयन हैं (हालांकि DirectX निश्चित रूप से थोड़ा अधिक है कि संबंध में ऊपर से भारी है), लेकिन बजाय ग्राफिक्स कार्ड में कमांड कमांड संचार करने के जेनेरिक तरीके।

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

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

जब आप इसे इस तरह देखते हैं, तो यह जल्दी से स्पष्ट हो जाता है कि कुछ प्रकार के encapsulation/abstraction कंप्यूटरों के बिना हम उन्हें आज जानते हैं बस काम नहीं करेंगे। क्या यह आपके लिए पर्याप्त शानदार है?