[Ruby] एक वर्ग और एक मॉड्यूल के बीच अंतर


Answers

╔═══════════════╦═══════════════════════════╦═════════════════════════════════╗
║               ║ class                     ║ module                          ║
╠═══════════════╬═══════════════════════════╬═════════════════════════════════╣
║ instantiation ║ can be instantiated       ║ can *not* be instantiated       ║
╟───────────────╫───────────────────────────╫─────────────────────────────────╢
║ usage         ║ object creation           ║ mixin facility. provide         ║
║               ║                           ║   a namespace.                  ║
╟───────────────╫───────────────────────────╫─────────────────────────────────╢
║ superclass    ║ module                    ║ object                          ║
╟───────────────╫───────────────────────────╫─────────────────────────────────╢
║ methods       ║ class methods and         ║ module methods and              ║
║               ║   instance methods        ║   instance methods              ║
╟───────────────╫───────────────────────────╫─────────────────────────────────╢
║ inheritance   ║ inherits behaviour and can║ No inheritance                  ║
║               ║   be base for inheritance ║                                 ║
╟───────────────╫───────────────────────────╫─────────────────────────────────╢
║ inclusion     ║ cannot be included        ║ can be included in classes and  ║
║               ║                           ║   modules by using the include  ║
║               ║                           ║   command (includes all         ║
║               ║                           ║   instance methods as instance  ║
║               ║                           ║   methods in a class/module)    ║
╟───────────────╫───────────────────────────╫─────────────────────────────────╢
║ extension     ║ can not extend with       ║ module can extend instance by   ║
║               ║   extend command          ║   using extend command (extends ║
║               ║   (only with inheritance) ║   given instance with singleton ║
║               ║                           ║   methods from module)          ║
╚═══════════════╩═══════════════════════════╩═════════════════════════════════╝
Question

मैं जावा से आया था, और अब मैं रूबी के साथ और अधिक काम कर रहा हूं।

एक भाषा सुविधा जो मैं परिचित नहीं हूं वह module । मैं सोच रहा हूं कि वास्तव में एक module क्या है और आप एक का उपयोग कब करते हैं, और class module उपयोग क्यों करते हैं?




निचली पंक्ति: एक मॉड्यूल एक स्थिर / उपयोगिता वर्ग और एक मिश्रण के बीच एक क्रॉस है।

मिक्सिन "आंशिक" कार्यान्वयन के पुन: प्रयोज्य टुकड़े हैं, जिन्हें नए वर्गों को लिखने में मदद के लिए मिश्रण और मिलान फैशन में संयुक्त (या रचना) किया जा सकता है। इन वर्गों के अतिरिक्त अतिरिक्त रूप से अपना स्वयं का राज्य और / या कोड हो सकता है।




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

एक मॉड्यूल कई वर्गों द्वारा शामिल किया जा सकता है। मॉड्यूल विरासत में नहीं मिल सकते हैं, लेकिन यह "मिश्रण" मॉडल उपयोगी प्रकार का "एकाधिक उत्तराधिकारी" प्रदान करता है। ओओ शुद्धवादी उस कथन से असहमत होंगे, लेकिन काम पूरा करने के तरीके में शुद्धता को न आने दें।

(यह उत्तर मूल रूप से http://www.rubycentral.com/pickaxe/classes.html से जुड़ा हुआ है, लेकिन वह लिंक और उसका डोमेन अब सक्रिय नहीं है।)




कक्षा

जब आप कक्षा को परिभाषित करते हैं, तो आप डेटा प्रकार के लिए ब्लूप्रिंट परिभाषित करते हैं। कक्षा धारण डेटा, उस विधि के साथ बातचीत करने वाली विधि है और वस्तुओं को तुरंत चालू करने के लिए उपयोग की जाती है।

मॉड्यूल

  • मॉड्यूल एक साथ विधियों, वर्गों और स्थिरांक समूहबद्ध करने का एक तरीका है।

  • मॉड्यूल आपको दो प्रमुख लाभ देते हैं:

    => मॉड्यूल नामस्थान प्रदान करते हैं और नाम संघर्ष को रोकते हैं। नेमस्पेस किसी अन्य नाम से लिखे गए नाम के साथ कार्यों और कक्षाओं के साथ संघर्ष से बचने में मदद करता है।

    => मॉड्यूल मिश्रण सुविधा लागू करते हैं।

(क्लाज़ में मॉड्यूल समेत क्लाज़ मॉड्यूल विधियों तक पहुंच प्रदान करता है।)

(क्लाज़ के साथ क्लाज़ को क्लास क्लाज़ को मोड विधियों तक पहुंच प्रदान करें।)