क्या बहुरूपता का एक सबसेट टाइपिंग बतख है


17

WIkipedia पर बहुरूपता से

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

विकिपीडिया पर बतख टाइपिंग से

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

मेरी व्याख्या यह है कि बतख टाइपिंग के आधार पर, ऑब्जेक्ट के तरीके / गुण मान्य शब्दार्थ निर्धारित करते हैं। इसका मतलब यह है कि वस्तुओं का वर्तमान आकार इंटरफ़ेस को निर्धारित करता है।

बहुरूपता से आप कह सकते हैं कि एक फ़ंक्शन बहुरूप है यदि यह एक इंटरफ़ेस को बनाए रखने के लिए कई अलग-अलग डेटा प्रकारों को स्वीकार करता है।

इसलिए यदि कोई फ़ंक्शन प्रकार डक कर सकता है, तो यह कई अलग-अलग डेटा प्रकारों को स्वीकार कर सकता है और उन पर काम कर सकता है जब तक कि उन डेटा प्रकारों में सही तरीके / गुण होते हैं और इस प्रकार इंटरफ़ेस को बनाए रखते हैं।

(शब्द इंटरफ़ेस का उपयोग कोड निर्माण के रूप में नहीं, बल्कि वर्णनात्मक, दस्तावेज़ निर्माण के रूप में अधिक होता है)

  • बत्तख पालन और बहुरूपता के बीच सही संबंध क्या है?
  • यदि कोई भाषा टाइप कर सकती है, तो क्या इसका मतलब यह बहुरूपता कर सकता है?

1
निश्चित नहीं है कि आप उत्तर में क्या देख रहे हैं। आपने दोनों को सटीक रूप से परिभाषित किया है, इसलिए आपके पास उतना ही निश्चित उत्तर है जितना कि है। यह तय करते हुए कि बहुपद के रूप में "काउंट्स" को टंकण करना एक दार्शनिक प्रश्न है, या शायद एक पारिभाषिक प्रश्न, यदि आप इसका अर्थ इस तरह से कम करते हैं। तो आप एक उत्तर में क्या देख रहे होंगे?
Psr

@psr मैं मूल रूप से कह रहा था, "यहाँ मैं इसकी व्याख्या कैसे कर रहा हूँ? क्या मैं गलत हूँ? क्या मैं सही हूँ? क्या ऐसे लोग हैं जो इसे कहते हैं कि यह एकतरफा है या अन्य। क्या इस विषय पर कोई लेख है?" मूल रूप से अन्य विस्तार से कहें तो "डक टाइपिंग एक बहुरूपता का कार्यान्वयन / उपसमुच्चय है" रिश्ते के बारे में और क्या कहा जा सकता है?
Raynos

जहां तक ​​मैं समझता हूं कि होमोग्राफी बतख को कुछ और टाइप करती है लेकिन यूनिफॉर्म इंटरफेस => बहुरूपता नहीं है, या कम से कम इस अर्थ में नहीं है कि विकिपीडिया इसे कैसे परिभाषित करता है। उदा। door.close()औरtiger.close()
gnat

4
बतख टाइपिंग एड-हॉक बहुरूपता का मामला है । आप यह सोच रहे हैं।
यानिस

जवाबों:


16

मैं कहता हूं कि बहुरूपता एक सामान्य लक्षण है, जिसे कई तरीकों से लागू किया जा सकता है:

  • वर्ग आधारित विरासत।
  • प्रोटोटाइप आधारित वस्तुएं (विरासत के साथ या बिना)
  • बत्तख टाइपिंग
  • इंटरफ़ेस अनुपालन (जैसा कि गो के इंटरफेस द्वारा किया गया है और C ++ टेम्पलेट्स पर अंतर्निहित है)

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


7

मुझे लगता है कि:

