27

मेरे पास स्थैतिक polymporhism की अवधारणा के बारे में कुछ प्रश्न हैं, मुझे कुछ समय के बारे में सुना है; आप उन्हें मुख्य रूप से सी ++ के संदर्भ में व्याख्या कर सकते हैं, लेकिन मैं भाषा-अज्ञेय उत्तरों की सराहना करता हूं जहां लागू हो (इसलिए सी ++ और भाषा-अज्ञेय दोनों को टैग करना)।स्टेटिक पॉलिमॉर्फिज्म परिभाषा और कार्यान्वयन

  1. हम कैसे सामान्य रूप में स्थिर बहुरूपता परिभाषित करते हैं? उदाहरण के लिए, मेरा मानना ​​है कि सी ++ से std::sort समारोह स्थिर बहुरूपी विचार किया जाएगा कि के रूप में यह कुछ कुछ वस्तुओं जो iterators की तरह व्यवहार द्वारा प्रदान की अंतरफलक पर निर्भर करता है, और प्रदान की iterators के इंटरफेस के तहत सही व्यवहार निर्धारित किया जा सकता संकलन समय में। क्या यह स्पष्टीकरण है कि हम स्थैतिक बहुरूपता को कैसे परिभाषित करते हैं, या यह सिर्फ एक विशिष्ट मामले का विवरण है और इसके लिए और भी कुछ है?

  2. सी ++ में स्थिर पॉलीमोर्फिज्म का उपयोग करने के लिए सामान्य कोड पैटर्न क्या हैं? इसके अलावा: एसपी केवल सी ++ में टेम्पलेट्स के माध्यम से हासिल किया गया है?

  3. यह सही है कि एक दिया यूएमएल वर्ग आरेख नहीं करता सीधे वर्णन कैसे बहुरूपता नियंत्रित किया जाता है और इस प्रकार, यह कम से कम आंशिक या तो स्थिर या गतिशील रूप से लागू किया जा सकता है? दूसरे शब्दों में: क्या ओओपी मॉडल से स्वतंत्र स्थिर बनाम गतिशील बहुरूपता की पसंद है, और इस प्रकार निर्णय लेने के लिए कार्यान्वयनकर्ता तक?

  4. स्थिर पॉलीमोर्फिज्म केवल सी ++ - विशिष्ट और टेम्पलेट कैसे काम करते हैं उससे संबंधित है? यदि नहीं, तो क्या यह किसी अन्य मुख्यधारा की भाषाओं में सी ++ के अलावा मौजूद है? क्या हमारे पास जावा, सी # .. में कुछ भी स्थिर polymorphism के बराबर हो सकता है, और यह कोई लाभ लाएगा?

  5. सबसे महत्वपूर्ण ... स्थैतिक बहुरूपता का उपयोग करने के वास्तविक लाभ क्या हैं? मुझे लगता है कि हम इस बात से सहमत हो सकते हैं कि यह कोड लचीलापन को कम करता है; इसके अलावा फायदे क्या हैं - सी ++ के मामले में - एक पॉइंटर अव्यवस्था (वर्चुअल फ़ंक्शन/पॉइंटर-टू-फ़ंक्शन/प्रतिनिधि लागत) को सहेजना? समस्या का वर्ग है जहां स्थैतिक बहुरूपता विशेष रूप से उपयोगी है, कार्यान्वयन के लिए सही विकल्प है?

+0

हम सहमत हैं कि यह कोड लचीलापन को कम करता है ?? –

+1

मुझे लगता है कि उसका मतलब "जटिलता" या संभवतः "अनावश्यकता" था। –

+0

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

उत्तर

13
  1. स्टेटिक पॉलिमॉर्फिक व्यवहार type polymorphism है जो रन टाइम के बजाए संकलन समय पर होता है।
  2. हां।
  3. यूएमएल इस बारे में है कि कक्षाएं रनटाइम पर कैसे बातचीत करती हैं - मुझे विश्वास नहीं है कि टेम्पलेट्स का वर्णन करने के लिए एक यूएमएल प्रारूप है, लेकिन मैं गलत हो सकता हूं।
  4. जहां तक ​​मुझे पता है कि यह सी ++ विशिष्ट है, लेकिन मैं सकारात्मक नहीं हूं कि मैंने कभी भी हर भाषा का आविष्कार नहीं किया है। :) उस ने कहा, सी # और जावा जैसी जेआईटीएड भाषाएं कुछ मामलों में अप्रत्यक्ष कॉल के प्रदर्शन प्रभाव को दूर करने के बजाए रनटाइम पर चलने वाली जानकारी का उपयोग करके अक्सर बहुत अच्छी होती हैं। चाहे यह संकलन समय पर हो या नहीं, हालांकि हवा पर दयालु है ... आखिरकार, इसे जस्ट-इन-टाइम कंपाइलर कहा जाता है।
  5. मुख्य लाभ केवल प्रदर्शन है। रनटाइम बहुरूपता सब कुछ स्थिर बहुरूपता कर सकते हैं (वास्तव में यह कुछ कर सकते हैं) कर सकते हैं, लेकिन यह अप्रत्यक्ष कॉल की लागत

अब (जो महंगा उन्हें के लिए पर्याप्त नहीं है, तो हो सकता है) किया जाता है, टेम्पलेट्स स्वयं संकलन समय polymorphism प्राप्त करने से परे कई उपयोग - उदाहरण के लिए SFINAE जादू जो boost::bind काम करता है निश्चित रूप से polymorphic नहीं है - यह केवल भाषा में असंगतताओं को सुचारू बनाने के लिए है।

+3

"2. हां।" फ़ंक्शन ओवरलोडिंग के बारे में क्या? –

+1

@ चार्ल्स: मैंने कभी भी किसी को "स्थैतिक बहुरूपता" अधिभारित करने के बारे में कभी नहीं सुना है (हालांकि मुझे लगता है कि यह फिट है)। –

+0

यह इस बात पर निर्भर करता है कि आप कैसे जवाब देते हैं (1)। –

5

कैसे हम सामान्य रूप में स्थिर बहुरूपता परिभाषित करते हैं?

उदाहरणों का उपयोग करके इसे समझने का सबसे अच्छा तरीका। Policy Based Design स्थैतिक बहुरूपता का एक उदाहरण है। और मेरी राय में, यह स्थैतिक बहुरूपता प्राप्त करने के लिए बहुत शक्तिशाली तकनीक है।

एक और उदाहरण है, Curiously recurring template pattern (CRTP) जो कि शक्तिशाली तकनीक भी है।

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