कंप्यूटर विज्ञान में क्यों महत्वपूर्ण हैं आक्रमणकारी


16

मैं 'शाब्दिक' को इसके शाब्दिक अर्थ में समझता हूँ। कोड टाइप करने पर मैं उन्हें पहचानता भी हूं। लेकिन मुझे नहीं लगता कि मैं कंप्यूटर विज्ञान के संदर्भ में इस शब्द के महत्व को समझता हूं।

जब भी मैं प्रसिद्ध प्रोग्रामर / कंप्यूटर वैज्ञानिकों से भाषा के डिजाइन के बारे में वार्तालापों / श्वेत पत्र पढ़ता हूं, तो शब्द 'अपरिवर्तनीय' शब्द एक शब्दजाल के रूप में पॉप अप करता रहता है; और वह हिस्सा मुझे समझ में नहीं आता है। इसमें क्या खास है?


मैं जोर का उपयोग करता हूं ... शुद्धता की गारंटी देने के लिए इतना नहीं कि कीड़े की संभावना को कम करने के लिए।
नौकरी

जवाबों:


7

एक एल्गोरिथ्म एक दोहराने योग्य प्रक्रिया है। यदि यह पुनरावृत्ति योग्य है, तो इसमें ऐसी विशेषताएँ होनी चाहिए जो पुनरावृत्ति के साथ परिवर्तित न हों। ये आपके आक्रमणकारी हैं। इनवेरिएंट के साथ और / या (संभवतः) अलग-अलग डेटा को संचालित किया जाता है जो आपके एल्गोरिथ्म में फीड किया जाएगा।

इस प्रकार प्रोग्रामिंग का पूरा बिंदु यह पहचानना है कि क्या भिन्न नहीं है - यह अनिवार्य रूप से आपका कार्यक्रम है।

ऑब्जेक्ट-ओरिएंटेड प्रोग्राम में, एक धारणा है कि प्रत्येक ऑब्जेक्ट को एक ही चीज़ को अच्छी तरह से करना चाहिए। यह अनिवार्य रूप से इसका मतलब है कि (वर्ग-आधारित ओओपी के लिए) एक वर्ग एक एल्गोरिथ्म के लिए इनवियर्स को परिभाषित करता है, साथ ही किसी भी प्रकार के डेटा के लिए स्थान-धारकों (चर) के साथ जो कि इसकी वस्तुओं की आवश्यकता हो सकती है। आदर्श रूप से OO में, आप अलग-अलग हो सकते हैं जो कि जितना संभव हो उतना अलग-अलग हो, ताकि प्रत्येक वस्तु ज्यादातर अपरिवर्तनीय हो।


27

अपरिवर्तनीय की धारणा दृढ़ता से 'साइड इफेक्ट्स' से जुड़ी हुई है। मेरा मानना ​​है कि यह सॉफ्टवेयर डिजाइन के लिए बर्ट्रेंड मेयर के 'डिजाइन बाय कॉन्ट्रैक्ट (डीबीसी)' दृष्टिकोण द्वारा प्रचारित किया गया था।

DbC सार डेटा प्रकार (कक्षाओं की रीढ़) को 3 महत्वपूर्ण धारणाओं, पूर्व शर्त, पोस्टकॉन्डिशन, इनवॉइस के साथ समृद्ध करता है । प्रक्रियाओं का संदर्भ देते समय यह आसानी से बताया गया है, इसलिए मैं इसके संदर्भ में समझाने की कोशिश करूंगा:

  1. एक पूर्व शर्त उस प्रक्रिया को कॉल करने के लिए एक प्रक्रिया के लिए शर्त इनपुट डेटा का प्रतिनिधित्व करती है। इस पूर्व शर्त का सम्मान किया जाना चाहिए और उस विशेष प्रक्रिया के ग्राहक द्वारा लागू किया जाना चाहिए। हालाँकि प्रक्रिया डिज़ाइनर उन ग्राहकों से बचाव कर सकता है जो प्रक्रिया में पहली पंक्तियों के रूप में उस स्थिति का आश्वासन देकर पूर्व शर्त का सम्मान नहीं करते हैं। उदाहरण के लिए एक विधि double divide(double dividend, double divisor)एक पूर्व शर्त हो सकती है divisor != 0

  2. एक पोस्टकंडिशन प्रक्रिया रिटर्न के बाद आउटपुट डेटा पर एक स्थिति का प्रतिनिधित्व करता है; यह पूरी तरह से प्रक्रिया डिज़ाइनर का काम है इस सम्मान का सम्मान करने के लिए कि पूर्व शर्त का सम्मान किया गया था; लौटने से पहले एक रक्षा प्रोग्रामिंग शैली में, पोस्टकंडिशन मुखर किया जा सकता है।

  3. एक अपरिवर्तनीयता को एक पूर्व शर्त और उत्तर-पूर्व दोनों के रूप में माना जा सकता है, लेकिन उपर्युक्त अवधारणाओं से पूर्वनिर्धारण और पोस्टकंडिशन के लिए अलग-अलग समझ के साथ। मूल रूप से एक अपरिवर्तनीय व्यक्ति का कहना है कि यदि प्रक्रिया को कॉल करने से पहले इनपुट की एक विशेष स्थिति है, तो प्रक्रिया को कॉल करने के बाद वह विशेष स्थिति मान्य है। उदाहरण के लिए एक प्रक्रिया के लिए एक वैध अपरिवर्तनीय boolean search(int term, int array[])व्यक्ति कह सकता है कि arrayकॉल से पहले की स्थिति वैसी ही है जैसी कि कॉल के बाद है।