बत्तख टाइपिंग और बहुरूपता दोनों अप्रत्यक्ष / अमूर्त के साधन हैं। बहुरूपता एक अवधारणा है जो टाइपिंग और टाइपिंग पर स्थापित होती है जबकि डक टाइपिंग ठेके पर स्थापित की जाती है।

बहुरूपता के साथ यह महत्वपूर्ण है कि थिंग क्या है और यह कैसे व्यवहार नहीं करता है (यह व्यवहार इसका परिणाम हो सकता है)।

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


2
ये गलत है। बहुरूपता बहुत सारी चीजों को कवर करने वाला एक विशाल छाता है। विशेष रूप से, यह बतख टाइपिंग को शामिल करता है। इस प्रकार बत्तख टाइपिंग बहुरूपता का एक रूप है।
थॉमस एडिंग

मैं असहमत हूं। व्यवहारिक तरीकों के साथ पारंपरिक विरासत में समान लक्षण हैं। यह स्पष्ट होने से अधिक प्रकार-सुरक्षित है कि किसी वस्तु को प्रदर्शन के लिए किस व्यवहार की गारंटी दी जाती है (जो अन्य व्यवहारों को बाहर नहीं करता है!)
marstato

6

इसका उत्तर हां है

डक टाइपिंग डायनामिक टाइपिंग का एक विशेष मामला है , और भले ही प्रति से डायनामिक टाइपिंग को सीधे बहुरूपता के रूप में नहीं माना जा सकता है (क्योंकि यह सिर्फ रनटाइम पर टाइप चेक करने के लिए भाषा की संपत्ति है, लेकिन फिर संकलन समय पर), आमतौर पर तकनीकें गतिशील टाइपिंग से गुजरना, इस तरह के देर से बाध्यकारी और गतिशील प्रेषण बहुरूपता के लिए विशेषता है


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

1

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

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

कुछ हद तक यह एक दार्शनिक सवाल है। क्या आप बतख टाइपिंग को ऐसे इंटरफेस के रूप में सोच सकते हैं जो स्वचालित रूप से अंतर्निहित रूप से घोषित किए जाते हैं? मैं किसी भी कारण के बारे में सोच नहीं सकता जो कि गलत है , ठीक है, लेकिन मुझे नहीं लगता कि यह शायद इसे देखने का सबसे उत्पादक तरीका है। मुझे लगता है कि बतख टाइपिंग और इंटरफेस दोनों आमतौर पर प्रोग्रामिंग लैंग्वेज के टाइप सिस्टम के सामने आने वाली विशेषताएं हैं, दोनों में व्यवहार के समान तरीके हैं, और प्रोग्रामर को समझने के लिए दोनों महत्वपूर्ण हैं।


6
"बहुरूपता को खोजकर्ता की आवश्यकता है" यह ऐसा कहां कहता है? वर्ग-आधारित विरासत केवल बहुरूपता का एक रूप है, केवल एक ही नहीं।
जेवियर

और @ जेवियर की टिप्पणी जारी है, तदर्थ बहुरूपता के बारे में कैसे ?
यानिस

@YannisRizos - इस तरह के किसी भी सवाल का जवाब देने के साथ समस्या यह है कि इतनी सारी भाषाएं और इतनी शब्दावली है कि कोई भी व्यक्ति आपको कोई फर्क नहीं पड़ता कि आप क्या कहते हैं। मैं समझता हूं कि "तदर्थ बहुरूपता" के नाम में "बहुरूपता" शब्द क्यों है, लेकिन मैं यह तर्क दूंगा कि ओपी का अर्थ "बहुरूपता" से कुछ और है।
पीएसआर

@ जेवियर - आपके द्वारा सूचीबद्ध सभी विधियों में डक टाइपिंग को छोड़कर खोजकर्ता की आवश्यकता है।
psr

