मॉड्यूलर प्रोग्रामिंग

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

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

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, मॉड्यूल बनाने के लिए आर्किटेक्चरल पैटर्न के रूप में इंटरफेस का उपयोग होता है और इसे इंटरफ़ेस-आधारित प्रोग्रामिंग के रूप में जाना जाता है।

मॉड्यूल इंटरफेस उन तत्वों को व्यक्त करता है जो मॉड्यूल द्वारा प्रदान किए जाते है और आवश्यक इंटरफेस में परिभाषित तत्व अन्य मॉड्यूल द्वारा पहचाने जाने योग्य होते है।

इतिहास
मॉड्यूलर प्रोग्रामिंग, उप-प्रणालियों विशेष रूप से I/O के लिए और सॉफ्टवेयर लाइब्रेरी के रूप में, प्रारंभिक सॉफ्टवेयर प्रणाली की विधिया जहां इसका उपयोग कोड पुन: उपयोग के लिए होता है। प्रतिरूपकता के लक्ष्य के साथ मॉड्यूलर प्रोग्रामिंग, 1960 और 1970 के दशक के अंत में स्ट्रक्चर प्रोग्रामिंग की अवधारणा के बड़े पैमाने के एनालॉग के रूप में विकसित हुई। मॉड्यूलर प्रोग्रामिंग शब्द का कम से कम जुलाई 1968 में लैरी कॉन्स्टेंटाइन द्वारा सूचना और प्रणाली संस्थान में आयोजित मॉड्यूलर प्रोग्रामिंग पर राष्ट्रीय संगोष्ठी से प्रारंभ होता है; तथा अन्य प्रमुख अवधारणाएँ में छुपे हुए सूचना (1972) तथा चिंताओं को एसओसी, 1974 बताया गया था।।

मॉड्यूल को अल्गोल 68 (1968) के मूल विनिर्देश में सम्मलित नहीं किया गया था, लेकिन प्रारंभिक कार्यान्वयन, अल्गोल 68-R (1970) और अल्गोल 68C (1970) में एक्सटेंशन के रूप में सम्मलित किया गया था और बाद में औपचारिक रूप दिया गया। मॉड्यूलर प्रोग्रामिंग के लिए प्रारंभ से डिजाइन की गई पहली लैंग्वेज में से एक, निकोलस विर्थ द्वारा अल्पकालिक मॉड्यूल -3 (1975) के रूप में थी। एक और प्रारंभिक मॉड्यूलर लैंग्वेज मेसा (प्रोग्रामिंग लैंग्वेज ) (1970), ज़ेरॉक्स पर्क द्वारा दी गई थी और विर्थ ने मेसा के साथ-साथ इसके उत्तराधिकारी मॉड्यूल-2 (1978) में मूल मापांक को आकर्षित किया, जिसने बाद की लैंग्वेज को विशेष रूप से इसके उत्तराधिकारी मोडुला -3 1980 के दशक के माध्यम से प्रभावित किया। मोडुला का डॉट-योग्य नामों का उपयोग, जैसे एम.ए वस्तु को संदर्भित करने के लिए ए मॉड्यूल से एम रिकॉर्ड के एक क्षेत्र तक पहुँचने के लिए अंकन के साथ मेल खाता है और इसी प्रकार वस्तुओं या वस्तुओं के विधियो के लिए व्यापक रूप में उपलब्ध है, सी हैश, डार्ट, गो, जावा, ओकैमल और पायथन में देखा गया है। 1980 के दशक से मॉड्यूलर प्रोग्रामिंग व्यापक हो गई, मूल पास्कल प्रोग्रामिंग लैंग्वेज (1970) में मॉड्यूल के रूप में सम्मलित नहीं थे, लेकिन बाद के संस्करणों, विशेष रूप से यूसीएसडी पास्कल (1978) और टर्बो पास्कल (1983) ने उन्हें इकाइयों के रूप में सम्मलित किया गया था, जैसा कि पास्कल-प्रभावित एडा (प्रोग्रामिंग लैंग्वेज ) (1980) विस्तारित पास्कल आईएसओ 10206:1990 मानक अपने मॉड्यूलर समर्थन में मोडुला2 के करीब रखा गया। मानक एमएल (1984), मॉड्यूल के बीच मैप करने के लिए मानक एमएल मॉड्यूल प्रणाली पैरामीटरयुक्त मॉड्यूल सहित सबसे पूर्ण मॉड्यूल प्रणाली में से एक है।

