📘 CodingMarble Learn

मॉड्यूलर डिज़ाइन: भागों से प्रोग्राम बनाना

मॉड्यूलर डिज़ाइन का मतलब है बड़े प्रोग्राम को छोटे, अलग-अलग हिस्सों (मॉड्यूल) में बाँटना। हर मॉड्यूल एक ही काम करता है और उसे अलग से लिखा, जाँचा और ठीक किया जा सकता है। फ़ंक्शनल अपघटन (functional decomposition) किसी काम को तब तक छोटे उप-प्रोग्राम (फ़ंक्शन) में तोड़ता है जब तक हर टुकड़ा आसान न हो जाए। क्लास डेटा और उस पर काम करने वाले मेथड को साथ रखती है। एनकैप्सुलेशन मॉड्यूल का डेटा छिपाता है; बाकी हिस्से सिर्फ़ सार्वजनिक इंटरफ़ेस से बात करते हैं। अच्छे मॉड्यूल में उच्च संसंजन (high cohesion) और कम युग्मन (low coupling) होता है, इसलिए उन्हें दूसरे प्रोग्राम में दोबारा इस्तेमाल किया जा सकता है।

🎬 कदम-दर-कदम कहानी

  1. यह एक बड़ी समस्या है: पूरा लाइब्रेरी ऐप कोड के एक ही बड़े टुकड़े में। इसे पढ़ना, जाँचना या बदलना मुश्किल है।
  2. इसे तोड़िए। ऐप तीन मॉड्यूल बन जाता है: सदस्य, किताबें और उधारी। हर मॉड्यूल का एक ही काम।
  3. फिर तोड़िए। हर मॉड्यूल छोटे उप-प्रोग्राम में बँटता है, जैसे add() और search()। काम को ऐसे तोड़ना फ़ंक्शनल अपघटन है।
  4. अब "किताबें" का डेटा काँच के खोल में छिपा दीजिए। बाहर का कोड उसे सीधे नहीं छू सकता। उसे add() और search() से ही जाना होगा। यह एनकैप्सुलेशन है।
  5. एक दुकान ऐप को भी सामान की सूची चाहिए। वही "किताबें" मॉड्यूल बिना बदले उसमें लग जाता है। यह पुन: उपयोग (reusability) है।
  6. अब आपकी बारी। तोड़ें, जोड़ें, छिपाएँ और पुन: उपयोग दबाइए। हर बार टुकड़े गिनिए।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

एक बड़ा प्रोग्राम क्यों नहीं? वह भी तो चलता है।

चल सकता है, पर एक बदलाव कुछ भी तोड़ सकता है और पूरा कोई नहीं पढ़ पाता। छोटे मॉड्यूल पढ़ना, जाँचना और ठीक करना आसान है।

कहाँ से तोड़ूँ, कैसे पता चले?

काम के हिसाब से। हर चीज़ (संज्ञा) क्लास और हर क्रिया फ़ंक्शन बन सकती है। कोई हिस्सा दो असंबंधित काम करे तो उसे तोड़िए।

तोड़ना कब बंद करूँ?

जब हर उप-प्रोग्राम एक साफ़ काम करे और इतना छोटा हो कि आसानी से लिखा और जाँचा जा सके।

डेटा छिपा है तो दूसरे मॉड्यूल उसे कैसे इस्तेमाल करें?

add() और search() जैसे public मेथड से। वही मॉड्यूल के दरवाज़े हैं।

क्या मॉड्यूल और क्लास एक ही हैं?

क्लास एक तरह का मॉड्यूल है। मॉड्यूल फ़ाइल, पैकेज या फ़ंक्शनों का समूह भी हो सकता है।

वही मॉड्यूल दूसरे ऐप में कैसे चलता है?

क्योंकि वह पहले ऐप के बाकी हिस्सों पर निर्भर नहीं। उसे सिर्फ़ अपना इंटरफ़ेस चाहिए, इसलिए कहीं भी लग जाता है।

समस्या को मॉड्यूल और क्लास में तोड़ना

मॉड्यूल प्रोग्राम का एक अलग हिस्सा है जिसका एक ही काम है। समस्या तोड़ने के लिए:

  1. लिखिए कि पूरा प्रोग्राम क्या करेगा।
  2. समस्या की मुख्य चीज़ें (संज्ञा) लिखिए: सदस्य, किताबें, उधारी। हर एक क्लास बन सकती है, जिसमें उसका डेटा और मेथड हों।
  3. मुख्य काम (क्रिया) लिखिए: जोड़ना, खोजना, देना, लौटाना। हर एक मेथड या फ़ंक्शन बनता है।
  4. स्ट्रक्चर चार्ट (पेड़ जैसा चित्र) बनाइए: ऊपर प्रोग्राम, नीचे मॉड्यूल, उनके नीचे उप-प्रोग्राम।

दो जाँच: उच्च संसंजन (मॉड्यूल की हर चीज़ एक ही काम से जुड़ी) और कम युग्मन (मॉड्यूल एक-दूसरे पर कम से कम निर्भर)।

उप-प्रोग्राम डिज़ाइन में फ़ंक्शनल अपघटन

फ़ंक्शनल अपघटन ऊपर से नीचे (top-down) डिज़ाइन है: काम को छोटे उप-कामों में तोड़िए, फिर उन्हें भी, जब तक हर टुकड़ा एक छोटा उप-प्रोग्राम (फ़ंक्शन, प्रोसीजर या मेथड) न बन जाए।