प्रक्रियाओं पर हमलावरों को लागू करना (और न केवल प्रक्रियाएं) एक बड़ी बात है क्योंकि यह दुष्प्रभाव को कम करता है ; यह उपयोगी है क्योंकि साइड इफेक्ट प्रोग्रामिंग में एक बड़ी बुराई है। एक विशेष प्रक्रिया इनपुट तर्कों की स्थिति को बदल सकती है, या कुछ वैश्विक चर की स्थिति को बदल सकती है, या कुछ वैश्विक चर पर निर्भर कर सकती है; इससे ऐसी खराब स्थितियां पैदा हो सकती हैं जहां एक ही प्रक्रिया (एक ही इनपुट के साथ) पर दो समान कॉल अलग-अलग आउटपुट दे सकते हैं। यह कॉल के इतिहास को जानने के लिए प्रेरित करता है और विशेष रूप से एक बहुआयामी संदर्भ में डीबग करना बहुत कठिन है।


2

एक अपरिवर्तनीय एक तार्किक संपत्ति है जिसे कुछ ऑपरेशन (ओं) द्वारा संरक्षित किया जाता है।

  • छोरों के बारे में तर्क करने के लिए आपको आवश्यकता होती है। चूंकि आप पहले से नहीं जानते हैं कि कितने पुनरावृत्तियों होंगे (या आपको लूप की आवश्यकता नहीं होगी), प्रत्येक पुनरावृत्ति को अपरिवर्तनीय को संरक्षित करना होगा, ताकि अंत में आप लूप के बारे में कुछ उपयोगी संपत्ति साबित कर सकें।

  • अतिक्रमित डेटा के गुणों के बारे में तर्क करने के लिए आपको आवश्यकता होती है। अक्सर मॉड्यूल या ऑब्जेक्ट के अंदर के विभिन्न डेटा को सही संचालन के लिए कुछ गुणों को संतुष्ट करने की आवश्यकता होती है (उदाहरण के लिए, एक सेट का प्रतिनिधित्व करने वाली सूची को हमेशा सॉर्ट किया जाना चाहिए)। आप चाहते हैं कि डेटा पर संचालित प्रत्येक फ़ंक्शन या विधि इन गुणों को संरक्षित करती है, इसलिए वे भी अपरिवर्तनीय हैं।


0

क्या मैं जानता हूं कि अपरिवर्तनीयता का महत्व इस तथ्य से आता है कि यह साबित करने के लिए बिल्डिंग ब्लॉक है कि एक एल्गोरिथ्म एक निश्चित फ़ंक्शन की गणना करता है। उदाहरण के लिए आपने एक नया छँटाई एल्गोरिथ्म विकसित किया है, लेकिन आप यह कैसे सुनिश्चित कर सकते हैं कि यह वास्तव में हर इनपुट के साथ या हर सही आउटपुट के साथ। अगला कदम इनवेरिएंट्स का निर्माण करना है जो एल्गोरिथ्म के प्रवाह के अनुरूप है और यह साबित करता है कि यह इन्वर्टर का उपयोग करके सॉर्ट करता है।


0

प्रोग्रामिंग भाषा के प्रकार प्रणाली के संदर्भ में, एक अपरिवर्तनीय प्रकार एक गैर-परिवर्तनीय प्रकार है। उदाहरण के लिए जावा में, एक विधि को ओवरलोड करते समय, सभी पैरामीटर अपरिवर्तनीय होते हैं, जबकि वापसी प्रकार सहसंयोजक होता है (समान या उपप्रकार हो सकता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.