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

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

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

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

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

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

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

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

शब्दावली
असेंबली (सीएलआई)CLI) शब्द (.NET Framework|.NET भाषाएँ जैसे C Sharp (प्रोग्रामिंग भाषा)|C#, F Sharp (प्रोग्रामिंग भाषा)|F# या Visual Basic .NET) या पैकेज (पैकेज प्रबंधन प्रणाली) (जैसा कि में है) डार्ट (प्रोग्रामिंग भाषा), जाओ (प्रोग्रामिंग भाषा) या जावा (प्रोग्रामिंग भाषा)) का उपयोग कभी-कभी मॉड्यूल के बजाय किया जाता है। अन्य कार्यान्वयनों में, ये विशिष्ट अवधारणाएँ हैं; पायथन (प्रोग्रामिंग लैंग्वेज) में एक पैकेज मॉड्यूल का एक संग्रह है, जबकि जावा 9 में जावा मॉड्यूल सिस्टम (एन्हांस्ड एक्सेस कंट्रोल के साथ पैकेज का एक संग्रह) की शुरूआत लागू की गई थी।

इसके अलावा, शब्द पैकेज के सॉफ्टवेयर में अन्य उपयोग हैं (उदाहरण के लिए NuGet|.NET NuGet package)। एक सॉफ्टवेयर घटक एक समान अवधारणा है, लेकिन आमतौर पर उच्च स्तर को संदर्भित करता है; एक घटक पूरे सॉफ्टवेयर सिस्टम का एक टुकड़ा है, जबकि एक मॉड्यूल एक व्यक्तिगत कार्यक्रम का एक टुकड़ा है। शब्द मॉड्यूल का पैमाना भाषाओं के बीच महत्वपूर्ण रूप से भिन्न होता है; पायथन में यह बहुत छोटे पैमाने पर है और प्रत्येक फाइल एक मॉड्यूल है, जबकि जावा 9 में इसे बड़े पैमाने पर बनाने की योजना है, जहां एक मॉड्यूल संकुल का एक संग्रह है, जो बदले में फाइलों का संग्रह है।

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

भाषा समर्थन
औपचारिक रूप से मॉड्यूल अवधारणा का समर्थन करने वाली भाषाओं में एडा (प्रोग्रामिंग भाषा), एएलजीओएल, ब्लिट्ज मैक्स, सी ++, सी शार्प (प्रोग्रामिंग भाषा)|सी#, क्लोजर, कोबोल, कॉमन_लिस्प, डी (प्रोग्रामिंग भाषा), डार्ट (प्रोग्रामिंग भाषा), ईसी (प्रोग्रामिंग) शामिल हैं। भाषा), एरलांग (प्रोग्रामिंग भाषा), अमृत (प्रोग्रामिंग भाषा), एल्म (प्रोग्रामिंग भाषा), एफ (प्रोग्रामिंग भाषा), एफ शार्प (प्रोग्रामिंग भाषा) | एफ #, फोरट्रान, गो (प्रोग्रामिंग भाषा), हास्केल (प्रोग्रामिंग भाषा), असेंबली लैंग्वेज के लिए आईबीएम/360 असेंबलर, नियंत्रण भाषा (सीएल), आईबीएम आरपीजी, जावा (प्रोग्रामिंग लैंग्वेज), जूलिया (प्रोग्रामिंग लैंग्वेज), MATLAB, ML (प्रोग्रामिंग लैंग्वेज), मोडुला, मोडुला-2, मोडुला-3, मॉर्फो, नया पीी, ओबेरॉन (प्रोग्रामिंग लैंग्वेज), ओबेरॉन-2 (प्रोग्रामिंग लैंग्वेज) | ओबेरॉन-2, उद्देश्य सी, OCaml, पास्कल के कई व्युत्पन्न (प्रोग्रामिंग भाषा) (घटक पास्कल, वस्तु पास्कल, टर्बो पास्कल, यूसीएसडी पास्कल), पर्ल, पीएचपी, पीएल/आई, प्योरबेसिक, पायथन (प्रोग्रामिंग भाषा), आर (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा) ), जंग (प्रोग्रामिंग भाषा), जावास्क्रिप्ट, विजुअल बेसिक .NET और WebDNA।

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

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

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

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

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

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

यह भी देखें

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

बाहरी संबंध

 * How To Decompose a System into Modules
 * SMC Platform