2011-08-29 19 views
9

क्या डाटा एब्स्ट्रक्शन और सूचना छिपाने में कोई अंतर है? इस लिंक में सभी उत्तरों के माध्यम से जाने के बाद मैं अधिक उलझन में हूं। Abstraction VS Information Hiding VS Encapsulation कोई फर्क नहीं पड़ सका। क्या यह सिर्फ एक प्रक्रिया के रूप में हम एक (जानकारी छिपाने) को लक्ष्य के रूप में & अन्य (अमूर्त) के रूप में कॉल कर सकते हैं? लेकिन यह मेरे लिए कोई संतोषजनक अंतर नहीं है। इसके अलावा, मुझे लगता है कि encapsulation अबास्ट्रक्शन की प्रक्रिया को लागू करने की तकनीक है क्या मैं यहाँ हूँ? सटीक अंतर की व्याख्या करें।सूचना छिपाने और डेटा अमूर्तता में अंतर?

उत्तर

6

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

एक साधारण उदाहरण सी में स्थिरांक परिभाषित कर रहा है, उदाहरण के लिए, #define NAME_SIZE 15 निरंतर के कोड (क्लाइंट) को इसके मूल्य को जानने की आवश्यकता नहीं है, और यदि आप (डिजाइनर) बाद में अपना मूल्य बदलने का निर्णय लेते हैं तो परेशान नहीं होंगे। उन्हें इस तथ्य के बारे में धारणा नहीं लेनी चाहिए कि यह वास्तव में 15 है, क्योंकि आप इसे बदलने का फैसला कर सकते हैं।

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

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

यदि मेरी कार का कार्यान्वयन बदलता है (मैं दहन इंजन से इलेक्ट्रिक या हाइब्रिड में बदल जाता हूं), क्योंकि ड्राइवर के रूप में केवल सीमित इंटरफ़ेस को पता है, मुझे बदलने की जरूरत नहीं है कि मैं कार कैसे चलाता हूं। अमूर्त मुझे सिर्फ इतना पता है मैं एक कार, ड्राइविंग, कर रहा हूँ करने के लिए धातु, रबर के टुकड़े के सैकड़ों के बजाय आदि

जहां छुपा जानकारी थी एक कार के नहीं हिस्सा एक choke valve हो सकता है का एक उदाहरण है। मेरे माता-पिता ने मुझे बताया कि वे कारों में कैसे काम करते थे ... यह एक दहन-इंजन विवरण था, जो एक इलेक्ट्रिक कार में उपयोगी नहीं होगा।

+1

वास्तविक समय उदाहरण समझाते हुए आपके प्रयासों की सराहना करते हैं। धन्यवाद। :) –

1

"सूचना छिपाने" "डेटा अबास्ट्रक्शन" का एक महत्वपूर्ण हिस्सा है, लेकिन पूरी अवधारणा नहीं है।

और याद रखें: आप प्रक्रियात्मक कोड (जैसे "ग्लोबल्स का उपयोग न करें" आदि में "सूचना छिपाने" (फोरट्रान या बेसिक) में "जानकारी छुपाएं" कर सकते हैं - लेकिन आपको "सार डेटा प्रकार" "।

Information hiding और Abstract Data Types निकट से संबंधित हैं, लेकिन वे अलग-अलग अवधारणाएं हैं।

2

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

जानकारी छुपा के उदाहरण नीचे है ... हम अपने हेडर फाइल में एक अंतरफलक है ...

class Coder 
{ 
    public: 
     Coder(); 
     void prints(); 

private: 
     int x; 

}; 

और एक अन्य फ़ाइल में कार्यों के कार्यान्वयन "Coder.cpp"

Coder::Coder 
{ 
x=10;//any int value you can take; 
} 

void Coder::prints()  
{ 
    cout<<x; 
} 

बल्कि दो फ़ाइलों (एक हैडर + एक cpp फ़ाइल) हम एक ही जगह पर यह किया जा सकता है में ऊपर कर tahn है ...। हम निर्माता और हेडर फाइल अपने आप में प्रिंट समारोह की defination दिया सकता है ...

class Coder 
    { 
     public: 
      Coder() 
      { 
       x=10;//any int value you can take; 

      } 
      void prints() 
    { 
      cout<<x; 
     } 

    private: 
      int x; 

    }; 

अगर हम यह किया है हम छुपा जानकारी लागू करने में सक्षम नहीं थे ... और हमारे ग्राहक को पता चल जाएगा कि हम कैसे लागू कर दिया है हमारे कार्यों!

डेटा के लिए absraction आप विचार कर सकते हैं ... ढेर के उदाहरण ...

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

5

डेटा छिपाने की प्रक्रिया वह प्रक्रिया है जिसके द्वारा जावा विधियों और चर के दृश्यता को छिपाने के लिए एक्सेस संशोधक का उपयोग किया जाता है। वे संशोधक का उपयोग करते हैं: सार्वजनिक, निजी और संरक्षित।

अमूर्त वह प्रक्रिया है जिसके द्वारा हम अमूर्त वर्गों और विधियों के सेम द्वारा एक विशिष्ट व्यवहार को परिभाषित करते हैं जो इस वर्ग को विस्तारित करने वाले किसी भी वर्ग के कंकाल का निर्माण करते हैं।

0

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

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

सूचना छिपाने और encapsulation दो तरीके हैं जिनमें एक सार डेटा प्रकार लागू किया जा सकता है। एक अमूर्त डेटा प्रकार को अपने आंतरिक राज्य या इसके encapsulation को छिपाना भी नहीं पड़ सकता है; उदाहरण के लिए, एक अमूर्त के रूप में संख्या int के रूप में लागू की जा सकती है।

संबंधित मुद्दे