issueBook(memberId, bookId)
  ├─ checkMember(memberId)
  ├─ checkAvailable(bookId)
  ├─ recordLoan(memberId, bookId, dueDate)
  └─ printSlip()

हर उप-प्रोग्राम के साफ़ पैरामीटर (इनपुट) और रिटर्न मान (आउटपुट) होते हैं। अच्छे नियम: एक फ़ंक्शन, एक काम; नाम क्रिया जैसा; आमतौर पर एक स्क्रीन से छोटा; ग्लोबल चर का छिपा उपयोग नहीं।

प्रोग्रामर स्टब (खाली जगह-भराऊ फ़ंक्शन) से ऊपर का हिस्सा पहले जाँच लेते हैं।

प्रोग्राम डिज़ाइन में डेटा एनकैप्सुलेशन

एनकैप्सुलेशन यानी डेटा और उस पर काम करने वाला कोड साथ रखना, और डेटा को बाहर से छिपाना। ज़्यादातर भाषाओं में फ़ील्ड private और मेथड public (यही इंटरफ़ेस) होते हैं।

class Account {
  private double balance;
  public void deposit(double x) { if (x > 0) balance += x; }
  public double getBalance() { return balance; }
}

बाहर का कोई कोड balance को −500 नहीं कर सकता, क्योंकि अंदर जाने का रास्ता सिर्फ़ deposit() है, जो मान जाँचता है। फ़ायदे: डेटा सही रहता है, अंदर का तरीका बाद में बदला जा सकता है, और हर मॉड्यूल समझना आसान है।

प्रोग्राम डिज़ाइन में पुन: उपयोग

पुन: उपयोग यानी मॉड्यूल एक बार लिखो, कई जगह इस्तेमाल करो। कोड दोबारा इस्तेमाल लायक बनाने के तरीके:

पुन: उपयोग से समय बचता है, बग घटते हैं (जाँचा हुआ कोड फिर से), और प्रोग्राम एक जैसे रहते हैं।

करके देखें

बिना कंप्यूटर: पन्ने के ऊपर "नाश्ता बनाना" लिखिए। इसे 3 मॉड्यूल में, फिर हर एक को 2–3 चरणों में तोड़िए। जो चरण "दोपहर का खाना" में भी काम आए, उस पर गोला लगाइए।

3D में: तोड़ें दो बार दबाइए और टुकड़े गिनिए (1 → 3 → 6)। फिर छिपाएँ और पुन: उपयोग दबाइए।

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. स्कूल रिपोर्ट-कार्ड प्रोग्राम को मॉड्यूल में तोड़िए।

मॉड्यूल: छात्र (नाम, ID), अंक (अंक भरना और जाँचना), गणना (कुल, औसत, ग्रेड), रिपोर्ट (छापना)। हर एक का एक काम, इसलिए हर एक अलग से जाँचा जा सकता है।

2. "छात्र का ग्रेड निकालना" को उप-प्रोग्राम में तोड़िए।

readMarks(id) → total(marks) → average(total, count) → gradeFor(average) → ग्रेड लौटाओ। हर फ़ंक्शन इनपुट लेकर एक परिणाम लौटाता है।

3. BankAccount क्लास में balance private क्यों हो?

ताकि कोई और कोड उसे गलत मान न दे सके। हर बदलाव deposit() और withdraw() से होता है, जो रकम जाँचते हैं।

4. एक फ़ंक्शन area = 3.14 × 5 × 5 निकालता है। इसे दोबारा इस्तेमाल लायक कैसे बनाएँ?

पैरामीटर जोड़िए: area(r) = 3.14159 × r × r। अब हर त्रिज्या के लिए काम करेगा और इसे गणित मॉड्यूल में रख सकते हैं।

5. मॉड्यूल A, B के चर सीधे पढ़ता है और B, A के। क्या गड़बड़ है?

युग्मन ज़्यादा है: एक बदला तो दूसरा टूटेगा। हल: चर private कीजिए और पैरामीटर व रिटर्न मान से डेटा भेजिए।

आम गलतियाँ

अभ्यास क्विज़

1. काम को छोटे उप-कामों में तोड़ना कहलाता है:
2. एनकैप्सुलेशन का मुख्य अर्थ है:
3. अच्छे मॉड्यूल में होता है:
4. फ़ंक्शन को ज़्यादा पुन: उपयोगी क्या बनाता है?
5. मॉड्यूल और उप-प्रोग्राम दिखाने वाला पेड़ जैसा चित्र:

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

प्रोग्रामिंग में मॉड्यूलर डिज़ाइन क्या है?

प्रोग्राम को छोटे, अलग मॉड्यूल से बनाना, जिनका एक-एक काम और साफ़ इंटरफ़ेस हो, ताकि उन्हें अलग से लिखा, जाँचा और दोबारा इस्तेमाल किया जा सके।

अपघटन और एनकैप्सुलेशन में क्या अंतर है?

अपघटन समस्या को हिस्सों में तोड़ता है। एनकैप्सुलेशन हर हिस्से का डेटा उसके मेथड के पीछे छिपाता है।

संसंजन (cohesion) और युग्मन (coupling) क्या हैं?

संसंजन: मॉड्यूल एक काम पर कितना केंद्रित है (ज़्यादा चाहिए)। युग्मन: मॉड्यूल एक-दूसरे पर कितने निर्भर हैं (कम चाहिए)।

यह कहाँ पढ़ाया जाता है

कनाडा (ओंटारियो)Grade 12C. Designing Modular Programs

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