शुद्ध आभासी या सार, एक नाम में क्या है?


15

स्टैक ओवरफ्लो पर आभासी कार्यों के बारे में एक सवाल पर चर्चा करते हुए , मैंने सोचा कि क्या शुद्ध (सार) और गैर-शुद्ध आभासी कार्यों के लिए कोई आधिकारिक नामकरण था।

मैं हमेशा अपनी जानकारी के लिए विकिपीडिया पर भरोसा करता था, जिसमें कहा गया था कि शुद्ध और गैर-शुद्ध आभासी कार्य सामान्य शब्द हैं। दुर्भाग्य से, लेख इसे एक मूल या संदर्भ के साथ वापस नहीं करता है।

मेरे जवाब में जॉन स्कीट के जवाब को उद्धृत करने के लिए कि शुद्ध और गैर-शुद्ध सामान्य शब्द हैं:

@ उत्तर: हम्म ... संभवतः, लेकिन मैंने इसे पहले कभी भी C ++ के संदर्भ में देखा है। मुझे संदेह है कि उनके बारे में बात करने वाले किसी व्यक्ति के C ++ पृष्ठभूमि होने की संभावना है :)

क्या शब्द C ++ से उत्पन्न हुए थे, या वे पहले भाषा में पहले परिभाषित या कार्यान्वित किए गए थे, और क्या वे 'आधिकारिक' वैज्ञानिक शब्द हैं?

अपडेट करें:

फ्रैंक शीयर ने मदद से SIMULA 67 कॉमन बेस लैंग्वेज (1970) के वर्णन के लिए एक लिंक प्रदान किया । यह भाषा OO कीवर्ड को क्लास , ऑब्जेक्ट के रूप में पेश करने वाली पहली भाषा लगती है , और औपचारिक अवधारणा के रूप में आभासी भी होती है । यह शुद्ध / गैर-शुद्ध या सार को परिभाषित नहीं करता है , लेकिन यह अवधारणाओं का समर्थन करता है

उन्हें किसने परिभाषित किया?


1
यह दिलचस्प लग सकता है ... objectmentor.com/resources/articles/abcpvf.pdf
हारून मैकाइवर

2
वर्चुअल फ़ंक्शंस, वर्चुअल इनहेरिटेंस, वर्चुअल टेबल - कोई भी वास्तविक विवरण के साथ नहीं जो उन्हें "आभासी" बनाता है। मैं नियम जानता हूं, लेकिन वह शब्द क्यों? आखिरकार, "वर्चुअल" फ़ंक्शन किसी भी अन्य फ़ंक्शन के रूप में वास्तविक है - यह बस एक देर से बाध्यकारी लुकअप की आवश्यकता है, सभी है। हो सकता है कि स्ट्रॉस्ट्रुप सिर्फ शब्द को वास्तव में पसंद आए। मुझे लगा कि कक्षाएं अमूर्त (शुद्ध नहीं) थीं, जबकि विधियां शुद्ध हो सकती हैं (लेकिन सार नहीं)। यह संभव है कि मैंने इसे बनाया, हालांकि।
स्टीव 314

3
@ स्टीव 314, यह स्ट्रॉस्ट्रुप नहीं था - जाहिर है कि उन्हें इस तरह से पहले ही सिमूला में बुलाया गया था ।
पर्टिक टॉरक

जवाबों:


9

Nygaard और Dahl ने सबसे पहले SIMULA 67 कॉमन बेस लैंग्वेज में इस शब्द का इस्तेमाल किया था । उदाहरण के लिए खंड 2.1 में देखें, और खंड 2.2.3। (जहां तक ​​मैं कम से कम बता सकता हूं। लेकिन हे, जहां तक ​​ओओपी का संबंध है, यह संभवतः इस शब्द का पहला प्रयोग है।)


3
सिमूला पहली OO भाषा, AFAIK थी, इसलिए इसमें OOP संदर्भ में बहुत सारी शर्तों का पहला उपयोग है। इसने स्ट्रॉस्ट्रुप को बहुत प्रभावित किया, जो शुरू में सिर्फ सी दक्षता और सिमूला वर्गों के साथ एक भाषा चाहते थे।
डेविड थॉर्नले

मैं इस पत्र के माध्यम से स्किम कर रहा हूं, और हां, यह पहले लगता है, क्योंकि वे 'कक्षाएं' और 'ऑब्जेक्ट' पेश कर रहे हैं।
स्टीवन ज्यूरिस

2
इसलिए, कुछ समय बाद SIMULA 67 परिभाषा को पढ़ना बर्बाद कर दिया। सिमूला 67 ने 'वर्चुअल' को 'क्लास', 'ऑब्जेक्ट', 'हिडेन', 'कॉल बाय वैल्यू', 'कॉल बाय रेफरेंस' के साथ 1970 में गढ़ा था। 'प्योर', 'अनप्योर' या 'एब्सट्रैक्ट' का कोई संकेत नहीं।
स्टीवन ज्यूरिस

