मेयर के ऑब्जेक्ट-ओरिएंटेड सॉफ्टवेयर कंस्ट्रक्शन (1988) में वह खुले / बंद सिद्धांत को निम्नानुसार परिभाषित करता है:
- अगर यह अभी भी विस्तार के लिए उपलब्ध है तो एक मॉड्यूल को खुला कहा जाएगा। उदाहरण के लिए, इसमें मौजूद डेटा संरचनाओं में फ़ील्ड जोड़ना संभव है, या इसके द्वारा किए जाने वाले कार्यों के सेट में नए तत्व।
- एक मॉड्यूल को बंद करने के लिए कहा जाएगा यदि यह अन्य मॉड्यूल द्वारा उपयोग के लिए उपलब्ध है। यह मानता है कि मॉड्यूल को एक अच्छी तरह से परिभाषित, स्थिर विवरण (सूचना छिपाने के अर्थ में इंटरफ़ेस) दिया गया है।
वह कहता है:
यदि आप एक मॉड्यूल को फिर से खोलते हैं, तो आपको उन्हें अपडेट करने के लिए अपने सभी क्लाइंट को फिर से खोलना होगा, क्योंकि वे पुराने संस्करण पर निर्भर हैं। … [यह समस्या] हर बार एक मॉड्यूल को एक नए फ़ंक्शन या डेटा तत्व द्वारा बढ़ाया जाना चाहिए, जो प्रत्यक्ष और अप्रत्यक्ष ग्राहकों में परिवर्तन को ट्रिगर करता है। ... डिजाइन और प्रोग्रामिंग के लिए शास्त्रीय दृष्टिकोण के साथ, मॉड्यूल लिखने का कोई तरीका नहीं है जो खुले और बंद दोनों हैं।
इस दुविधा का मेयर समाधान है: मौजूदा कक्षाओं को संशोधित करके कभी भी पुस्तकालय मॉड्यूल का विस्तार न करें; इसके बजाय, एक नया मॉड्यूल लिखें जो मौजूदा कक्षाओं को उपवर्गित करता है, और नए ग्राहक उस नए मॉड्यूल पर निर्भर होते हैं।
अब, 1988 में, मैं टर्बो पास्कल और ब्लेंकशिप बेसिक में खिलौना (प्रक्रियात्मक) कार्यक्रम लिख रहा था, और मेरा 21 वीं सदी का पेशेवर अनुभव जेवीएम, सीएलआर और गतिशील भाषाओं में है, इसलिए मुझे नहीं पता कि अय्यर का क्या मतलब है। "डिजाइन और प्रोग्रामिंग के लिए शास्त्रीय दृष्टिकोण" द्वारा।
मेयर्स का एक ठोस उदाहरण क्यों क्लाइंट मॉड्यूल को फिर से खोलना चाहिए (एक गणना पर एक स्विच स्टेटमेंट, जिसमें अब अधिक सदस्य हैं, और अधिक मामलों की आवश्यकता होती है) उचित रूप से उचित लगता है, लेकिन वह लगभग इस बात को सही नहीं ठहराता है कि हर बार जब आप किसी लाइब्रेरी में कार्यक्षमता जोड़ते हैं मॉड्यूल, आपको इसके सभी क्लाइंट को अपडेट करने की आवश्यकता है ।
क्या कोई ऐतिहासिक कारण है कि यह दावा 1988 में स्वतः स्पष्ट लग रहा था? क्या कहा, सी स्टेटिक लाइब्रेरी में फ़ंक्शंस या डेटा स्ट्रक्चर्स को जोड़ने से लेआउट बदल जाता है जैसे कि बैकवर्ड-कम्पेटिबल एपीआई के साथ भी, क्लाइंट्स को रीकंप्लीकेट करना पड़ता है? या Meyer वास्तव में सिर्फ एपीआई बैकवर्ड संगतता लागू करने के लिए एक तंत्र के आसपास बात कर रहा है?