पूर्वप्रतिबंध

From Vigyanwiki

अभिकलित्र क्रमादेशन में, एक पूर्व प्रतिबंध एक प्रतिबंध या विधेय है जो कूट के कुछ खंड के निष्पादन से पहले या औपचारिक विनिर्देश में किसी संचालन से पहले सदैव सही होना चाहिए।

यदि किसी पूर्व प्रतिबंध का उल्लंघन किया जाता है, तो कूट के खंड का प्रभाव अपरिभाषित हो जाता है और इस प्रकार यह अपने इच्छित कार्य को पूरा कर भी सकता है और नहीं भी। अशुद्ध पूर्व प्रतिबंधों के कारण सुरक्षा समस्याएं उत्पन्न हो सकती हैं।

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

उदाहरण के लिए: क्रमगुणित केवल शून्य से अधिक या उसके समान पूर्णांकों के लिए परिभाषित किया गया है। तो एक क्रमादेश जो एक निवेश संख्या के क्रमगुणित की गणना करता है, उसकी पूर्व प्रतिबंध कि संख्या एक पूर्णांक हो और यह शून्य से अधिक या उसके समान हो।

वस्तु-अभिमुखित क्रमादेशन में

वस्तु-अभिमुखित सॉफ़्टवेयर विकास में पूर्व प्रतिबंध अनुबंध द्वारा अभिकल्पना का एक अनिवार्य भाग है। अनुबंध द्वारा अभिकल्पना में पश्चातप्रतिबंध औरवर्ग अपरिवर्तनीय के विचार भी सम्मिलित हैं।

किसी भी सामान्य के लिए पूर्व प्रतिबंध वस्तु स्थिति पर किसी भी बाधा को परिभाषित करती है जो सफल निष्पादन के लिए आवश्यक है। क्रमादेश विकासक के दृष्टिकोण से, यह अनुबंध के नियमित कॉल करने वाले के हिस्से का गठन करता है। कॉल करने वाला तब यह सुनिश्चित करने के लिए बाध्य होता है कि सामान्य को कॉल करने से पहले पूर्व प्रतिबंध है। कॉल करने वाले के प्रयास के लिए पुरस्कार को सामान्य का पश्चातप्रतिबंध कहा जाता है।[1]

एफिल उदाहरण

एफिल में लिखे गए निम्नलिखित उदाहरण में सामान्य एक तर्क के रूप में एक पूर्णांक लेती है जो दिन के एक घंटे के लिए मान्य मान होना चाहिए, अर्थात्, 0 से 23, समावेशी है। पूर्व प्रतिबंध संकेतशब्द आवश्यकता का अनुसरण करती है। यह निर्दिष्ट करता है कि तर्क शून्य से अधिक या उसके समान होना चाहिए और 23 से कम या उसके समान होना चाहिए। टैग ''मान्य तर्क:" इस पूर्व प्रतिबंध खंड का वर्णन करता है और कार्यावधि पूर्व प्रतिबंध उल्लंघनों के प्रकरण में इसे पहचानने के लिए कार्य करता है।

    set_hour (a_hour: INTEGER)
            -- Set `hour' to `a_hour'
        require
            valid_argument: 0 <= a_hour and a_hour <= 23
        do
            hour := a_hour
        ensure
            hour_set: hour = a_hour
        end

पूर्व प्रतिबंध और उत्तराधिकारी

उत्तराधिकारी की उपस्थिति में, उत्तराधिकारी वर्गों (उपवर्गों) द्वारा वंशागत में मिली सामान्य अपनी पूर्व प्रतिबंधों के बल पर ऐसा करती है। इसका मतलब यह है कि वंशागत सामान्य के किसी भी कार्यान्वयन या पुनर्परिभाषा को भी उनके वंशागत अनुबंध का पालन करने के लिए लिखा जाना चाहिए। पूर्व प्रतिबंध को पुनर्निर्धारित सामान्य में संशोधित किया जा सकता है, लेकिन वे केवल कमजोर हो सकते हैं।[2] अर्थात्, पुनर्परिभाषित सामान्य ग्राहक के दायित्व को कम कर सकती है, लेकिन इसे बढ़ा नहीं सकती है।

यह भी देखें

संदर्भ

  1. Meyer, Bertrand, Object-Oriented Software Construction, second edition, Prentice Hall, 1997, p. 342.
  2. Meyer, 1997, pp. 570–573.