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