आभासी और सार के बीच का अंतर

आभासी और सार के बीच का अंतर
आभासी और सार के बीच का अंतर

वीडियो: आभासी और सार के बीच का अंतर

वीडियो: आभासी और सार के बीच का अंतर
वीडियो: आईफोन 4 बनाम सैमसंग गैलेक्सी एस (जीटी-आई9000) - भाग 1 2024, नवंबर
Anonim

आभासी बनाम सार

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

सार

आमतौर पर, एब्सट्रैक्ट क्लासेस, जिन्हें एब्सट्रैक्ट बेस क्लासेस (एबीसी) के रूप में भी जाना जाता है, को इंस्टेंट नहीं किया जा सकता है (उस क्लास का एक इंस्टेंस नहीं बनाया जा सकता)। इसलिए, सार वर्ग केवल तभी सार्थक होते हैं जब प्रोग्रामिंग भाषा वंशानुक्रम का समर्थन करती है (एक वर्ग का विस्तार करने से उपवर्ग बनाने की क्षमता)।सार वर्ग आमतौर पर एक अमूर्त अवधारणा या इकाई का प्रतिनिधित्व करते हैं जिसमें आंशिक या कोई कार्यान्वयन नहीं होता है। इसलिए, सार वर्ग मूल वर्ग के रूप में कार्य करता है जिससे बाल वर्ग व्युत्पन्न होते हैं, ताकि बाल वर्ग माता-पिता वर्ग की अपूर्ण विशेषताओं को साझा करे और उन्हें पूरा करने के लिए कार्यक्षमता को जोड़ा जा सके। सार वर्ग में सार विधियाँ हो सकती हैं। एक अमूर्त वर्ग का विस्तार करने वाले उपवर्ग इन (विरासत में मिली) सार विधियों को लागू कर सकते हैं। यदि बाल वर्ग ऐसे सभी सार विधियों को लागू करता है, तो यह एक ठोस वर्ग है। लेकिन अगर ऐसा नहीं होता है, तो चाइल्ड क्लास भी एब्सट्रैक्ट क्लास बन जाती है। इसका मतलब यह है कि, जब प्रोग्रामर एक वर्ग को सार के रूप में नामांकित करता है, तो वह कह रही है कि कक्षा अधूरी होगी और इसमें ऐसे तत्व होंगे जिन्हें इनहेरिट करने वाले उपवर्गों द्वारा पूरा करने की आवश्यकता है। यह दो प्रोग्रामर के बीच एक अनुबंध बनाने का एक अच्छा तरीका है, जो सॉफ्टवेयर विकास में कार्यों को सरल करता है। प्रोग्रामर, जो इनहेरिट करने के लिए कोड लिखता है, को विधि परिभाषाओं का ठीक से पालन करने की आवश्यकता होती है (लेकिन निश्चित रूप से उसका अपना कार्यान्वयन हो सकता है)।Java और C में, Abstract क्लासेस और मेथड्स को Abstract कीवर्ड का उपयोग करके घोषित किया जाता है।

आभासी

वर्चुअल तरीके/फ़ंक्शंस इनहेरिटिंग क्लास (उसी सिग्नेचर वाले फंक्शन का उपयोग करके) द्वारा अपने व्यवहार को वैकल्पिक रूप से ओवरराइड करने की क्षमता प्रदान करते हैं। निम्नलिखित परिदृश्य में वर्चुअल फ़ंक्शन की अवधारणा महत्वपूर्ण है। मान लीजिए कि एक वर्ग एक बाल वर्ग द्वारा व्युत्पन्न है, तो जब भी व्युत्पन्न वर्ग की किसी वस्तु का उपयोग किया जाता है, तो यह आधार वर्ग या व्युत्पन्न वर्ग की किसी वस्तु को संदर्भित कर सकता है। लेकिन, यदि बेस क्लास विधियों को ओवरराइड किया जाता है तो विधि कॉल व्यवहार अस्पष्ट हो सकता है। तो, इस अस्पष्टता को हल करने के लिए, वर्चुअल कीवर्ड का उपयोग किया जाता है। यदि विधि को वर्चुअल के रूप में चिह्नित किया जाता है, तो व्युत्पन्न वर्ग के फ़ंक्शन को (यदि कोई हो) कहा जाता है या फिर बेस क्लास के फ़ंक्शन को कहा जाता है। उदाहरण के लिए, सी ++ में, वर्चुअल कीवर्ड का उपयोग ठीक इसी उद्देश्य के लिए किया जाता है। C में, वर्चुअल कीवर्ड का उपयोग एक समान तरीके से किया जाता है, लेकिन इसके अलावा, सभी ओवरराइड विधियों को संशोधित करने के लिए कीवर्ड ओवरराइड का उपयोग किया जाना चाहिए।लेकिन जावा में, कोई स्पष्ट वर्चुअल कीवर्ड नहीं है। सभी गैर-स्थैतिक विधियों को आभासी माना जाता है। बिना बॉडी वाले वर्चुअल फंक्शन प्योर वर्चुअल फंक्शन कहलाते हैं। Java और C में, Abstract मेथड्स वास्तव में प्योर वर्चुअल हैं।

वर्चुअल और एब्सट्रैक्ट के बीच अंतर

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

सिफारिश की: