Hiding complex implementation c++ In Hindi
C++ प्रोग्रामिंग लैंग्वेज OOPS ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में किसी यूजर डिफाइन कॉम्प्लेक्स क्लास इम्प्लीमेंटेशन को हाइड करना एक एसेंशियल और इम्पोर्टेन्ट प्रोग्रामिंग फीचर्स या कॉन्सेप्ट है. जो एक रुट या बेस क्लास में एनकैप्सुलेशन और क्लास में मल्टीप्ल डिराइव्ड क्लास सबक्लास एब्स्ट्रैक्शन कांसेप्ट को इनक्रीस करता है। यह फीचर्स C++ यूज़र्स को इंटरनल कम्प्लेक्सिटी को जाने बिना एक इजी क्लास इंटरफ़ेस का यूज़ करके सिस्टम के साथ डायरेक्ट इंटरैक्ट करने में हेल्प करता है। इसे ज्यादातर C++ में “ब्लैक बॉक्स” प्रिंसिपल कांसेप्ट के रूप में जाना जाता है. जहाँ किसी क्लास की इम्प्लीमेंटेशन डिटेल्स हाइड की जाती हैं, और सिर्फ़ जरूरत पड़ने पर एसेंशियल डिटेल्स ही डिस्प्ले होती हैं।

