क्या एक घटक और एक मॉड्यूल के बीच अंतर है


31

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

घटकों में क्या अंतर है? मैंने इसे कुछ पुस्तकों में देखा, लेकिन घटकों का वर्णन बहुत समान है।


5
कौनसी भाषा? कौन सी वास्तुकला? मॉड्यूल की आपकी परिभाषा काम करती है। मैं एक घटक के बारे में सोचता हूं जो एक GUI कहने के लिए कुछ में प्लग करता है जबकि एक मॉड्यूल GUI में प्लग नहीं कर सकता है; मॉड्यूल GUI में काम कर सकते हैं यदि GUI द्वारा लिपटे / समर्थित हैं।
गाय कोडर

3
देखें कक्षा बनाम घटक बनाम नियंत्रण नोट: मैं जवाब दे नहीं कर रहा हूँ क्योंकि आपके प्रश्न का langauge या वास्तुकला का उल्लेख नहीं है।
गाइ कोडर

हां, इस मामले में, मैं सामान्य तौर पर परिभाषाओं के बारे में सोचता हूं
Mirco

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

हाँ, मुझे लगता है कि मेरा प्रश्न बहुत सामान्य है और उत्तर वास्तव में प्रयुक्त भाषा या पर्यावरण पर निर्भर करता है। नेवर ने सोचा कि इन शब्दों के लिए बहुत अलग-अलग परिभाषाएँ हैं
Mirco

जवाबों:


12

पद समान हैं। मैं आमतौर पर "मॉड्यूल" को "घटक" से बड़ा मानता हूं। एक घटक एक एकल भाग है, आमतौर पर गुंजाइश में अपेक्षाकृत छोटा, संभवतः सामान्य-उद्देश्य। उदाहरणों में यूआई नियंत्रण और "पृष्ठभूमि घटक" जैसे टाइमर, सूत्रण सहायक आदि शामिल हैं। एक "मॉड्यूल" पूरे का एक बड़ा टुकड़ा है, आमतौर पर ऐसा कुछ जो बाहरी हस्तक्षेप के बिना एक जटिल प्राथमिक कार्य करता है। यह एक एप्लिकेशन का क्लास लाइब्रेरी हो सकता है जो ई-मेल या डेटाबेस के साथ एकीकरण प्रदान करता है। यह एक सुइट के एकल अनुप्रयोग जितना बड़ा हो सकता है, जैसे कि ERP / अकाउंटिंग प्लेटफॉर्म का "अकाउंट्स प्राप्य मॉड्यूल"।

मैं "मॉड्यूल" को अधिक विनिमेय होने के रूप में भी सोचता हूं। अवयवों को दोहराया जा सकता है, नए वाले पुराने की तरह दिखते हैं लेकिन किसी तरह "बेहतर" होते हैं, लेकिन आमतौर पर सिस्टम का डिज़ाइन एक घटक (या उस घटक के बहुत विशिष्ट व्यवहार के अनुरूप डिजाइन किया गया प्रतिस्थापन) पर अधिक सख्ती से निर्भर होता है। गैर-कंप्यूटर शब्दों में, एक "घटक" कार का इंजन ब्लॉक हो सकता है; आप इंजन के भीतर टिंकर कर सकते हैं, यहां तक ​​कि इसे पूरी तरह से बदल सकते हैं, लेकिन कार में एक इंजन होना चाहिए, और इसे "स्टॉक" इंजन को बदलने के लिए बहुत कठोर विनिर्देशों जैसे आयाम, वजन, बढ़ते बिंदुओं आदि के अनुरूप होना चाहिए, जो कार मूल रूप से है बनाया गया था। दूसरी ओर एक "मॉड्यूल", का अर्थ है "प्लग-इन" -प्रकार की कार्यक्षमता; जो भी मॉड्यूल है, इसे इतने हल्के तरीके से संप्रेषित किया जा सकता है कि सिस्टम के अन्य हिस्सों पर मॉड्यूल को हटाया जा सकता है और / या कम से कम प्रभाव के साथ प्रतिस्थापित किया जा सकता है। एक घर की विद्युत प्रणाली अत्यधिक मॉड्यूलर है; आप 120V15A प्लग के साथ किसी भी 120V15A रिसेप्शन में कुछ भी प्लग कर सकते हैं और उस चीज़ की उम्मीद कर सकते हैं जो आप काम कर रहे हैं। घर की वायरिंग इस बात की कम परवाह नहीं कर सकती कि किस जगह पर प्लग किया गया है, बशर्ते सिस्टम की किसी एक शाखा में बिजली की मांग सुरक्षित सीमा से अधिक न हो।


4
सभी उत्तरों ने वास्तव में मेरी मदद की, लेकिन मैं केवल एक को ही स्वीकार कर सकता हूं। इसलिए मैं कीथ को स्वीकार करता हूं क्योंकि उसके पास सबसे कम प्रतिनिधि है
मिर्को

