रूबी (या किसी अन्य गतिशील भाषा) में इंटरफेस के बजाय मैं क्या उपयोग कर सकता हूं?


9

मेरा लक्ष्य कक्षाओं के बीच अनुबंधों को परिभाषित करना है।

मुझे duck टाइपिंग पसंद है और सभी लेकिन मैं अपने एप्लिकेशन की अलग-अलग परतों के बीच एक इंटरफ़ेस को स्पष्ट रूप से परिभाषित करना चाहूंगा, जो बाहरी से कॉल करने की विधि है, और जो एक्सेसरी मेथड्स हैं जिनका उपयोग अन्य लेयर द्वारा नहीं किया जाना चाहिए। ।

उदाहरण के लिए जावा में मैं प्राप्त () और सहेजें () जैसी विधियों के साथ एक Persistor इंटरफ़ेस को परिभाषित कर सकता हूं और फिर डेटाबेस पर बने रहने के लिए सभी तरीकों के साथ एक JdbcPersistor वर्ग को परिभाषित करता हूं। और हो सकता है कि एक अन्य रेस्टपर्सिस्टर एक रिमोट रेस्टरवर को बचाने के लिए अन्य तरीकों के साथ।

मैं रूबी में इंटरफेस के लिए नहीं कह रहा हूं, बस यह जानने के लिए कि क्या कोई साफ-सुथरा तरीका है, इस अंतर को बनाए रखें। मुझे रूबी पसंद है लेकिन मैंने इसके साथ छोटे प्रोजेक्ट पर ही काम किया है।


मुझे लगता है कि यह StackOverflow पर है ...
थोरस्टन मुलर

2
@thorsten स्टैक ओवरफ्लो विशिष्ट कार्यान्वयन समस्याओं के लिए है (अर्थात कोड में कोई समस्या है)। प्रोग्रामर पर सामान्य प्रोग्राम डिजाइन प्रश्न यहाँ पर हैं।

@ मर्क: सुधार के लिए धन्यवाद। मैंने सोचा कि यह रूबी पर बहुत विशिष्ट है (और उबरो के आखिरी वाक्य को याद किया)। तो मैंने अपने ज्ञान को अद्यतन किया। (फिर भी मेरा रास्ता इधर
उधर खोजते हुए

+1 उत्कृष्ट प्रश्न। मुझे दिलचस्पी है अगर लिखने, पढ़ने और दस्तावेज़ों के टन रखने या कुछ नासमझ सम्मेलनों का उपयोग करने के अलावा कोई अन्य तरीका है जैसे कि अंडरस्कोर या इससे पहले की आंतरिक गौण विधियों का उपयोग करना।
जूनास पुलकका २

+1 वैसे, PLT रैकेट में अनुबंधों के लिए समर्थन है, और गतिशील है। रूबी के समान कुछ जोड़ना एक दिलचस्प परियोजना होगी।
लैरी कोलेमन

जवाबों:


5

इसका उत्तर C # इंटरफेस और स्टैकओवरफ्लो पर रूबी के संदर्भ में दिया गया था: /programming/3505521/in-ruby-what-is-the-equivalent-to-an-interface-in-c

सारांशित: रूबी में कोई सटीक समकक्ष नहीं है क्योंकि बतख टाइपिंग एक औपचारिक इंटरफ़ेस को अनावश्यक बनाता है। इसके बजाय, एक "इंटरफ़ेस" या उपयोग करने वाले अनुबंध के अनुपालन के लिए परीक्षण पर विचार करें respond_to?


2
हां, लेकिन यह कोड को एक्सेस करने की विधि को नहीं रोक रहा है, यह नहीं होना चाहिए
Uberto

2

कुछ गतिशील रूप से टाइप की गई भाषाओं में इंटरफेस या एक समान अवधारणा है। उदाहरण के लिए, Objective-C में प्रोटोकॉल होते हैं। लेकिन ज्यादातर नहीं। एक गतिशील भाषा में प्रभावी होने के लिए, आपको यह भूलना होगा कि आप सांख्यिकीय रूप से टाइप की जाने वाली भाषाओं के बारे में क्या जानते हैं, भाषा की गतिशील प्रकृति को गले लगाते हैं। डायनामिक रूप से टाइप की गई भाषाएं आमतौर पर इंटरफेस का उपयोग करती हैं।


1

पर्ल 5 में, मॉस और मू दोनों भूमिकाएं (या लक्षण) प्रदान करते हैं जिन्हें कुछ तरीकों के कार्यान्वयन की आवश्यकता हो सकती है। मूस भी रनटाइम प्रकार प्रणाली के साथ आता है जो आपको ए को परिभाषित करने की अनुमति देता है duck_type, जो एक प्रकार की वस्तुओं की घोषणा है जिसमें आवश्यक तरीकों का सेट है।

भूमिकाएं कक्षाओं (या अन्य भूमिकाओं) द्वारा स्वयं कार्यान्वित की जाती हैं, और केवल इंटरफ़ेस ही नहीं, बल्कि कार्यान्वयन और व्यवहार भी प्रदान करती हैं। लेकिन वे भी (कम से कम मूस में) विधि संघर्ष का पता लगाने जैसी चीजों को संभालते हैं।

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