C ++ एनकैप्सुलेशन (उदाहरणों के साथ)

इस ट्यूटोरियल में, हम उदाहरणों की मदद से C ++ में एनकैप्सुलेशन के बारे में जानेंगे।

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

समान डेटा सदस्यों और फ़ंक्शंस को एक कक्षा में एक साथ करने से डेटा छिपने में भी मदद मिलती है।

सी ++ एनकैप्सुलेशन

सामान्य तौर पर, एनकैप्सुलेशन एक ही स्थान पर समान कोड लपेटने की एक प्रक्रिया है।

C ++ में, हम डेटा सदस्यों और फ़ंक्शंस को बंडल कर सकते हैं जो एक एकल वर्ग के अंदर एक साथ काम करते हैं। उदाहरण के लिए,

 class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );

उपरोक्त कार्यक्रम में, फ़ंक्शन getArea()एक आयत के क्षेत्र की गणना करता है। क्षेत्र की गणना करने के लिए, इसे लंबाई और चौड़ाई की आवश्यकता होती है।

इसलिए, डेटा सदस्यों (लंबाई और चौड़ाई) और फ़ंक्शन getArea()को Rectangleकक्षा में एक साथ रखा जाता है ।

C ++ में एनकैप्सुलेशन

उदाहरण 1: C ++ एनकैप्सुलेशन

 // Program to calculate the area of a rectangle #include using namespace std; class Rectangle ( public: // Variables required for area calculation int length; int breadth; // Constructor to initialize variables Rectangle(int len, int brth) : length(len), breadth(brth) () // Function to calculate area int getArea() ( return length * breadth; ) ); int main() ( // Create object of Rectangle class Rectangle rect(8, 6); // Call getArea() function cout << "Area = " << rect.getArea(); return 0; )

आउटपुट

 क्षेत्र = ४ Area

उपरोक्त उदाहरण में, हम एक आयत के क्षेत्र की गणना कर रहे हैं।

एक क्षेत्र की गणना करने के लिए, हमें दो चर की आवश्यकता है: लंबाई और चौड़ाई और एक फ़ंक्शन getArea():। इसलिए, हमने रेक्टेंगल नामक एकल वर्ग के अंदर इन चरों और फ़ंक्शन को बंडल किया।

यहां, चर और कार्यों को अन्य वर्गों से भी एक्सेस किया जा सकता है। इसलिए, यह डेटा छिपाना नहीं है ।

यह केवल एनकैप्सुलेशन है । हम सिर्फ समान कोड को एक साथ रख रहे हैं।

नोट: लोग अक्सर एनकैप्सुलेशन को डेटा छिपाने के रूप में मानते हैं, लेकिन यह पूरी तरह से सच नहीं है।

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

एनकैप्सुलेशन क्यों?

  • सी ++ में, एनकैप्सुलेशन हमें संबंधित डेटा और कार्यों को एक साथ रखने में मदद करता है, जो हमारे कोड को क्लीनर और पढ़ने में आसान बनाता है।
    • यह हमारे डेटा सदस्यों के संशोधन को नियंत्रित करने में मदद करता है।
      ऐसी स्थिति पर विचार करें जहां हम चाहते हैं कि कक्षा में लंबाई क्षेत्र गैर-नकारात्मक हो। यहां हम लंबाई चर को निजी बना सकते हैं और विधि के अंदर तर्क को लागू कर सकते हैं setAge()। उदाहरण के लिए,
       class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
    • गेट्टर और सेटर फ़ंक्शन हमारे कक्षा के सदस्यों को केवल पढ़ने या लिखने के लिए ही पहुँच प्रदान करते हैं । उदाहरण के लिए,
       getLength() // provides read-only access setLength() // provides write-only access
    • यह एक प्रणाली के घटकों को डिकूप करने में मदद करता है। उदाहरण के लिए, हम कोड को कई बंडलों में एन्क्रिप्ट कर सकते हैं।
      इन अपघटित घटकों (बंडलों) को स्वतंत्र और समवर्ती रूप से विकसित, परीक्षण और डीबग किया जा सकता है। और किसी विशेष घटक में किसी भी परिवर्तन का अन्य घटकों पर कोई प्रभाव नहीं पड़ता है।
    • हम एनकैप्सुलेशन का उपयोग करके डेटा छिपाने को भी प्राप्त कर सकते हैं। में उदाहरण 1 , अगर हम में लंबाई और चौड़ाई चर बदलने privateया protected, तो इन क्षेत्रों में पहुंच प्रतिबंधित है।
      और, उन्हें बाहरी वर्गों से छिपाकर रखा जाता है। इसे डाटा छिपाना कहते हैं ।

    डेटा छिपाना

    डेटा छिपाना कार्यान्वयन विवरण को छिपाकर हमारे डेटा सदस्यों की पहुंच को प्रतिबंधित करने का एक तरीका है। एनकैप्सुलेशन भी डेटा छिपाने का एक तरीका प्रदान करता है।

    हम C ++ में डेटा छिपाने के लिए एक्सेस मॉडिफायर का उपयोग कर सकते हैं। उदाहरण के लिए,

    उदाहरण 2: C ++ डेटा छिपाना निजी स्पेसिफायर का उपयोग करना

     #include using namespace std; class Rectangle ( private: // Variables required for area calculation int length; int breadth; public: // Setter function for length void setLength(int len) ( length = len; ) // Setter function for breadth void setBreadth(int brth) ( breadth = brth; ) // Getter function for length int getLength() ( return length; ) // Getter function for breadth int getBreadth() ( return breadth; ) // Function to calculate area int getArea() ( return length * breadth; ) ); int main() ( // Create object of Rectangle class Rectangle rectangle1; // Initialize length using Setter function rectangle1.setLength(8); // Initialize breadth using Setter function rectangle1.setBreadth(6); // Access length using Getter function cout << "Length = " << rectangle1.getLength() << endl; // Access breadth using Getter function cout << "Breadth = " << rectangle1.getBreadth() << endl; // Call getArea() function cout << "Area = " << rectangle1.getArea(); return 0; )

    आउटपुट

     लंबाई = 8 चौड़ाई = 6 क्षेत्र = 48

    यहां, हमने लंबाई और चौड़ाई के चर बनाए हैं private

    इसका मतलब है कि इन चरों को सीधे Rectangleकक्षा के बाहर नहीं पहुँचा जा सकता है ।

    इन निजी चर का उपयोग करने के लिए हम इस्तेमाल किया है publicकार्यों setLength(), getLength(), setBreadth(), और getBreadth()। इन्हें गेटटर और सेटर फ़ंक्शन कहा जाता है।

    चर को निजी बनाने से हमें कक्षा के बाहर से अनधिकृत पहुंच प्रतिबंधित करने की अनुमति मिली। यह डेटा छिपाना है

    यदि हम main()कक्षा से चर का उपयोग करने का प्रयास करते हैं , तो हमें एक त्रुटि मिलेगी।

     // error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;

दिलचस्प लेख...