12

मॉड्यूल का सामान्य अर्थ पुन: प्रयोज्य कोड का एक समूह है, जो एक विशिष्ट कार्यक्रम से बंधा नहीं है। यह जीयूआई पुस्तकालयों के एक पूरे सेट से नीचे एक एकल वर्ग तक सब कुछ हो सकता है।

घटक का सामान्य अर्थ एक विशिष्ट इंटरफ़ेस का उपयोग करके प्रतिस्थापन की अतिरिक्त प्रतिबंध के साथ एक मॉड्यूल है। यदि आप एक GUI विजेट घटक बनाते हैं, तो इसका उपयोग कहीं भी किया जा सकता है, जहां एक विजेट की अपेक्षा की जाती है, बिना कॉलिंग कोड में कुछ विशेष करने के लिए। सामान्य तौर पर मॉड्यूल में ऐसा कोई प्रतिबंध नहीं है। क्यूटी और जीटीके + मॉड्यूल हैं, लेकिन मैं इसे कॉल करने वाले कोड में काफी काम के बिना एक दूसरे के लिए स्वैप नहीं कर सकता, इसलिए वे घटक नहीं हैं।

कई चौखटे या प्रोग्रामिंग भाषाएं शब्दों का उपयोग कुछ अधिक विशिष्ट अर्थ के लिए करती हैं, यही वजह है कि लोग संदर्भ के बारे में पूछ रहे हैं। कुछ सामान्य अर्थों में एक घटक हो सकता है, लेकिन अगर यह बहुत विशिष्ट IComponentइंटरफ़ेस को लागू नहीं करता है, तो इसे संदर्भ में एक घटक नहीं माना जा सकता है। अजगर में, किसी वस्तु moduleका उपयोग करके आप कुछ विशिष्ट तकनीकी अर्थ प्राप्त कर सकते हैं import। आमतौर पर लोग इन संदर्भ-विशिष्ट अर्थों का उल्लेख कर रहे हैं।


आपकी परिभाषा ठीक है, लेकिन आपका उदाहरण (Qt बनाम GTK +) त्रुटिपूर्ण है (हालांकि मैं मानता हूं कि मैं उनमें से किसी को भी घटक नहीं कहूंगा)। IMHO Qt और GTK + दोनों में सैकड़ों छोटे घटक होते हैं, जिसके परिणामस्वरूप इंटरफेस का एक बहुत व्यापक संग्रह होता है। यही कारण है कि यह बहुत संभावना नहीं है कि किसी को कभी समय उनमें से एक के लिए एक इंटरफेस संगत प्रतिस्थापन बनाने के लिए निवेश करेगा बनाता है, और है कि IMHO कारण है कि वे कोई घटक हैं है। हालाँकि, सिर्फ इसलिए कि सॉफ्टवेयर के दो टुकड़ों को आपस में नहीं जोड़ा जा सकता है, उन्हें घटकों के रूप में अयोग्य घोषित नहीं किया जाता है, केवल एक सामान्य इंटरफ़ेस वाले घटकों के रूप में।
डॉक ब्राउन

9

यदि हम विशेष भाषाओं, रूपरेखाओं और अपनी स्वयं की व्याख्याओं से अमूर्त हैं, तो अमूर्त सॉफ्टवेयर ग्रैन्युलैरिटी पदानुक्रम निम्नलिखित हैं:

Product - application, library, service
  Module - GUI, core logic, data, etc...
    Component - purpose specific collection of objects
      Object - collection of primitives
        Primitive - numbers, functions, etc...
  • उत्पाद

सादा और सरल, उत्पाद जुड़ा कार्यात्मक मॉड्यूल का एक काम संग्रह है।

  • मॉड्यूल

जैसा कि बहुत नाम का तात्पर्य है, एक मॉड्यूल की प्रेरणा प्रतिरूपकता है। कितने दावों के विपरीत, यह वास्तव में कोड पुन: उपयोग नहीं करता है। ऐसे कई मॉड्यूल हैं जो वास्तव में पुन: प्रयोज्य नहीं हैं, और उन चीजों के साथ फिट नहीं होते हैं जिनके लिए वे डिज़ाइन नहीं किए गए थे।

अलग-अलग सॉफ़्टवेयर परतों को अलग करना महत्वपूर्ण है, जो सॉफ्टवेयर को लागू करने और बनाए रखने के लिए बहुत आसान बनाता है, और एक अलग जीयूआई फ्रेमवर्क के सामने के छोर की तरह कुछ को फिर से लागू करने की आवश्यकता है, मॉड्यूलरिटी सक्षम बनाता है कि एक आसान और सुरक्षित तरीके से, बिना ब्रेक के सभी जगह कोड।

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

  • अंग

