2009-02-22 11 views
20

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

उत्तर

7

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

+0

यहां मेरे अपने लाभ के लिए, क्या मैं अपने मूल्यांकन में गलत हूं? इस तरह मैं अब तक उनका उपयोग कर रहा हूं, शायद मैं कुछ खो रहा हूं। –

+0

आप रूबी कक्षा में एक मॉड्यूल शामिल कर सकते हैं और कम से कम इसके व्यवहार, उदाहरण विधियों का वारिस कर सकते हैं। Http://www.ruby-doc.org/core/classes/Module.html – tvanfosson

+0

पर एक नज़र डालें, यह सच है, मुझे इसके बारे में पता था, मैं शायद ही कभी इसे आरपीजी निर्माता में उपयोग करता हूं। धन्यवाद, अब मैं बिंदु देखता हूं। –

3

नहीं रूबी में एक मॉड्यूल एक स्थिर वर्ग के समान है। मैं जावा डेवलपर नहीं हूं, लेकिन मैं अनुमान लगा रहा हूं कि जावा इंटरफेस सी # इंटरफेस के समान हैं, यानी, वे अनुबंध को परिभाषित करते हैं, लेकिन कार्यान्वयन नहीं करते हैं।

मुझे यह नहीं करना चाहिए, जबकि मुझे रूबी में अनुभव है, यह वीडियो गेम निर्माण (आरजीएसएस/2) में है। मुझे यकीन है कि मैं कई चीजों से अनजान हूं, एक अनुभवी रूबी प्रोग्रामर जानता होगा।

+0

इसलिए यदि 'रूबी 'मॉड्यूल'' जावा 'स्थिर वर्ग की तरह है, तो' '#' 'नेमस्पेस' की तरह 'रूबी' मॉड्यूल' है? – mmcrae

3

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

उदाहरण के लिए, ऐसे मॉड्यूल हैं जिन्हें तुलनात्मक और संख्यात्मक जैसी चीजें कहा जाता है और आगे जो कार्यक्षमता को समाहित करता है, यदि आप इन विशेषणों को लागू करते हैं तो आप कुछ अपेक्षा करते हैं। एक बुनियादी परिभाषा प्रदान करके (एक विधि जो तुलनात्मक और दोहराने के लिए एक पुनरावर्तक के लिए दो उदाहरणों की तुलना करती है) आप मॉड्यूल आयात कर सकते हैं और स्वयं को पूर्ण इंटरफ़ेस से ढूंढ सकते हैं।

दूसरी ओर नेट जैसे मॉड्यूल हैं जिन्हें आप कभी-कभी कक्षा में शामिल नहीं करेंगे, लेकिन नेट :: HTTP, नेट :: एफ़टीपी, नेट :: एसएमटीपी आदि जैसे कार्यक्षमता का एक बंडल प्रदान करते हैं।

मध्य में मैथ और प्रोसेस जैसी चीजें हैं जिनका उपयोग एक या दूसरे तरीके से किया जा सकता है।

- मार्कसक्यू

17

संक्षिप्त उत्तर नहीं है।

तर्क है, जावा/सी # इंटरफेस विधि कार्यान्वयन को परिभाषित करता है जो एक कार्यान्वयन वर्ग न्यूनतम प्रदान करेगा।

इसके अतिरिक्त:

  • माणिक मॉड्यूल के साथ बतख टाइपिंग की वजह से इस तरह का कोई अनुबंध नहीं है।
  • मॉड्यूल आसान पुन: उपयोग के लिए सामान्य कार्यक्षमता निकालने का एक तरीका है। निकटतम संबंध सी # एक्सटेंशन विधियां है, लेकिन वे एक सटीक मिलान नहीं हैं क्योंकि वे एक स्थिर संदर्भ में मौजूद हैं।
  • मॉड्यूल मौजूदा कक्षा में राज्य जोड़ सकते हैं।
  • मॉड्यूल स्थिर तरीकों
  • मॉड्यूल नामस्थान
  • के रूप में कार्य कर सकते हैं हो सकता है

उदाहरण:

module SimpleConversation 
    class NamespacedExample 
    def poke 
     puts "ouch" 
    end 
    end 

    attr_accessor :partner_name 
    def converse 
    partner_name ||= "Slowpoke" 
    speak + "\n#{partner_name}: Yes they are" 
    end 

    def self.yay 
    puts "yay" 
    end 
end 

class Foo 
    include SimpleConversation 
    attr_accessor :name 

    def speak 
    name ||= "Speedy" 
    "#{name}: tacos are yummy" 
    end 
end 

x = Foo.new 
x.name = "Joe" 
x.partner_name = "Max" 
puts x.speak 
puts x.converse 

y = SimpleConversation::NamespacedExample.new 
y.poke 

SimpleConversation.yay 
2

रूबी में दृश्य मॉड्यूल की औपचारिक बिंदु से लागू डिजाइन पैटर्न "mixin" कहा जाता है। http://en.wikipedia.org/wiki/Mixin

इसकी तुलना PHP लक्षणों से की जा सकती है। http://php.net/manual/en/language.oop5.traits.php

ऐसी वास्तुकला उन भाषाओं में उपयोगी है जो एकाधिक विरासत की अनुमति नहीं देते हैं, उदा। रुबी, पीएचपी।

संबंधित मुद्दे