विरासत बनाम संरचना
विरासत और संरचना OOP (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग) में पाई जाने वाली दो महत्वपूर्ण अवधारणाएँ हैं। सरल शब्दों में, संरचना और वंशानुक्रम दोनों एक वर्ग को अतिरिक्त गुण या व्यवहार प्रदान करने से संबंधित हैं। वंशानुक्रम एक वर्ग के लिए माता-पिता वर्ग से गुणों और व्यवहार का विस्तार करने की क्षमता है। दूसरी ओर, संरचना एक वर्ग की विभिन्न वर्गों की वस्तुओं को सदस्य डेटा के रूप में समाहित करने की क्षमता है।
विरासत क्या है?
जैसा कि ऊपर उल्लेख किया गया है, वंशानुक्रम एक वर्ग के लिए माता-पिता वर्ग से गुणों और व्यवहार का विस्तार करने की क्षमता है।वंशानुक्रम अनिवार्य रूप से एक नए परिभाषित वर्ग द्वारा मौजूदा वर्ग के गुणों और व्यवहार को विस्तारित करने की अनुमति देकर कोड पुन: उपयोग प्रदान करता है। यदि वर्ग A, B का विस्तार करता है, तो वर्ग B को मूल वर्ग (या सुपर क्लास) कहा जाता है और वर्ग A को चाइल्ड क्लास (या व्युत्पन्न वर्ग/उप वर्ग) कहा जाता है। इस उदाहरण के परिदृश्य में, क्लास ए सुपर क्लास (बी) की सभी सार्वजनिक और संरक्षित विशेषताओं और विधियों को इनहेरिट करेगा। उपवर्ग वैकल्पिक रूप से मूल वर्ग से विरासत में मिले व्यवहार को ओवरराइड कर सकता है (विधियों को नई या विस्तारित कार्यक्षमता प्रदान करता है)।
इनहेरिटेंस OOP में एक "है-ए" संबंध का प्रतिनिधित्व करता है। इसका अनिवार्य रूप से मतलब है कि ए भी बी है। दूसरे शब्दों में, बी एक निश्चित वास्तविक दुनिया इकाई के सामान्य विवरण वाला वर्ग हो सकता है लेकिन ए एक निश्चित विशेषज्ञता निर्दिष्ट करता है। वास्तविक दुनिया की प्रोग्रामिंग समस्या में, कर्मचारी वर्ग बनाने के लिए व्यक्ति वर्ग को बढ़ाया जा सकता है। इसे विशेषज्ञता कहा जाता है। लेकिन आप पहले कर्मचारी वर्ग भी बना सकते हैं और फिर इसे एक व्यक्ति वर्ग में भी सामान्यीकृत कर सकते हैं (i.इ। सामान्यीकरण)। इस उदाहरण में, कर्मचारी के पास व्यक्ति के सभी गुण और व्यवहार होंगे (अर्थात कर्मचारी भी एक व्यक्ति है) और इसमें कुछ अतिरिक्त कार्यक्षमता भी हो सकती है (इसलिए, व्यक्ति कर्मचारी नहीं है)।
रचना क्या है?
रचना एक वर्ग की क्षमता है जिसमें सदस्य डेटा के रूप में विभिन्न वर्गों की वस्तुओं को समाहित किया जाता है। उदाहरण के लिए, कक्षा ए में सदस्य के रूप में कक्षा बी की वस्तु हो सकती है। यहां, बी में परिभाषित सभी सार्वजनिक विधियों (या कार्यों) को कक्षा ए के भीतर निष्पादित किया जा सकता है। कक्षा ए कंटेनर बन जाती है, जबकि कक्षा बी निहित वर्ग बन जाती है। संरचना को कंटेनरशिप के रूप में भी जाना जाता है। इस उदाहरण में, यह कहा जा सकता है कि कक्षा ए कक्षा बी से बना है। ओओपी में, संरचना "है-ए" संबंध का प्रतिनिधित्व करती है। यह ध्यान रखना महत्वपूर्ण है कि, भले ही कंटेनर के पास निहित वर्ग के सभी सार्वजनिक तरीकों को निष्पादित करने की पहुंच हो, लेकिन यह अतिरिक्त कार्यक्षमता को बदलने या प्रदान करने में सक्षम नहीं है। जब वास्तविक दुनिया प्रोग्रामिंग समस्या की बात आती है, तो क्लास टेक्स्टबॉक्स का एक ऑब्जेक्ट क्लास फॉर्म में समाहित हो सकता है, और इस प्रकार कहा जा सकता है कि एक फॉर्म में टेक्स्टबॉक्स होता है (या वैकल्पिक रूप से, एक फॉर्म टेक्स्टबॉक्स से बना होता है)।
विरासत और संरचना में क्या अंतर है?
यद्यपि वंशानुक्रम और संरचना दो ओओपी अवधारणाएं हैं, वे प्रोग्रामर को प्राप्त करने की अनुमति देने में काफी भिन्न हैं। वंशानुक्रम एक वर्ग के लिए माता-पिता वर्ग से गुणों और व्यवहार को विस्तारित करने की क्षमता है, जबकि संरचना एक वर्ग की क्षमता है जिसमें सदस्य डेटा के रूप में विभिन्न वर्गों की वस्तुओं को शामिल किया जा सकता है। यदि कोई वर्ग बढ़ाया जाता है, तो उसे सभी सार्वजनिक और संरक्षित गुण/व्यवहार विरासत में मिलते हैं और उन व्यवहारों को उपवर्ग द्वारा ओवरराइड किया जा सकता है। लेकिन अगर एक वर्ग दूसरे में समाहित है, तो कंटेनर को व्यवहार को बदलने या उसमें जोड़ने की क्षमता नहीं मिलती है। वंशानुक्रम OOP में एक "है-ए" संबंध का प्रतिनिधित्व करता है, जबकि संरचना एक "है-ए" संबंध का प्रतिनिधित्व करती है।