अस्तित्व के प्रकार इंटरफेस से कैसे भिन्न होते हैं?


11

अस्तित्वगत प्रकार को देखते हुए

T = X.{op₁:X, op₂:Xboolean}

और यह सामान्य जावा इंटरफ़ेस:

interface T<X> {
    X op₁();
    boolean op₂(X something);
}

अस्तित्वगत प्रकार और जावा इंटरफ़ेस के बीच मूलभूत अंतर क्या हैं?

जाहिर है कि वाक्यात्मक अंतर हैं, और जावा के ऑब्जेक्ट-ओरिएंटेशन (जिसमें छिपे हुए thisपैरामीटर आदि जैसे विवरण भी शामिल हैं )। मुझे इन पर वैचारिक और अर्थ-संबंधी मतभेदों में इतनी दिलचस्पी नहीं है - हालांकि अगर कोई कुछ महीन बिंदुओं पर प्रकाश डालना चाहेगा (जैसे कि Tबनाम बनाम के बीच का अंतर T<X>), तो उसकी भी सराहना की जाएगी।


जवाबों:


4

हम्म ... यह परिभाषा बहुत हद तक कुछ हस्केल नमूने के समान है जो मैंने बहुत समय पहले देखी है।

{-# LANGUAGE ExistentialQuantification #-}
data X = forall a . X { value :: a, viewValue :: a -> String }
instance Show X where show (X { value = x, viewValue = f}) = f x
sample :: [X]
sample = [X 3 show, X "abc" show, X 3.14 show]

जब कंस्ट्रक्टर Xलगाया जाता है तो ∀ वास्तव में ∀ बन जाता है। ध्यान दें कि जब आप बाहर निकालते valueहैं तो आप प्रकार नहीं जानते हैं और इस पर ऑपरेशन का खाली सेट है। लेकिन चूंकि viewValueयह थोड़े सुसंगत है, valueइसलिए इसे लागू किया जा सकता है।

मुझे लगता है कि interfaceआपके द्वारा प्रस्तावित जावा के मुख्य अंतर का तथ्य यह है कि आपको परिणाम के गुजरने के लिए मध्यवर्ती प्रकार जानना op₁होगा op₂। अस्तित्व के प्रकार के लिए Ie उचित प्रणाली को सही प्रकार का चयन करना चाहिए जो शर्त के अनुसार मौजूद है। यानी आपको टाइप के साथ फ़ंक्शन लिखने में सक्षम होना चाहिए ∀X. X→(X→boolean)→T:। प्रचलित नमूने में ऐसे फ़ंक्शन का Xउपयोग किया जाता है X 3 show( showफ़ंक्शन है जो किसी भी प्रकार का तर्क लेता है जो लागू होता है Showऔर वापस लौटता है String)

अपडेट किया गया: मैंने अभी आपके प्रश्न को फिर से पढ़ा और मुझे लगता है कि मुझे जावा के लिए उचित निर्माण मिल गया है:

interface T {
    boolean op₂();
}
...
T x = new T() {
    private final int op = ...;
    public boolean op₂() { return ((op % 2) == 0); }
};
T y = new T() {
    private final char op = ...;
    public boolean op₂() { return ('0' <= op && op <= '9'); }
};
if (x.op₂() && y.op₂()) ...

आप उल्लेख करने के बारे में सही हैं this- यह वास्तव में आपका op right है।

इसलिए मुझे लगता है कि अब मुझे समझ में आया है कि शास्त्रीय OOP भाषाएँ (जावा, C #, C ++ आदि) हमेशा एकल मान के साथ अस्तित्वगत प्रकार को लागू करती हैं thisऔर इसके ऊपर एक फ़ंक्शन "विधियाँ" कहलाता है, जो उस मूल्य के साथ कहलाता है :)

क्षमा करें, मैं जावा से बहुत परिचित नहीं हूं, लेकिन मुझे आशा है कि आपको विचार मिल गया होगा।


मैं इसमें जोड़ दूंगा कि आप कार्यात्मक प्रोग्रामिंग समर्थन के लिए जावा 8 में प्रस्तुत किए जाने वाले एकल सार विधि (एसएएम) प्रकार को देखना चाहते हैं।
मार्टिज़न वेरबर्ग

2

अंतर केवल इतना है कि जावा इंटरफेस वास्तव में जावा कंपाइलर के लिए कुछ का मतलब है।

अस्तित्वगत प्रकार किसी भी भाषा के लिए गैर-विशिष्ट प्रकार की औपचारिक परिभाषा है। कंप्यूटर वैज्ञानिक इस प्रकार की परिभाषा का उपयोग चीजों के प्रकार और इसे लागू करने वाली भाषाओं के बारे में साबित करने के लिए करते हैं। जावा इंटरफ़ेस औपचारिक रूप से परिभाषित प्रकार के जावा के कार्यान्वयन में से एक है।


नहीं। सीएफ विलियम कुक पेपर।
निकोलस

2

प्रस्तुत 2 प्रकार एक दूसरे से बहुत अलग हैं। आपके द्वारा लिखी गई इंटरफ़ेस परिभाषा एक सार्वभौमिक प्रकार है (इस श्रेणी में सामान्य गिरावट में जावा जेनरिक)।

एक अस्तित्वगत प्रकार उपभोक्ता से इसके कार्यान्वयन के भीतर एक प्रकार छुपाता है। सहज रूप से, एक्स के लिए टी में अस्तित्व में होने के लिए, एक्स की पहचान किसी भी उपभोक्ता से नहीं जानी जा सकती है; सभी को ज्ञात होना चाहिए कि परिभाषा में प्रदान किए गए संचालन का सेट है। किसी प्रकार X के लिए एक प्रकार T मौजूद है।

इसके विपरीत, एक सार्वभौमिक प्रकार सभी प्रकारों पर लागू संचालन को परिभाषित करता है, जिसमें से उपभोक्ता चुनने के लिए स्वतंत्र है। इंटरफ़ेस प्रकार टी वास्तव में यही है। X उपभोक्ता द्वारा त्वरित किया जाता है, जिसे पता चल जाएगा कि X किस प्रकार का है। ब्रह्मांड में हर प्रकार के X के लिए एक प्रकार T मौजूद है।

वाइल्डकार्ड ( List<?>) के सीमित मामले को छोड़कर, अस्तित्व वास्तव में जावा में भाषा निर्माण के रूप में मौजूद नहीं हैं । लेकिन हाँ, वे इंटरफेस के साथ अनुकरण किया जा सकता है। समस्या तब डिजाइन की अधिक हो जाती है।

जैसा कि ओएन ने बताया, ऑब्जेक्ट-ओरिएंटेड सेटिंग में, अस्तित्ववादी को लागू करने के लिए मुश्किल हो जाता है क्योंकि जिस तरह से आप आमतौर पर एक्स की प्रकार की जानकारी को सांकेतिक शब्दों में बदलना करते हैं (आप इसके साथ क्या कर सकते हैं) एक इंटरफ़ेस प्रकार में सदस्य कार्य करता है जो एक्स लागू करता है। संक्षेप में, इंटरफेस कुछ प्रकार की अमूर्त क्षमताओं को खरीद सकते हैं, लेकिन कुछ हद तक अस्तित्व के उन्मूलन की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.