the concept of hiding class implementations is implemented using several mechanisms In C++.
- Encapsulation – एन्काप्सुलेशन फीचर्स में मौजूदा क्लास ऑब्जेक्ट्स के अंदर डेटा टाइप को हाइड करना और क्लास मेथड्स के माध्यम से उन्हें डाटा मेंबर्स की एक्सेस को प्रोवाइड करना।
- Abstraction – सिर्फ़ एसेंशियल क्लास इंटरफ़ेस में (जिसमे डिफाइन पब्लिक क्लास मेथड्स) को प्रोवाइड करना और क्लास इम्प्लीमेंटेशन डिटेल्स (जिसमे एसेंशियल प्राइवेट डिफाइन क्लास मेथड्स और डेटा टाइप) मेंबर्स को सामान्य यूजर से हाइड करना।
- Pimpl Idiom (Pointer to Implementation) – मौजूदा क्लास में इम्प्लीमेंटेशन डिटेल्स को हाइड करना, क्लास प्रोग्राम सोर्स कोड कम्पाइलेशन टाइम को इम्प्रूव करने और C++ प्रोग्राम हेडर और सोर्स कोड फ़ाइलों के बीच कपलिंग को कम करने के लिए एक आम C++ प्रोग्रामिंग टेक्निक या कांसेप्ट है।
- Private and Protected Access Specifiers – यह मौजूदा क्लास में एक्सेस कंट्रोल कीवर्ड्स जैसे (प्राइवेट, प्रोटेक्टेड, पब्लिक) डाटा मेंबर्स एक्सेस मेथड का यूज़ करके क्लास डाटा टाइप पैरामीटर वेरिएबल डाटा मेंबर्स तक एक्सेस को ब्लॉक करना।
A special concept for hiding complex implementations in C++ programming.
Encapsulation concept in C++.
C++ प्रोग्राम में एनकैप्सुलेशन एक ऐसी टेक्निक या कांसेप्ट है, जिसमें यूजर डिफाइन क्लास डेटा टाइप मेंबर्स और उस डेटा पर काम करने वाले कस्टम क्लास मेथड को एक ही यूनिट या क्लास में बंडल कर ग्रुप किया जाता है।
यह किसी भी यूजर डिफाइन कस्टम क्लास के इंटरनल प्रोसेस को एक्सटर्नल वर्ल्ड से हाइड करने में हेल्प करता है, और सिर्फ़ यूजर डिफाइन पब्लिक क्लास मेथड के माध्यम से ही एसेंशियल क्लास फंक्शनैलिटी को डिस्प्ले करता है।
Abstraction concept in C++.
C++ प्रोग्राम में एब्स्ट्रैक्शन कांसेप्ट किसी यूजर डिफाइन क्लास ऑब्जेक्ट के साथ डायरेक्ट इंटरैक्ट करने के लिए एक क्लियर और इजी इंटरफ़ेस प्रोवाइड करने पर फ़ोकस करता है. जबकि क्लास की इम्प्लीमेंटेशन डिटेल्स को हाइड बनाए रखता है।
मौजूदा क्लास में यूज़ एब्स्ट्रैक्शन मेथड यह फिक्स करता है कि क्लास यूज़र को सिर्फ़ यह पता है कि मौजूदा क्लास में डिफाइन मल्टीप्ल इंडिविजुअल क्लास ऑब्जेक्ट क्या करता है, यह नहीं कि वह क्लास में ये सब टास्क कैसे करता है।
Class data members concept of access control (public, private, protected) in C++.
- Public – किसी क्लास में डिफाइन डिक्लेअर पब्लिक क्लास डाटा मेंबर्स को बेस या सबक्लास में कहीं से भी कॉल या एक्सेस और डायरेक्ट मैनेज किया जा सकता हैं।
- Private – यूजर डिफाइन क्लास डाटा टाइप पैरामीटर मेंबर्स को सिर्फ़ उसी क्लास के अंदर से ही एक्सेस और मैनेज किया जा सकता हैं। यह किसी क्लास में उसकी इम्प्लीमेंटेशन डिटेल्स को हाइड करने के लिए यूज़ किया जाने वाला एक इम्पोर्टेन्ट टूल है।
- Protected – प्रोटेक्टेड क्लास डाटा वेरिएबल मेंबर्स क्लास और डिराइव्ड क्लास के अंदर से ही एक्सेस और मैनेज किए जा सकते हैं।
The concept of hiding a complex implementation using the encapsulation method in C++.
तो चलिए C++ प्रोग्रामिंग में एक UserAccount क्लास का एक इजी एक्साम्प्ल क्रिएट करते हैं। जिसमे हम इंटरनल यूजर अकाउंट डिपाजिट बैलेंस और उसे मॉडिफाई करने के लॉजिक को हाइड कर देंगे, और यूजर अकाउंट में पैसे डिपाजिट करने और विथड्रॉल के लिए सिर्फ़ एक आसान इंटरफ़ेस के साथ उसे डिस्प्ले करेंगे।
Example of hiding a complex implementation using the encapsulation concept.
#include <iostream>
#include <string>
using namespace std;
class UserAccount {
private:
double Acbalance; // here we define a private class member to hide the internal variable state
// here we create Private isValidAmount function to validate the amount
bool isValidAmount(double dpMoney) {
return dpMoney > 0;
}
public:
// here we create class Constructor method
UserAccount(double initial_Acbalance) : Acbalance(initial_Acbalance) {}
// here we define class Public methods to interact with the Account balance class members
void deposit(double dpMoney) {
if (isValidAmount(dpMoney)) {
Acbalance += dpMoney;
cout << “Deposited Amount is – ” << dpMoney << endl;
} else {
cout << “Invalid account deposit amount is -” << endl;
}
}
void withdraw(double dpMoney) {
if (isValidAmount(dpMoney) && Acbalance >= dpMoney) {
Acbalance -= dpMoney;
cout << “Withdrawal account amount is – ” << dpMoney << endl;
} else {
cout << “Insufficient withdrawal Account balance amount is -” << endl;
}
}
double previewBalance() const {
return Acbalance;
}
};
int main() {
UserAccount account(10000.0); // here we Create class account member with an initial balance
cout << “Initial account balance – Rs-” << account.previewBalance() << endl;
account.deposit(1340.0); // this is work for Deposit account money
cout << “Updates account balance is – Rs-” << account.previewBalance() << endl;
account.withdraw(389.0); // this is work for Withdraw account money
cout << “Updated balance is – Rs-” << account.previewBalance() << endl;
account.withdraw(2387.0); // this is work for Try to use invalid account amount withdrawal
cout << “Final account balance is – Rs-” << account.previewBalance() << endl;
return 0;
}
Explanation of hiding a complex implementation using encapsulation.
- यहाँ इस एक्साम्प्ल में UserAccount क्लास में एक प्राइवेट डेटा मेंबर बैलेंस डिफाइन किया गया होता है, जिसे UserAccount क्लास के बाहर से किसी भी तरह से डायरेक्ट एक्सेस नहीं किया जा सकता है। यह यूजर अकाउंट बैलेंस में किसी भी प्रकार की मिस्टेक्स से होने वाले मॉडिफिकेशन को स्ट्रिक्टली ब्लॉक करता है।
- UserAccount में क्रिएटेड क्लास मेथड isValidAmount() एक प्राइवेट फ़ंक्शन डिफाइन है, इस क्लास मेथड का यूज़ UserAccount में अमाउंट डिपॉज़िट और विड्रॉल अमाउंट को वैलिडेट करने के लिए इंटरनली चेक किया जाता है। यह यूज़र से हाइड किया गया होता है, और वे सिर्फ़ क्लास में डिफाइन पब्लिक मेथड deposit() और withdrawal() क्लास फंक्शन के साथ की इंटरैक्ट कर सकते हैं।
- क्लास में डिफाइन पब्लिक मेथड deposit(), withdrawal(), और previewBalance() बैलेंस तक कंट्रोल्ड एक्सेस की परमिशन प्रोवाइड करते हैं। जिसमे एक समान्य यूज़र को यह जानने की ज़रूरत नहीं है कि उसके अकॉउंट में बैलेंस कैसे स्टोर किया जाता है, या मौजूदा UserAccount में डिपॉज़िट और विड्रॉल के लिए इंटरनल लॉजिक कैसे काम करता है।
Advantages of hiding a complex class implementation in a C++ program.
- Control – यहाँ UserAccount क्लास में हम कंट्रोल कर सकते हैं कि क्लास में डिफाइन इंटरनल अकॉउंट डेटा (बैलेंस) को कैसे मॉडिफाई किया जाए, यह हमें हेल्प करते हुए कि इसे सिर्फ़ सही क्लास ऑपरेशन के माध्यम से ही इसे परफॉर्म किया जाए।
- Flexibility – UserAccount क्लास में हम Deposit(), withdrawal(), जैसे फंक्शन मेथड या बैलेंस कैसे स्टोर किया जाता है. इसके डिफ़ॉल्ट इम्प्लीमेंटेशन को कैसे मॉडिफाई कर सकते हैं. ये बिना UserAccount क्लास का यूज़ करने वाले सोर्स कोड पर डायरेक्ट इम्पैक्ट कर सकते है।
- Security – जिसमे UserAccount यूज़र डायरेक्ट किसी बैलेंस को एक्सेस या मॉडिफाई नहीं कर सकते है। इससे UserAccount में होने वाली किसी भी मिस्टेक्स यूसेज या अन्य मिस्टेक्स को अवॉयड किया जा सकता है।