@psr वास्तव में मुझे परवाह नहीं है कि ओपी का अर्थ "बहुरूपता" से है। मुझे नहीं लगता कि किसी को भी परवाह करनी चाहिए, यह एक वैज्ञानिक अवधारणा है जिसकी बहुत ही सरल परिभाषा है, मुझे नहीं लगता कि हमें अपनी व्याख्याओं के आधार पर जवाब देना चाहिए या हम क्या सोच सकते हैं यह ओपी व्याख्या है। विशेष रूप से ओपी व्याख्या, चूंकि वह डिफ़ॉल्ट रूप से पूछ रहा है इसलिए वह अपनी व्याख्या के बारे में अनिश्चित है। मैं असहमत हूं कि यह एक दार्शनिक प्रश्न है, जैसा कि कहा गया है, एक वैज्ञानिक एक सरल उत्तर के साथ था: हां डकपिटिंग तदर्थ बहुरूपता का एक रूप है, बहुरूपता का एक सबसेट।
यानिस २ y

1

यह कहना लगभग स्वाभाविक है "हाँ, अगर फू ने डक टाइपिंग की है, तो फू में बहुरूपता है"। लेकिन मुझे यकीन है यह नहीं कह सकते इस 100%, एक अर्थ में कि शायद यह है एक संभव ऐसी प्रणाली का एक कृत्रिम उदाहरण जो बतख टाइपिंग ( "यह नीम हकीम कर सकते हैं && यह पानी == पर तैर सकते हैं है साथ आने के लिए> यह है डक ") पॉलीमोर्फिज़्म नहीं होने पर (" फू, क्वैक! "विफल), लेकिन वे वास्तव में कृत्रिम और एक वास्तविक दुनिया में होंगे, मैं कहूंगा" हाँ, अगर बतख टाइपिंग मौजूद है, तो पॉलीमॉर्फिज़्म भी मौजूद होना चाहिए "।

व्यक्तिगत रूप से मैं बतख टाइपिंग को "बहुरूपता सही किया" के रूप में देखता हूं। मेरे कहने का मतलब यह है कि, एक ऐसी चीज़ जो डक टाइपिंग की दुनिया में मौजूद है, उसे किसी भी प्रकार के स्पष्ट होने की ज़रूरत नहीं है और उनके (बहुरूपिए = "समान उपयोग, अलग-अलग परिणाम") व्यवहार ही मायने रखता है। बहुरूपता के अन्य कार्यान्वयन में, यह प्रकार / इंटरफेस / वंशानुक्रम के लिए विवश है, इसलिए यह "लागू किया और विवश बहुरूपता" है "प्रति से बहुरूपता" नहीं।


0

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

(बी। पियर्स और दोस्त)

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

टाइप को निर्धारित करने के लिए कुछ विधि है जो बहुरूपता से संबंधित है जैसे कि कोड को अधिक लचीला बनाता है, लेकिन बतख टाइपिंग इन मामलों में पूरी तरह से एक और मुद्दा है।

विवरण में टाइप किए गए लैम्ब्डा कैलकुलस और अनकैप्ड लैम्ब्डा कैलकुलस हैं जो गणना की संपत्ति और एक गणना को निर्धारित करने में मदद करते हैं।

मैं यह भी देखता हूं कि बतख टाइपिंग जैसी चीजें अगर हम केवल तेजी से परिणाम प्राप्त करना चाहते हैं तो मदद कर सकते हैं, लेकिन अन्य अवसरों पर मुझे यह भी लगता है कि गतिशील प्रकृति इसे जरूरतों के लिए अधिक समायोज्य बनाती है, इस प्रकार मैं तेजी से गणना कर सकता हूं। मुझे लगता है कि सिर्फ यह कहना है, प्रिय, कि अगर मुझे वास्तव में पता है कि मैं पहले से ही क्या गणना करना चाहता हूं, तो टाइप करना सबसे अच्छा है, लेकिन मुझे क्यों पता है कि मुझे क्या चाहिए? हेहेहे ...

यह मेरा पांच सेंट है और मुझे लगता है कि एक दिलचस्प शोध विषय बना सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.