डाउनकास्टिंग

वर्ग-आधारित प्रोग्रामिंग में, डाउनकास्टिंग, या प्रकार परिशोधन, इसके व्युत्पन्न वर्गों में से एक में आधार वर्ग को अंतर्निहित रूप से संदर्भित करने का कार्य है।

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

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

कुछ भाषाएँ, जैसे कि ओकैमल, डाउनकास्टिंग की अनुमति नहीं देतीं हैं।

उपयोग
डाउनकास्टिंग तब उपयोगी होती है जब पैरेंट वेरिएबल द्वारा संदर्भित मान का प्रकार ज्ञात होता है और प्रायः मान को पैरामीटर के रूप में पास करते समय इसका उपयोग किया जाता है। नीचे दिए गए उदाहरण में, ऑब्जेक्टटूस्ट्रिंग (objectToString) विधि ऑब्जेक्ट पैरामीटर लेती है जिसे स्ट्रिंग प्रकार का माना जाता है। इस दृष्टिकोण में, डाउनकास्टिंग संकलक को संभावित त्रुटि का पता लगाने से रोकता है और इसके बजाय रन-टाइम त्रुटि का कारण बनता है। myObject को स्ट्रिंग ('(स्ट्रिंग) myObject') में डाउनकास्ट करना संकलन समय पर संभव नहीं था क्योंकि कई बार myObject स्ट्रिंग प्रकार होता है, इसलिए केवल रन टाइम पर ही हम यह पता लगा सकते हैं कि पारित पैरामीटर तार्किक है या नहीं। जबकि हम यूनिवर्सल java.lang.Object.toString का उपयोग करके myObject को कंपाइल-टाइम स्ट्रिंग में भी परिवर्तित कर सकते हैं, इससे toString के डिफ़ॉल्ट कार्यान्वयन को कॉल करने का आपत्तिपूर्ण होगा जहां यह अनुपयोगी या असुरक्षित था, और अपवाद हैंडलिंग इसे रोक नहीं सकती थी।

C++ में, रन-टाइम प्रकार की जाँच dynamic_cast के माध्यम से लागू की जाती है। कंपाइल-टाइम डाउनकास्टिंग को static_cast द्वारा कार्यान्वित किया जाता है, लेकिन यह ऑपरेशन कोई प्रकार की जाँच नहीं करता है। यदि इसका अनुचित प्रयोग किया जाए तो यह अपरिभाषित व्यवहार उत्पन्न कर सकता है।

विचार
निकृष्ट समझे जाने वाले डिज़ाइन का एक लोकप्रिय उदाहरण शीर्ष प्रकार के कंटेनर हैं, जैसे कि जावा जेनेरिक पेश किए जाने से पहले जावा कंटेनर, जिसमें निहित वस्तुओं को डाउनकास्ट करने की आवश्यकता होती है ताकि उनका दोबारा उपयोग किया जा सके।

यह भी देखें

 * सबटाइप पॉलीमॉर्फिज्म (उपप्रकार बहुरूपता)

बाहरी संबंध

 * Downcasting is a Code Smell by Jeremy D. Miller
 * A downcasting tragedy by Jimmy Bogard
 * Prefer polymorphism over instanceof and downcasting by Bill Venners
 * Downcasting in C# by Scott Lysle
 * Multiple downcasting techniques
 * Upcasting, downcasting by Sinipull