डक टाइपिंग

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

उदाहरण
यह पायथन (प्रोग्रामिंग लैंग्वेज) 3 में सरल उदाहरण है जो दर्शाता है कि किसी भी संदर्भ में किसी भी वस्तु का उपयोग कैसे किया जा सकता है, जब तक कि इसका उपयोग इस तरह से नहीं किया जाता है कि यह समर्थन नहीं करता है।

वर्ग डक: class Duck: def swim(self): print("Duck swimming") def fly(self): print("Duck flying") class Whale: def swim(self): print("Whale swimming") for animal in [Duck, Whale]: animal.swim

animal.fly

output: Duck swimming

Duck flying Whale swimming

AttributeError: 'Whale' object has no attribute 'fly'

सांख्यिकीय रूप से टाइप की गई भाषाओं में
कुछ टाइपिंग सिस्टम स्टेटिक टाइपिंग भाषा जैसे बू (प्रोग्रामिंग भाषा) और डी (प्रोग्रामिंग भाषा), क्लास टाइप चेकिंग को संकलन समय के बजाय रन टाइम पर होने के लिए निर्दिष्ट किया जा सकता है।

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

इस प्रकार टाइपप्रति, एल्म (प्रोग्रामिंग भाषा), और पायथन (प्रोग्रामिंग भाषा) भाषाएँ अलग-अलग डिग्री के लिए संरचनात्मक टाइपिंग का समर्थन करती हैं।

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

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

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

उदाहरण के लिए, जावा (प्रोग्रामिंग भाषा) का मेथड हैंडल एपीआई कर सकता है, इस प्रकार इसका उपयोग किया जाता हैं।

यह भी देखें

 * विस्तार विधि
 * यूएफसीएस
 * लूस कपलिंग
 * मंकी पैच
 * गतिशील प्रोग्रामिंग भाषा