1980 और 1990 के दशक में, विशेष रूप से सी ++ और जावा की लोकप्रियता के कारण, मॉड्यूलर प्रोग्रामिंग को ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के साथ ओवरशैड किया गया था और अधिकांशतः इसका मिलान किया गया था। उदाहरण के लिए, लैंग्वेज के C पैरेंट को सी ++ में वस्तुओं और क्लासेस के लिए समर्थन प्राप्त था मूल रूप से सी क्लासेस के साथ, 1980 और Objective-C 1983, में केवल 30 साल या उससे अधिक बाद के मॉड्यूल का समर्थन करता है। जावा 1995 संकुल के रूप में मॉड्यूल का समर्थन करता है, चूंकि कोड संगठन की प्राथमिक इकाई एक क्लास के रूप में है। चूंकि, पायथन 991 ने शुरुआत से ही मॉड्यूल और ऑब्जेक्ट दोनों का प्रमुखता से उपयोग किया, तथा कोड संगठन की प्राथमिक इकाई के रूप में मॉड्यूल और बड़े पैमाने की इकाई के रूप में पैकेज का उपयोग किया जाता है और पर्ल 5 1994 में सीपीएएन 1993 से उपलब्ध मॉड्यूल की एक विस्तृत श्रृंखला के साथ मॉड्यूल और ऑब्जेक्ट्स दोनों के लिए समर्थन के रूप में सम्मलित है। ओसीएएमएल 1996 ने मॉड्यूल और फ़ैक्टरों का समर्थन करके एमएल का अनुसरण किया।

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

शब्दावली
असेंबली (सीएलआई) शब्द का प्रयोग नेट लैंग्वेज, सी हैश, एफ हैश या विजुअल बेसिक.नेट या डार्ट में पैकेज के रूप में उपयोग किया जाता है जैसा, डार्ट (प्रोग्रामिंग लैंग्वेज ), गो (प्रोग्रामिंग लैंग्वेज ) या जावा (प्रोग्रामिंग लैंग्वेज ) का प्रयोग मॉड्यूल की जगह कभी-कभी किया जाता है। अन्य कार्यान्वयन में, ये विशिष्ट अवधारणाएं हैं; पायथन प्रोग्रामिंग लैंग्वेज में एक पैकेज मॉड्यूल का संग्रह के रूप में होता है, जबकि जावा 9 में जावा मॉड्यूल प्रणाली एन्हांस्ड एक्सेस कंट्रोल के साथ पैकेज का एक संग्रह कार्यान्वित किया गया था।

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

मॉड्यूल के लिए अन्य शब्दों में इकाई सम्मलित है, जिसका उपयोग पास्कल प्रोग्रामिंग लैंग्वेज में किया जाता है।

