OOP में एब्स्ट्रैक्शन: जटिलता को छिपाना

आप कुछ सरल क्रियाओं का उपयोग करके कार चलाते हैं। आप गैस पेडल दबाते हैं। आप स्टीयरिंग घुमाते हैं। आप ब्रेक लगाते हैं।

आपको यह जानने की आवश्यकता नहीं है कि इंजन में ईंधन कैसे जाता है। आपको यह समझने की आवश्यकता नहीं है कि पिस्टन कैसे चलते हैं या गियर कैसे बदलते हैं। कार उन विवरणों को आपसे छिपा देती है। आप एक जटिल मशीन को नियंत्रित करने के लिए एक सरल इंटरफ़ेस (interface) का उपयोग करते हैं।

सॉफ्टवेयर भी इसी तरह काम करता है।

ईमेल भेजने के बारे में सोचें। आप केवल एक कमांड कॉल करते हैं: emailService.send()

पर्दे के पीछे, कई चीजें होती हैं:

आपको इन चरणों को देखने की आवश्यकता नहीं है। आपको केवल इस बात से मतलब है कि ईमेल चला जाए।

यदि आप एब्स्ट्रैक्शन का उपयोग नहीं करते, तो आपका कोड ऐसा दिखता:

हर बार ऐसा करने से समस्याएँ पैदा होती हैं। आपके कोड का हर हिस्सा बहुत अधिक जानकारी जान जाता है। यदि आप अपना ईमेल प्रोवाइडर बदलते हैं, तो आपको मेल भेजने वाली कोड की हर एक लाइन को अपडेट करना होगा। आपका सिस्टम बदलना कठिन हो जाता है।

एब्स्ट्रैक्शन इसे हल करता है। यह दिखाता है कि एक ऑब्जेक्ट क्या करता है, लेकिन यह छिपा देता है कि वह कैसे काम करता है।

आप एक सरल इंटरफ़ेस (interface) प्रदान करते हैं। कॉल करने वाला व्यक्ति कार्य पर केंद्रित रहता है। कार्यान्वयन (implementation) छिपा रहता है। यह आपके कोड को डिकपल्ड (decoupled) और बनाए रखने में आसान रखता है।

लोग अक्सर एब्स्ट्रैक्शन (Abstraction) को एनकैप्सुलेशन (Encapsulation) के साथ भ्रमित कर देते हैं।

एनकैप्सुलेशन पूछता है: इस डेटा को कौन बदल सकता है? यह आंतरिक स्थिति (internal state) की रक्षा करता है। एब्स्ट्रैक्शन पूछता है: उपयोगकर्ता को किन विवरणों को देखने की आवश्यकता है? यह जटिलता को छिपाता है।

वे बेहतर सिस्टम बनाने के लिए मिलकर काम करते हैं।

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

स्रोत: https://dev.to/ashay_tiwari_3658168ad5db/abstraction-in-oop-hiding-complexity-without-hiding-capability-1111