बारीकियों के संदर्भ में घटक मॉड्यूल और वस्तु के बीच बैठता है। एक घटक का उद्देश्य एक उद्देश्य विशिष्ट इकाई बनाने के लिए सामान्य उद्देश्य वस्तुओं के संग्रह को एक साथ रखना है।

जैसा कि नाम का अर्थ है, मॉड्यूल के विपरीत, घटक "स्व-निहित" नहीं है, यह पूरे बड़े कार्यात्मक का एक हिस्सा है।

  • वस्तु

ऑब्जेक्ट घटक के छोटे बिल्डिंग ब्लॉक हैं। वस्तुएं आदिमता का संग्रह हैं और उन्हें कुछ निचले स्तर की सेवा के लिए एक साथ जोड़े, अधिक सार्वभौमिक जबकि अभी भी कुछ विशिष्ट उद्देश्य हैं।

  • आदिम

प्राइमिटिव सबसे छोटे, सरल और सबसे कम स्तर के सॉफ्टवेयर डेवलपमेंट ग्रैन्युलैरिटी हैं। यह मूल रूप से केवल पूर्णांक और वास्तविक संख्या और फ़ंक्शन / ऑपरेटर हैं, हालांकि अधिकांश भाषाओं का अपना अतिरिक्त "प्रथम श्रेणी के नागरिक" हैं।

बहुत कम आप आदिम के साथ कर सकते हैं, और एक ही समय में, यह इतने निचले स्तर पर है कि आप इसके साथ व्यावहारिक रूप से सब कुछ पूरा कर सकते हैं। यह सीधे तौर पर आदिम के साथ काम करते हुए पूरा करने के लिए बस बहुत, बहुत ही क्रियात्मक, पागलपन से जटिल और असंभव थकाऊ है।

  • इस सबका क्या मतलब है?

जैसा कि पहले ही ऊपर उल्लेख किया गया है, सीधे आदिम के साथ काम करना एक बहुत बुरा विचार है। न केवल इसलिए कि यह आधुनिक दिन सॉफ्टवेयर विकास के लिए असंभव, जटिल, धीमा और थकाऊ है, बल्कि यह परीक्षण और रखरखाव के लिए भी अत्यंत अप्रिय और अवरोधक है।

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

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

  • पारिभाषिक शब्दावली

तकनीकी रूप से वे सभी "वस्तुएं" हैं, वे सभी सॉफ्टवेयर विकास के "घटक" हैं, वे सभी "मॉड्यूलर" हैं जो एक साथ फिट होने में सक्षम हैं, वे सभी "उत्पाद" इस अर्थ में हैं कि वे उत्पादित किए गए हैं और इसी तरह। ..

यह शब्दावली या नामकरण के बारे में नहीं है, यह इस बारे में है कि चीजों को कैसे बढ़ाया जाए और रचनात्मकता और उत्पादकता के विभिन्न पहलुओं को प्रभावित किया जाए। और न केवल उन सभी विभिन्न स्तरों का उपयोग करने के महत्व के बारे में, बल्कि गलत स्तर पर एक लक्ष्य को पूरा करने की कोशिश न करने के महत्व के बारे में भी, जो केवल प्रतिसंबंधी हो सकता है।


1
मॉड्यूल का आपका संस्करण एक पैकेज की तरह लगता है।
जेएम बेकर

1
@JMBecker वास्तव में नहीं है, ग्रैन्युलैरिटी के संदर्भ में एक पैकेज में वस्तुओं के संग्रह से लेकर पूर्ण स्टैंडअलोन उत्पाद तक कुछ भी शामिल हो सकता है। ग्रैन्युलैरिटी चेन में एक लिंक की तुलना में कोड के पुन: उपयोग के लिए पैकेजिंग अधिक सुविधाजनक है।
Dtech

3

यह आपके संदर्भ पर निर्भर करता है। मॉड्यूल का उपयोग पहले से ही कुछ भाषाओं में DLL स्तर के समूहों को संदर्भित करने के लिए किया जाता है, दूसरों में 'पैकेज' या 'असेंबली' के समान है। घटक का उपयोग COM चीजों के साथ-साथ खेल विकास में आम आधारित घटक सामग्री के लिए किया जाता है।

सामान्य वास्तुशिल्प शब्दों में, मॉड्यूल और घटक दोनों एक अच्छी तरह से परिभाषित इंटरफ़ेस के पीछे कोड के कुछ बंडल को संदर्भित करते हैं। सामान्य तौर पर, मॉड्यूल बड़े बंडलों को संदर्भित करता है। वहाँ अक्सर इंटरफेस का एक सेट होता है और मॉड्यूल अपने दम पर खड़े होने में सक्षम हो जाता है।

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

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