लैंग्वेज समर्थन
औपचारिक रूप से मॉड्यूल अवधारणा का समर्थन करने वाली लैंग्वेज में एडा प्रोग्रामिंग लैंग्वेज, एएलजीओएल, ब्लिट्ज मैक्स, सी ++, सी शार्प प्रोग्रामिंग लैंग्वेज सीहैश, क्लोजर, कोबोल, कॉमन लिस्प, डी (प्रोग्रामिंग लैंग्वेज ), डार्ट (प्रोग्रामिंग लैंग्वेज ), ईसी (प्रोग्रामिंग) के रूप में सम्मलित होती है। लैंग्वेज , एरलांग प्रोग्रामिंग लैंग्वेज, एलिक्सिर प्रोग्रामिंग लैंग्वेज , एल्म (प्रोग्रामिंग लैंग्वेज ), एफ (प्रोग्रामिंग लैंग्वेज ), एफ शार्प (प्रोग्रामिंग लैंग्वेज ) फोरट्रान, गो (प्रोग्रामिंग लैंग्वेज ), हास्केल (प्रोग्रामिंग लैंग्वेज ), असेंबली लैंग्वेज के लिए आईबीएम/360 असेंबलर, नियंत्रण लैंग्वेज (सीएल), आईबीएम आरपीजी, जावा (प्रोग्रामिंग लैंग्वेज), जूलिया (प्रोग्रामिंग लैंग्वेज), मैटलैब, एमएल (प्रोग्रामिंग लैंग्वेज), मोडुला, मोडुला-2, मोडुला-3, मॉर्फो, न्यू पी, ओबेरॉन (प्रोग्रामिंग लैंग्वेज), ओबेरॉन-2 (प्रोग्रामिंग लैंग्वेज), ऑब्जेक्टिव सी, ओकैमल, पास्कल के कई व्युत्पन्न प्रोग्रामिंग लैंग्वेज, कॉम्पोनेन्ट पास्कल, ऑब्जेक्ट पास्कल, टर्बो पास्कल, यूसीएसडी पास्कल, पर्ल, पीएचपी, पीएल/आई, प्योरबेसिक, पायथन (प्रोग्रामिंग लैंग्वेज ), आर (प्रोग्रामिंग लैंग्वेज ), रूबी (प्रोग्रामिंग लैंग्वेज ) ), रस्ट (प्रोग्रामिंग लैंग्वेज ), जावास्क्रिप्ट, विजुअल बेसिक .नेट और वेबडीएनए इत्यादि के रूप में है।

मॉड्यूल के लिए समर्थन की कमी वाली भाषाओं के विशिष्ट उदाहरण हैं सी प्रोग्रामिंग लैंग्वेज और पास्कल अपने मूल रूप में, सी और सी ++ में उपयोग किया किया गया है, चूंकि हेडर फाइलों का उपयोग करते हुए अलग संकलन और घोषणात्मक इंटरफेस निर्दिष्ट करने की अनुमति देते हैं। मॉड्यूल को ऑब्जेक्ट सी में आईओएस 7 (2013) में जोड़ा गया; सी ++ को C++20 के साथ, और पास्कल को मोडुला और ओबेरॉन प्रोग्रामिंग लैंग्वेज द्वारा स्थानांतरित किया गया, जिसमें शुरुआत से ही मॉड्यूल और विभिन्न डेरिवेटिव के मॉड्यूल सम्मलित थे। जावास्क्रिप्ट के पास ईसीएमस्क्रिप्ट 2015 के बाद से मूल मॉड्यूल हैं।

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

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

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

इन स्वतंत्र कार्यों को सामान्यतः प्रोग्राम नियंत्रण कार्यों या विशिष्ट कार्य कार्यों के रूप में वर्गीकृत किया जाता है। प्रोग्राम नियंत्रण कार्यों को एक प्रोग्राम के लिए काम करने के लिए डिज़ाइन किया गया है। विभिन्न कार्यक्रमों के लिए लागू होने के लिए विशिष्ट कार्यों को बारीकी से तैयार किया जाता है।

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

यह भी देखें

 * आर्किटेक्चर विवरण लैंग्वेज
 * सामंजस्य (कंप्यूटर विज्ञान)
 * घटक आधारित सॉफ्टवेयर इंजीनियरिंग
 * कॉनवे का नियम
 * युग्मन (कंप्यूटर विज्ञान)
 * डेविड पारनास
 * सूचना छिपाना (एनकैप्सुलेशन)
 * पुस्तकालय (कम्प्यूटिंग)
 * प्रणाली गुणवत्ता विशेषताओं की सूची
 * मॉड्यूलर डिजाइन
 * प्लग-इन (कंप्यूटिंग)
 * स्निपेट (प्रोग्रामिंग)
 * स्ट्रक्चर विश्लेषण
 * स्ट्रक्चर प्रोग्रामिंग

बाहरी संबंध

 * How To Decompose a System into Modules
 * SMC Platform