मैं इस के लिए चारों ओर देख रहा हूं, और इसकी सामान्य प्रतिक्रिया "वे असंबंधित हैं, और किसी के लिए प्रतिस्थापित नहीं की जा सकती" के आधार पर दिखाई देती है। लेकिन कहें कि आप एक साक्षात्कार में हैं और पूछें "आप विरासत के बजाय टेम्पलेट का उपयोग कब करेंगे और इसके विपरीत?"टेम्पलेट बनाम विरासत का उपयोग कब करें
उत्तर
जब आप सुरक्षा को बनाए रखना चाहते हैं या वर्चुअल प्रेषण से बचना चाहते हैं तो आधार (या संरचना) में टेम्पलेट का उपयोग करें।
वास्तव में, मुझे [सीआरटीपी] (http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) के माध्यम से आभासी प्रेषण से परहेज करने का संदेह है साक्षात्कारकर्ता क्या देख रहा था। – ildjarn
"सामान्य प्रतिक्रिया" गलत है। में "प्रभावी सी ++," स्कॉट Meyers मद 41 में कहते हैं:
मद 41: अंतर्निहित इंटरफेस को समझें और संकलन समय बहुरूपता।
मेयर्स संक्षेप में प्रस्तुत करने पर चला जाता है:
- दोनों वर्गों और टेम्पलेट्स समर्थन इंटरफेस और बहुरूपता।
- कक्षाओं के लिए, इंटरफ़ेस स्पष्ट हैं और फ़ंक्शन हस्ताक्षर पर केंद्रित हैं। पॉलीमोर्फिज्म आभासी कार्यों के माध्यम से रनटाइम पर होता है।
- टेम्पलेट पैरामीटर के लिए, इंटरफेस अंतर्निहित हैं और मान्य अभिव्यक्तियों के आधार पर हैं। पॉलीमोर्फिज्म टेम्पलेट तत्काल और फ़ंक्शन ओवरलोडिंग रिज़ॉल्यूशन के माध्यम से संकलन के दौरान होता है।
टेम्पलेट्स उचित जब एक अंतरफलक है कि असंबंधित वस्तुओं के कई प्रकार के पर काम करता है परिभाषित करने हैं। टेम्पलेट कंटेनर कक्षाओं के लिए सही अर्थ बनाते हैं जहां यह आवश्यक है कंटेनर में वस्तुओं को सामान्यीकृत करें, फिर भी प्रकार की जानकारी बनाए रखें।
विरासत के मामले में, सभी पैरामीटर परिभाषित पैरामीटर प्रकार का होना चाहिए, या इससे विस्तारित होना चाहिए। इसलिए जब ऑब्जेक्ट्स पर विधियों का संचालन होता है जो सही पदानुक्रमित संबंधों का सही ढंग से होता है, तो विरासत सबसे अच्छा विकल्प होता है।
जब विरासत गलत है लागू है, तो इसे असंबंधित वस्तुओं के अत्यधिक जटिल श्रेणी पदानुक्रमों की आवश्यकता होती है। कोड की जटिलता एक छोटे से लाभ के लिए बढ़ेगी। यदि यह मामला है, तो टेम्पलेट का उपयोग करें।
जिस तरह से मैं इसे देखता हूं वह है कि टेम्पलेट्स और विरासत सचमुच ऑर्थोगोनल अवधारणाएं हैं: विरासत "ऊर्ध्वाधर" है और अमूर्त से अधिक से अधिक ठोस तक नीचे जाती है। एक आकार, एक त्रिकोण, एक समतुल्य त्रिकोण।
दूसरी तरफ टेम्पलेट्स "क्षैतिज" हैं और समांतर कोड के उदाहरण परिभाषित करते हैं जो एक दूसरे के कुछ भी नहीं जानते हैं। सॉर्टिंग पूर्णांक औपचारिक रूप से युगल सॉर्टिंग और स्ट्रिंग्स को सॉर्ट करने जैसा ही है, लेकिन ये तीन पूरी तरह से अलग-अलग फ़ंक्शन हैं। वे सभी दूर से "देखो" करते हैं, लेकिन उनके पास एक दूसरे के साथ कुछ लेना देना नहीं है।
विरासत रनटाइम अबास्ट्रक्शन प्रदान करता है। टेम्पलेट्स कोड जनरेशन उपकरण हैं।
क्योंकि अवधारणाएं ऑर्थोगोनल हैं, इसलिए वे एक आम लक्ष्य की दिशा में काम करने के लिए खुशी से उपयोग कर सकते हैं।इसका मेरा पसंदीदा उदाहरण टाइप एरर टाइप करें, जिसमें टाइप-मिसिंग कंटेनर में कार्यान्वयन वर्ग में वर्चुअल बेस पॉइंटर होता है, लेकिन एक टेम्पलेट व्युत्पन्न कक्षा द्वारा उत्पन्न किए गए मनमाने ढंग से कई ठोस कार्यान्वयन होते हैं। टेम्पलेट कोड पीढ़ी एक विरासत पदानुक्रम भरने के लिए कार्य करता है। जादू।
मुझे यह स्पष्टीकरण पसंद है। यह दूसरों की तुलना में सादे अंग्रेजी में थोड़ा और है। – Brent212
हम्म, मैं इस मामले में एक विशेषज्ञ नहीं हूं और इसलिए मुझे यह जवाब मिला, लेकिन जैसा कि आप इसका वर्णन करते हैं, ऐसा लगता है कि टेम्पलेट्स जटिल परिसर प्रणाली के लिए सी ++ की कमी को हल करते हैं जैसे कि मिश्रण (एक समस्या, उदाहरण के लिए , गो द्वारा सुंदर ढंग से हल)। अगर इनट्स और युगल और स्ट्रिंग्स में कुछ भी सामान्य नहीं है लेकिन उन्हें सॉर्ट करने की आवश्यकता है, तो इन तीनों को किसी भी तरह से "क्रमबद्ध" विशेषता में विस्तारित किया जाना चाहिए। – pistacchio
@pistacchio: मैं जटिल विरासत को "समाधान" नहीं कहूंगा। टेम्पलेट्स एक बहुत अच्छे तरीके से क्रमबद्धता प्रदान करते हैं, क्योंकि सॉर्टी को यह जानने की आवश्यकता नहीं है कि इसे सॉर्ट किया जा रहा है। कॉम्प्लेक्स विरासत आमतौर पर परिणाम देती है जब आप एक मजबूर मानसिकता के साथ काम करते हैं कि सबकुछ एक विरासत पदानुक्रम होना चाहिए, जो वास्तव में शायद ही उचित है। जाओ का दृष्टिकोण सरल है, लेकिन अधिक प्रतिबंधक और कम कुशल है। यह छोटी भाषा गो बनना चाहता है के लिए उपयुक्त है। –
टेम्पलेट एक एल्गोरिदम का वर्णन करता है जैसे वर्ग की दो वस्तुओं या उन्हें सॉर्ट करने के बीच तुलना का परिणाम तय करना। वस्तुओं के प्रकार (वर्ग) को अलग-अलग पर संचालित किया जा रहा है लेकिन ऑपरेशन या तर्क या चरण आदि तर्कसंगत रूप से वही है।
दूसरी तरफ विरासत बाल वर्ग द्वारा केवल माता-पिता की कार्यक्षमता को बढ़ाने या अधिक विशिष्ट बनाने के लिए उपयोग की जाती है। आशा है कि
- 1. टेम्पलेट विधि बनाम कब उपयोग करें। रणनीति?
- 2. जावास्क्रिप्ट टेम्पलेट इंजन का उपयोग कब करें?
- 3. HtmlControls बनाम WebControls का उपयोग कब करें
- 4. RACReplaySubject बनाम RACMulticastConnection का उपयोग कब करें?
- 5. SQLITE_TRANSIENT बनाम SQLITE_STATIC का उपयोग कब करें?
- 6. HttpMessageHandler बनाम ActionFilter का उपयोग कब करें?
- 7. टचमोव बनाम mousemove का उपयोग कब करें?
- 8. विशेषता का उपयोग कब करें (संपत्ति बनाम)?
- 9. स्ट्रेट बनाम str_replace का उपयोग कब करें?
- 10. निजी विरासत वीएस संरचना: कब उपयोग करें?
- 11. डिफ़ॉल्ट मॉडेलबिंडर बनाम IModelBinder का उपयोग कब करें
- 12. विरासत के बजाय प्रतिनिधिमंडल का उपयोग कब करें?
- 13. उपयोग करने के लिए() बनाम 'as' का उपयोग कब करें?
- 14. ko.utils.unwrapObservable का उपयोग कब करें?
- 15. पाइथन में गुणों का उपयोग कब करें विशेषताएँ बनाम कब उपयोग करें?
- 16. reinterpret_cast का उपयोग कब करें?
- 17. ओपनसीएल का उपयोग कब करें?
- 18. फ्लेक्स - रीमोटिंग बनाम HTTPService - कब उपयोग करें?
- 19. रूबी बनाम कब उपयोग करें PHP
- 20. सी ++ अवधारणा जांच बनाम विरासत
- 21. PHP कक्षाएं: कब उपयोग करें :: बनाम ->?
- 22. वेक्टर का उपयोग कब करें और सी ++ में सरणी का उपयोग कब करें?
- 23. Jquery - "यह" कब उपयोग करें और "$ (यह)" कब उपयोग करें?
- 24. मुझे विरासत के बजाय टेम्पलेट का उपयोग कब करना चाहिए, और इसके विपरीत?
- 25. इनलाइन का उपयोग :: सीपीपी बनाम एसडब्ल्यूआईजी - कब?
- 26. ट्यूपल का उपयोग कब और कब करें?
- 27. अपाचे बनाम अपाचे + टोमकैट का उपयोग कब करें?
- 28. स्थानीय बनाम रिमोट अभिनेताओं का उपयोग कब करें?
- 29. एचडीएफएस बनाम ग्रिडएफएस: किस का उपयोग कब करें?
- 30. डीबग बनाम यूनिट परीक्षणों का उपयोग कब करें?
यह "असली सवाल नहीं" कैसे है? बंद-खुश ट्रिगर उंगलियां मुझे परेशान करती हैं। –
यदि आप इस प्रश्न को साक्षात्कार में सुनते हैं, तो अलविदा कहने का समय है, क्योंकि वे सिर्फ अपना समय बर्बाद कर रहे हैं; और अब आप हमारे साथ ऐसा ही करते हैं। –
यह एक गूंगा साक्षात्कार सवाल है। सबसे अच्छा, यह गलत तरीका है। आपको "उपकरण एक्स का उपयोग कब करते हैं" नहीं पूछना चाहिए। आपको पूछना चाहिए, "यहां समस्या है जे। आप इसे कैसे हल करते हैं?" और जवाब "टूल एक्स" हो सकता है। – tenfour