ऑब्जेक्ट ओरिएंटेड डिज़ाइन के साथ कई ह्यूरिस्टिक्स जुड़े हुए हैं। उदाहरण के लिए, "सभी सदस्य चर निजी होने चाहिए", या "वैश्विक चर से बचा जाना चाहिए", या "रन टाइम प्रकार की पहचान (आरटीटीआई) का उपयोग करना खतरनाक है"। इन उत्तराधिकारियों का स्रोत क्या है? क्या उन्हें सच बनाता है? क्या वे हमेशा सच होते हैं? यह स्तंभ डिजाइन सिद्धांत की जांच करता है जो इन उत्तराधिकारियों को रेखांकित करता है - खुले-बंद सिद्धांत।
जैसा कि इवर जैकबसन ने कहा था: “उनके जीवन चक्र के दौरान सभी प्रणालियाँ बदल जाती हैं। यह तब ध्यान में रखना चाहिए जब विकासशील प्रणालियाँ पहले संस्करण की तुलना में अधिक समय तक चलने की उम्मीद करती हैं। ”हम ऐसे डिजाइन कैसे बना सकते हैं जो परिवर्तन के चेहरे पर स्थिर हों और जो पहले संस्करण की तुलना में अधिक समय तक चलेंगे? बर्ट्रेंड मेयर ने हमें बहुत पहले 1988 तक मार्गदर्शन दिया जब उन्होंने अब तक के प्रसिद्ध खुले-बंद सिद्धांत को गढ़ा। उसे विमुग्ध करने के लिए:
सॉफ़्टवेयर ENTITIES (CLASSES, MODULES, FUNCTIONS, ETC.) शोषण के लिए खुला होना चाहिए, विवरण के लिए बंद किया गया।
जब एक कार्यक्रम के लिए एक एकल परिवर्तन निर्भर मॉड्यूल के लिए परिवर्तनों के एक झरना में परिणाम होता है, तो यह कार्यक्रम अवांछनीय विशेषताओं को प्रदर्शित करता है जिसे हम "खराब" डिजाइन के साथ जोड़कर आए हैं। कार्यक्रम नाजुक, कठोर, अप्रत्याशित और अप्राप्य हो जाता है। खुले-बंद सिद्धांत इस पर बहुत ही सीधे तरीके से हमला करते हैं। यह कहता है कि आपको ऐसे मॉड्यूल डिजाइन करने चाहिए जो कभी नहीं बदलते । जब आवश्यकताएं बदलती हैं, तो आप नए कोड को जोड़कर ऐसे मॉड्यूल के व्यवहार का विस्तार करते हैं, न कि पुराने कोड को बदलकर जो पहले से ही काम करता है।
विवरण
खुले-बंद सिद्धांत के अनुरूप मॉड्यूल में दो प्राथमिक गुण होते हैं।
- वे "एक्सटेंशन के लिए ओपन" हैं।
इसका मतलब है कि मॉड्यूल के व्यवहार को बढ़ाया जा सकता है। कि हम मॉड्यूल को नए और अलग-अलग तरीकों से व्यवहार में परिवर्तन कर सकते हैं जैसे कि आवेदन में परिवर्तन, या नए अनुप्रयोगों की जरूरतों को पूरा करने के लिए।
- वे "संशोधन के लिए बंद हैं"।
इस तरह के एक मॉड्यूल का स्रोत कोड इनवॉयलेट है। किसी को भी स्रोत कोड परिवर्तन करने की अनुमति नहीं है।
ऐसा लगता है कि ये दोनों विशेषताएँ एक-दूसरे के साथ हैं। किसी मॉड्यूल के व्यवहार का विस्तार करने का सामान्य तरीका उस मॉड्यूल में परिवर्तन करना है। एक मॉड्यूल जिसे बदला नहीं जा सकता है उसे सामान्य रूप से एक निश्चित व्यवहार माना जाता है। इन दो विरोधी विशेषताओं को कैसे हल किया जा सकता है?
अमूर्त कुंजी है ...