मुझे नहीं लगता कि मैं टाइप कक्षाएं समझता हूं। मैंने कहीं पढ़ा होगा कि टाइप क्लासेस को "इंटरफेस" (ओओ से) के रूप में माना जाता है कि एक टाइप इम्प्लीमेंट गलत और भ्रामक है। समस्या यह है, मुझे एक समस्या है जो उन्हें कुछ अलग और कैसे गलत है, के रूप में देख रही है।
उदाहरण के लिए, यदि मेरे पास एक प्रकार की कक्षा है (हास्केल सिंटैक्स में)
class Functor f where
fmap :: (a -> b) -> f a -> f b
यह कैसे इंटरफ़ेस से अलग है [1] (जावा सिंटैक्स में)
interface Functor<A> {
<B> Functor<B> fmap(Function<B, A> fn)
}
interface Function<Return, Argument> {
Return apply(Argument arg);
}
एक संभावित अंतर जो मैं सोच सकता हूं, वह यह है कि एक निश्चित आह्वान पर इस्तेमाल किया जाने वाला प्रकार वर्ग कार्यान्वयन निर्दिष्ट नहीं है, बल्कि पर्यावरण से निर्धारित होता है - कहते हैं, इस प्रकार के कार्यान्वयन के लिए उपलब्ध मॉड्यूल की जांच करना। यह एक कार्यान्वयन कलाकृति प्रतीत होती है जिसे एक OO भाषा में संबोधित किया जा सकता है; जैसे कंपाइलर (या रनटाइम) रैपर / एक्सटेंडर / मंकी-पैच के लिए स्कैन कर सकता है जो कि टाइप पर आवश्यक इंटरफ़ेस को उजागर करता है।
मुझे किसकी याद आ रही है?
[१] ध्यान दें कि यह ओओ भाषा दिए f a
जाने के fmap
बाद से तर्क हटा दिया गया है , आप इस विधि को किसी वस्तु पर कॉल करेंगे। यह इंटरफ़ेस मानता है कि f a
तर्क को ठीक कर दिया गया है।