2011-10-12 14 views
11

संभव डुप्लिकेट:
Try to describe polymorphism as easy as you canक्या कोई मुझे पॉलिमॉर्फिज्म समझा सकता है?

मैं पूरी तरह से कभी समझने के लिए क्या बहुरूपता है कर पाए हैं। क्या कोई समझा सकता है, शायद एक उदाहरण के उपयोग के साथ, यह क्या है और यह कैसे काम करता है? बस मूल बातें।

उत्तर

35

शायद गैर-कंप्यूटर समानता से शुरू करना सबसे आसान है।

विचार करें कि क्या आपने किसी को "दुकान पर जाना और रात के खाने के लिए अपने कुछ पसंदीदा भोजन" को बताया है।

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

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

एक कार्यक्रम में, चीज़ें थोड़ी बाहर काम उसी तरह: यदि आप एक अपेक्षाकृत अमूर्त स्तर पर कुछ निर्दिष्ट (दुकान पर जाने और रात का खाना मिलता है)। प्रत्येक वस्तु है कि लागू करने के लिए कैसे के अपने स्वयं के ठोस कार्यान्वयन प्रदान करता है, और कई मामलों में वास्तव में क्या यह (ऊपर पसंदीदा भोजन में मतभेद की तरह जैसे,) करने के लिए जा रहा है में कुछ बदलाव के लिए प्रदान करता है।

बेशक

, जब आप प्रोग्रामिंग कर रहे हैं, इस बात का सबसे एक विनिर्देश एक बहुत अधिक विस्तृत और स्पष्ट है कि आवश्यकता है।हालांकि सामान्य विचार वही रहता है। उपर्युक्त परिदृश्य के लिए, आपके पास person बेस क्लास (या इंटरफ़ेस) हो सकता है जो go to store और select favorite food और pay for purchase जैसी विधियों को परिभाषित करता है। इसके बाद आप adult और teenager जैसे कार्यान्वयन करेंगे, जिनमें से प्रत्येक ने स्टोर में जाने, पसंदीदा भोजन का चयन करने और खरीदारी के लिए भुगतान करने की अपनी पद्धति को परिभाषित किया है। वे विधियां पॉलिमॉर्फिक होंगी, क्योंकि प्रत्येक कार्यान्वयन के आपके द्वारा दिए गए उच्च-स्तरीय आदेश को पूरा करने का अपना तरीका होगा।

2

पॉलिमॉर्फिज्म का अर्थ वर्तमान संदर्भ के आधार पर रनटाइम पर सटीक कॉल किए गए फ़ंक्शन को चुनने की क्षमता है।

यह एक इंटरफ़ेस वर्ग का वर्णन करके किया जा सकता है जहां से अन्य लोग प्राप्त करेंगे। कोई भी अपने वर्ग में केवल कुछ वर्गों का उपयोग करने के बजाय इंटरफ़ेस का उपयोग कर सकता है। यह प्रोग्रामर को उनकी समस्याओं के लिए सर्वोत्तम कार्यान्वयन चुनने की क्षमता देता है।

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

class arrayInterface{ 
    ... 
    virtual int getElement(elementPosition)=0 
    ... 
} 

class sparseArray : public arrayInterface{ 
    ... 
    virtual int getElement(elementPosition){ 
     implementation 
    } 
    ... 
} 

class fullArray : public arrayInterface{ 
    ... 
    virtual int getElement(elementPosition){ 
     implementation 
    } 
    ... 
} 

main(){ 
    arrayInterface* array = new fullArray(); 
    // this uses now the implementation specified by fullArray 
    int element = array->getElement(10) 

    delete array; 
    array = new sparseArray 
    // this uses now the implementation specified by sparseArray 
    int element = array->getElement(10) 

} 
12

सचमुच, बहुरूपता का अर्थ है "कई रूपों होने": एक उदाहरण के रूप में निम्नलिखित कोड एक पूर्णांक सरणी के (C++ शैली) देखें। प्रोग्रामिंग में, यदि एक चर एक से अधिक प्रकार के मान रख सकता है, तो यह एक प्रकार का बहुरूपता है। यदि फ़ंक्शन एक से अधिक प्रकार के पैरामीटर को संसाधित कर सकते हैं, तो यह भी polymorphism है।

ऑब्जेक्ट उन्मुख भाषाओं में कक्षा पदानुक्रम के माध्यम से बहुरूपता है: बेस क्लास या इंटरफ़ेस का संदर्भ कई प्रकार के ऑब्जेक्ट को संदर्भित कर सकता है, जब तक कि अन्य प्रकार आधार से प्राप्त किए जाते हैं। इसे उप प्रकार के पॉलीमोर्फिज्म कहा जाता है।

जेनेरिक प्रोग्रामिंग एक और प्रकार का बहुरूपता है। प्रकारों के पैरामीटर लागू करके, कोड का एक ही बिट कई प्रकार के ऑब्जेक्ट को संभाल सकता है। इसे पैरामीट्रिक पॉलिमॉर्फिज्म कहा जाता है।

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

संबंधित मुद्दे