5
"व्यर्थ" एक अजीब शब्द की तरह लगता है जिसका उपयोग क्षेत्र के सेमिनल पेपरों में से एक को पढ़ने के लिए किया जाता है।
फ्रैंक शीयर

7

इसलिए ... मैं थोड़ा शोध कर रहा हूं। जो रुचि रखता है, उसके लिए थोड़ा इतिहास का पाठ इस प्रकार है। :) यदि आप केवल उत्तर में रुचि रखते हैं तो नीचे दिए गए निष्कर्ष पर जाएं।

1967 :

SIMULA 67 , पहला ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग लैंग्वेज कीवर्ड को क्लास , ऑब्जेक्ट , रेफरेंस बाय कॉल , वैल्यू और वर्चुअल के रूप में परिभाषित करता है ।

सिमुला की विरासत प्रणाली मूल रूप से एक अलग नाम से जाना जाता था संयोजन (और बाद में के रूप में जाना लगाकर ,) तथ्य यह है कि supertypes का कोड कॉपी किया गया था और उपप्रकार का कोड 'concatenated' का जिक्र है। बाद में विरासत प्रणाली का एक और रूप उभरा, प्रतिनिधिमंडल , जहां सही प्रकार के संदर्भ में कॉल प्रतिनिधि हैं।

वर्चुअल सबसे अधिक संभावना उस प्रक्रिया को संदर्भित करता है जिसे कॉल करने के लिए वर्चुअल मेथड टेबल का उपयोग करके सही क्रियान्वयन के लिए भेजा जाना चाहिए । यह एक निश्चित / ठोस कार्यान्वयन की तुलना में आभासी है।

1971 :

Niklaus Wirth, Stepwise Refinement के रूप में परिभाषित एक अवधारणा के बारे में लिखते हैं । यह मूल रूप से बताता है कि कैसे आंशिक समाधानों में एक कार्यक्रम को विभाजित किया जाए जिस पर बढ़ाया जा सकता है।

1974 :

यह सबसे पहला कागज़ है जिसे मैंने पाया है कि बारबरा लिस्कॉव द्वारा अमूर्त डेटा प्रकार के शब्द ।

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

यह पेपर एक ऑपरेशन क्लस्टर को भी परिभाषित करता है जो यह निर्दिष्ट करता है कि अब हम इंटरफ़ेस के रूप में क्या जानते हैं ।

दिलचस्प वैज्ञानिक शब्दावली (1996 से कागज):

विरासत : एक अधिक निम्न-स्तरीय तंत्र जिसके द्वारा ऑब्जेक्ट या कक्षाएं व्यवहार या डेटा साझा कर सकते हैं।

उपप्रकार : वैचारिक विशेषज्ञता व्यक्त करता है। इनहेरिटेंस का एक विशिष्ट रूप, जिसे इंटरफ़ेस इनहेरिटेंस भी कहा जाता है

अमूर्त सिद्धांतों : चिंता में घटना की बेहतर समझ प्राप्त करने के लिए, अमूर्त के आदेशों की श्रेणीबद्ध रैंकिंग में एक आवेदन डोमेन के हमारे ज्ञान को व्यवस्थित करने की प्रक्रिया।

आंशिक रूप से लागू किए गए सार : अमूर्त जिनकी परिभाषाएँ जानबूझकर अधूरी छोड़ दी गई हैं।

सार वर्ग : ऑब्जेक्ट-ओरिएंटेड सिस्टम में आंशिक रूप से कार्यान्वित वर्ग के लिए विशिष्ट शब्द ।

नॉनस्ट्रिक्ट इनहेरिटेंस : ऑपरेशन को उपवर्गों में पुनर्परिभाषित (या हटाया भी) करने की अनुमति देता है।

सख्त विरासत : व्यवहारिक रूप से संगत विरासत।

निष्कर्ष :

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

आभासी SIMULA से उत्पन्न होता है, जिसके कारण इसका उपयोग व्यापक रूप से किया जाता है, लेकिन यह एक सामान्य शब्द नहीं है। यह पहले से ही कार्यान्वयन विवरण को परिभाषित करता है। विरासत के प्रकारों के संदर्भ में बोलना अधिक उपयुक्त है। गैर आभासी करने के लिए डिफ़ॉल्ट मेल खाती द्वारा सख्त विरासत जबकि, डिफ़ॉल्ट रूप से आभासी डिफ़ॉल्ट मेल खाती द्वारा करने के लिए nonstrict विरासत

