जेफ, मुझे लगता है कि आपके पास सही अंतर्ज्ञान है: यह निर्भर करता है।
वर्चुअल विधि प्रेषण के साथ ऑब्जेक्ट-ओरिएंटेड क्लास पदानुक्रम अच्छे होते हैं जब आपके पास कार्यान्वित करने की आवश्यकता वाले तरीकों का एक अपेक्षाकृत निश्चित सेट होता है, लेकिन कई संभावित उप-वर्ग जो पदानुक्रम की जड़ से उत्तराधिकारी हो सकते हैं और उन तरीकों को लागू कर सकते हैं। इस तरह के सेटअप में, नए उप-वर्गों को जोड़ने के लिए अपेक्षाकृत आसान है (केवल सभी विधियों को लागू करें), लेकिन नए तरीकों को जोड़ने में अपेक्षाकृत मुश्किल है (आपको यह सुनिश्चित करने के लिए सभी उप-वर्गों को संशोधित करना होगा कि वे नई विधि को सही तरीके से कार्यान्वित करें)।
पैटर्न मिलान के आधार पर कार्यक्षमता वाले डेटा प्रकार अच्छे होते हैं जब आपके पास डेटा प्रकार से संबंधित वर्गों का अपेक्षाकृत निश्चित सेट होता है, लेकिन उस डेटा प्रकार पर चलने वाले कई संभावित कार्य होते हैं। इस तरह के सेटअप में, डेटा प्रकार (केवल अपने सभी वर्गों पर पैटर्न मिलान) के लिए नई कार्यक्षमता जोड़ने के लिए अपेक्षाकृत आसान है, लेकिन डेटा प्रकार का हिस्सा होने वाले नए वर्गों को जोड़ने में अपेक्षाकृत मुश्किल है (आपको मिलान करने वाले सभी कार्यों को संशोधित करना होगा डेटा प्रकार पर यह सुनिश्चित करने के लिए कि वे नई कक्षा का सही ढंग से समर्थन करते हैं)।
ओओ दृष्टिकोण के लिए कैननिकल उदाहरण जीयूआई प्रोग्रामिंग है। जीयूआई तत्वों को बहुत कम कार्यक्षमता का समर्थन करने की आवश्यकता होती है (स्क्रीन पर खुद को चित्रित करना न्यूनतम होता है), लेकिन नए जीयूआई तत्व हर समय जोड़े जाते हैं (बटन, टेबल, चार्ट, स्लाइडर्स इत्यादि)। पैटर्न मिलान दृष्टिकोण के लिए कैनोलिक उदाहरण एक कंपाइलर है। प्रोग्रामिंग भाषाओं में आमतौर पर अपेक्षाकृत निश्चित वाक्यविन्यास होता है, इसलिए सिंटैक्स पेड़ के तत्व शायद ही कभी बदल जाएंगे (यदि कभी भी), लेकिन सिंटैक्स पेड़ पर नए ऑपरेशन लगातार जोड़े जा रहे हैं (तेज़ अनुकूलन, अधिक विस्तृत प्रकार का विश्लेषण, आदि)।
सौभाग्य से, स्कैला आपको दोनों दृष्टिकोणों को गठबंधन करने देता है। केस क्लास दोनों पैटर्न मिलान कर सकते हैं और आभासी विधि प्रेषण का समर्थन कर सकते हैं। नियमित कक्षाएं आभासी विधि प्रेषण का समर्थन करती हैं और संबंधित साथी ऑब्जेक्ट में निकालने वाले को परिभाषित करके मिलान पैटर्न हो सकती हैं। यह तय करने के लिए प्रोग्रामर पर निर्भर करता है कि प्रत्येक दृष्टिकोण उचित कब होता है, लेकिन मुझे लगता है कि दोनों उपयोगी हैं।
स्रोत
2009-02-19 09:17:52
बीस्ट लिंक टूटा हुआ है, जाहिर है यूआरएल योजना में बदलाव के लिए। मैंने यह देखने की कोशिश की कि क्या मुझे पता चल सकता है कि कौन सी पोस्ट का इरादा था, लेकिन मुझे यकीन नहीं है। कृपया एक सही लिंक प्रदान करें, या कुछ और जानकारी दें (पोस्ट का शीर्षक क्या था?)। –