विकिपीडिया प्रविष्टि को समायोजित करने में कोई दिलचस्पी है ? :)


बारबरा लिस्कॉव से पहले, डिक्स्ट्रा को "STEP-WISE PROGRAM COMPOSITION" पर कुछ कहना था , जो एक प्रासंगिक संसाधन भी हो सकता है।
स्टीवन ज्यूरिस

4

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

मैं इस कारण का अनुमान लगा रहा हूं कि आभासी कार्यों को आभासी क्यों कहा जाता है, यह तथ्य यह है कि यह ज्ञात नहीं है कि संकलन के समय कौन सा वास्तविक कार्य कहा जाएगा। एक अर्थ में, एक आभासी फ़ंक्शन कॉल संकलन समय पर "मौजूद नहीं है"।

मैं यह भी अनुमान लगा रहा हूं कि "एब्स्ट्रैक्ट" शब्द का उपयोग एक क्लास के लिए एक शुद्ध वर्चुअल फंक्शन के लिए किया जाता है, क्योंकि आपके पास उस क्लास की कोई भी वस्तु नहीं हो सकती है। एक मायने में यह वस्तुओं की ठोस दुनिया से दूर एक अमूर्त अवधारणा है।

संपादित करें: अन्य भाषाएँ।

जहाँ तक यह सवाल है कि "आभासी" शब्द कितना सामान्य है, यहाँ मेरे दो सेंट हैं। Smalltalk में सभी फ़ंक्शन डायनेमिक बाइंडिंग का उपयोग करते हैं, इसलिए वे सभी वर्चुअल हैं, और एक विशेष शब्द या भाषा कीवर्ड की आवश्यकता नहीं है। जावा में, अगर मैं गलत नहीं हूं, तो कंपाइलर स्वचालित रूप से यह तय करता है कि डायनेमिक बाइंडिंग का उपयोग किया जाना चाहिए या नहीं, जहां तक ​​प्रोग्रामर का संबंध है कोई भेद नहीं है, और इसलिए कोई "वर्चुअल" कीवर्ड नहीं है।

C ++ में आभासी और गैर-आभासी के बीच का अंतर आवश्यक है, क्योंकि यह तय करना प्रोग्रामर के ऊपर है कि जरूरत पड़ने पर ओवरहेड पर बचाने के लिए डायनेमिक बाइंडिंग का उपयोग कैसे किया जाए।


1
+1: इसके अलावा, "सार" कई भाषाओं पर लागू होता है। "आभासी" नहीं है।
एस.लॉट

@ S.Lott: पूरा सवाल यह है कि आभासी एक सामान्य शब्द है या नहीं। जहां तक ​​मैं अब बता सकता हूं, आभासी कई भाषाओं पर लागू होता है, और पहली बार सिमाला द्वारा गढ़ा गया था। प्रश्न शुद्ध / गैर-शुद्ध और सार के बारे में रहता है।
स्टीवन ज्यूरिस

@ सीनियर ज्यूरिस: "आभासी कई भाषाओं पर लागू होता है"? वास्तव में। अब तक, यह C, C ++ और Simula लगता है। यह निश्चित रूप से पायथन पर भी थोड़ा सा लागू नहीं होता है। यह जावा पर लागू नहीं होता है।
S.Lott

यह ऑब्जेक्ट पास्कल / डेल्फी पर लागू होता है। डेल्फी की एक अतिरिक्त अवधारणा है - dynamic- जो कि एक प्रकार की आभासी विधि है जो समय के लिए स्थान का व्यापार करती है: वे कम जगह लेते हैं, और virtualविधियों की तुलना में निष्पादित करने के लिए धीमी हैं ।
फ्रैंक शीयर

2
@ सीनियर ज्यूरिस: "वर्चुअल बाई डिफॉल्ट" सार कार्यों का वर्णन करने के लिए "वर्चुअल" का उपयोग करने के समान नहीं है। मुझे लगता है कि लोग कहते हैं कि "सभी कार्य आभासी हैं" C ++ अवधारणा को किसी अन्य भाषा में लागू कर रहे हैं। और मुझे लगता है कि वे इसे अनुचित तरीके से कर रहे हैं। चूंकि पायथन में सभी विधि कार्य वर्चुअल हैं, इसलिए पायथन में C ++ कॉन्सेप्ट को लागू करने के लिए स्टैक ओवरफ्लो जैसी जगहों को छोड़कर "वर्चुअल" का उपयोग करते हुए विषय का कभी उल्लेख नहीं किया गया है। मुझे लगता है कि आभासी उन मामलों में अनुचित तरीके से लागू होता है, क्योंकि पायथन भाषा के डॉक्स शब्द का उपयोग नहीं करते हैं।
S.Lott
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.