अनडू (पूर्ववत)

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

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

अनडू का विपरीत रिडू होता है। रीडो कमांड अनडू के विपरीत होता है ये बफर को अग्रिम स्थिति में आगे बढ़ाता है।

अनडू कार्यक्षमता के सामान्य घटक वे कमांड्स हैं जो उपयोगकर्ता द्वारा निष्पादित किए गए थे, इतिहास बफ़र जो पूर्ण किए गए कार्यों को संग्रहीत करता है, इतिहास बफ़र को नियंत्रित करने के लिए अनडू करें I प्रबंधक, और उपयोगकर्ता के साथ इंटरैक्ट करने के लिए उपयोगकर्ता इंटरफ़ेस होता है। अधिकांश माइक्रोसॉफ़्ट विंडोज़ अनुप्रयोगों में, अनडू कमांड कुंजी के लिए कुंजीपटल संक्षिप्त रीति Control-Z या Alt+Backspace होता है, और पुनः करने के लिए शॉर्टकट Control-Y याCC+Shift key+Z होता है।

अधिकांश एप्पल मैकिंटोश अनुप्रयोगों में, अनडू कमांड का शॉर्टकट कमांड-जेड है, और रीडो के लिए शॉर्टकट कमांड-शिफ्ट-जेड है।

सभी प्लेटफॉर्म पर, अनडू करके कार्यों को संपादन मेनू के माध्यम से भी एक्सेस किया जा सकता है।

इतिहास
लोगों द्वारा कंप्यूटर का उपयोग करने के पश्चात् उनके उत्तर के आधार पर कंप्यूटर में किसी ऑपरेशन को अनडू करने की क्षमता का स्वतंत्र रूप से आविष्कार किया गया था। ब्राउन विश्वविद्यालय में 1968 में प्रारम्भ हुई फ़ाइल पुनर्प्राप्ति और संपादन प्रणाली के विषय में कहा जाता है कि यह प्रथम कंप्यूटर-आधारित प्रणाली है, जिसमें अनडू फीचर है। वारेन टिटेलमैन ने 1971 तक अनडू कार्य के साथ बीबीएन-लिस्प के भाग के रूप में प्रोग्रामर सहायक विकसित किया है। ज़ेरॉक्स पीएआरसी ब्रावो (सॉफ्टवेयर) टेक्स्ट एडिटर के निकट 1974 में अनडू कमांड था। आईबीएम के लांस ए. मिलर और जॉन सी. थॉमस की 1976 की शोध रिपोर्ट, इंटरएक्टिव सिस्टम के उपयोग में व्यवहारिक विषय, नोट किया गया कि यह उपयोगकर्ताओं को अल्प से अल्प तत्काल अनडू कमांड 'वापस लेने' की अनुमति देने के लिए अधिक उपयोगी होगा। पीएआरसी (कंपनी) अनुसंधान केंद्र के प्रोग्रामरों ने कीबोर्ड शॉर्टकट Ctrl-Z को अनडू कमांड दिया, जो व्यक्तिगत कंप्यूटर युग में पाठ संपादकों और वर्ड प्रोसेसर की महत्वपूर्ण विशेषता बन गई है। 1980 में, ज़ेरॉक्स पीएआरसी के लैरी टेस्लर ने एप्पल कंप्यूटर में कार्य करना प्रारम्भ किया था। वहाँ, उन्होंने और बिल एटकिंसन ने एप्पल लिसा पर मानक स्थिरता के रूप में अनडू कमांड की उपस्थिति की वकालत की थी। एटकिन्सन लिसा के एप्लिकेशन सॉफ़्टवेयर के व्यक्तिगत डेवलपर्स को अनडू और पुनः करने के एकल स्तर को सम्मलित करने में सक्षम था, किन्तु कई स्तरों के लिए पैरवी करने में असफल हो रहा था। जब एप्पल ने लिसा के उत्तराधिकारी, मैकिनटोश को प्रस्तुत किया है, तो यह निर्धारित किया गया कि सभी मानक अनुप्रयोगों में "एडिट" मेनू में पूर्व कमांड के रूप में "अनडू करें" सम्मलित होना चाहिए, जो आज तक मैकओएस और विंडोज पर मानक बना हुआ है।

बहु-स्तरीय अनडू कमांड 1980 के दशक में प्रस्तुत किए गए थे, जिससे उपयोगकर्ता न केवल सबसे अग्रिम बल्कि कई कार्यों को वापस ले सकते थे। पर्सनल कंप्यूटर सॉफ़्टवेयर से पूर्व ईएमएसीएस और अन्य टाइमशेयर स्क्रीन संपादकों के निकट यह था। सिग्नस एड प्रथम अमीगा पाठ संपादक था जिसमें असीमित अनडू / पुनः सुविधा थी। अटारीराइटर( AtariWriter), 1982 में प्रस्तुत किया गया एक वर्ड-प्रोसेसिंग एप्लिकेशन है, जिसमे अनडू चित्रित किया गया है। न्यूवर्ड, 1984 में न्यूस्टार द्वारा जारी किया गया अन्य वर्ड-प्रोसेसिंग प्रोग्राम था, जिसमें अनरेज़ कमांड था। आईबीएम के विसीवर्ड के निकट  अनडिलीट कमांड भी था।

मॉडल अनडू करें और पुनः करें
अनडू मॉडल को रैखिक या गैर-रैखिक के रूप में वर्गीकृत किया जा सकता है। गैर-रैखिक अनडू मॉडल को स्क्रिप्ट मॉडल, यूएस के मॉडल, ट्रायडिक मॉडल और चयनात्मक अनडू में उप-वर्गीकृत किया जा सकता है।

मॉडल के कुछ सामान्य गुण हैं:


 * स्थिर निष्पादन संपत्ति: राज्य को कमांडों की कमांडित सूची के रूप में दर्शाया गया है। इसका तात्पर्य यह है कि मूल निष्पादन के पश्चात् जिस स्थिति में पहुंचा था, उस राज्य में कमांड सदैव अनडू किया जाता है। * कमजोर स्थिर निष्पादन: इसका तात्पर्य यह है कि यदि अनडू निष्पादित किया जाता है तो सभी कमांड जो अनडू कमांड पर निर्भर करते अनडू होते हैं।
 * स्थिर परिणाम संपत्ति: सूची को त्यागकर इस संपत्ति का अर्थ स्थिर निष्पादन संपत्ति के समान होता है। कमांडों की कमांडित सूची में सम्मलित है कि उन्हें केवल कमांडों के अतिरिक्त निष्पादित किया गया था।
 * क्रमविनिमेय: इसका तात्पर्य है कि दो भिन्न -भिन्न कमांडों को अनडू और पुनः करने के पश्चात् पहुंची हुई स्थिति समान होती है जब उन्हें विपरीत क्रम में निष्पादित किया जाता है।
 * न्यूनतर अनडू गुण: यह वर्णन करता है कि कमांड C का अनडू संचालन केवल कमांड C को अनडू करता है और C से छोटे सभी कमांड जो C पर निर्भर हैं।

रैखिक अनडू करें
रैखिक अनडू स्टैक (डेटा संरचना) के साथ कार्यान्वित किया जाता है जो सभी निष्पादित कमांडों का इतिहास संग्रहीत करता है। जब कोई नया कमांड निष्पादित किया जाता है तो इसे स्टैक के शीर्ष पर जोड़ दिया जाता है। इसलिए, केवल अंतिम निष्पादित कमांड को अनडू किया जा सकता है और इतिहास से हटाया जा सकता है। अनडू तब तक दोहराया जा सकता है जब तक कि इतिहास रिक्त न हो जाये।

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

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

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

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

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

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

प्रत्यक्ष चयनात्मक अनडू करें
प्रत्यक्ष चयनात्मक अनडू एक इतिहास वृक्ष के साथ प्रतिबंधित रेखीय अनडू का विस्तार है। ऑपरेशन चयनित कमांड की एक प्रति बनाता है, इसे निष्पादित करता है और इसे इतिहास सूची में जोड़ता है। वहाँ दो गैर-रैखिक संचालन चयनात्मक अनडू और चयनात्मक पुनः परिभाषित किए गए हैं, इसलिए यह अधिक सममित है।

बहुउपयोगकर्ता अनुप्रयोग
जब एकाधिक उपयोगकर्ता एक ही प्रपत्र को एक साथ संपादित कर सकते हैं, तो बहु-उपयोगकर्ता अनडू करने की आवश्यकता होती है। वैश्विक बहु-उपयोगकर्ता अनडू प्रपत्र में की गई नवीनतम क्रिया को अनडू करता है, भले ही संपादन किसने किया हो। स्थानीय बहु-उपयोगकर्ता अनडू केवल स्थानीय उपयोगकर्ता द्वारा किए गए कार्यों को अनडू करता है, जिसके लिए गैर-रैखिक अनडू कार्यान्वयन की आवश्यकता होती है।

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

अनडू की जा सकने वाली पिछली कार्रवाइयों की संख्या प्रोग्राम, संस्करण और हार्डवेयर या सॉफ़्टवेयर क्षमताओं के अनुसार भिन्न होती है। उदाहरण के लिए, Adobe Photoshop में डिफ़ॉल्ट अनडू करें/पुनः करें स्टैक आकार 20 है किन्तु उपयोगकर्ता द्वारा इसे बदला जा सकता है। दूसरे उदाहरण के रूप में, पूर्व Microsoft पेंट के संस्करणों को अनडू करने के लिए केवल तीन संपादनों तक की अनुमति है; विंडोज 7 में प्रस्तुत किए गए संस्करण ने इस सीमा को बढ़ाकर 50 कर दिया।

सरलीकृत, एकल-संपादन अनडू सुविधाएँ कभी-कभी अनडू कमांड को अनडू की जा सकने वाली क्रिया के रूप में मानकर पुनः करना बंद कर देती हैं। इसे फ्लिप अनडू मॉडल के रूप में जाना जाता है, क्योंकि उपयोगकर्ता अनडू कमांड का उपयोग करके दो प्रोग्राम राज्यों के मध्य फ़्लिप कर सकता है। 1990 के दशक की शुरुआत में बहु-स्तरीय अनडू के व्यापक रूप से अपनाने से पूर्व यह मानक मॉडल था।

कार्यान्वयन अनडू करें
अनडू विभिन्न पैटर्न के माध्यम से लागू किया जा सकता है। कमांड पैटर्न और स्मृति चिन्ह पैटर्न  सबसे आम पैटर्न हैं।

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

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

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

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

प्रत्येक कमांड क्लास में एक डू विधि होती है जिसे कमांड निष्पादित होने पर कहा जाता है। अनडू-मेथड डू-मेथड के रिवर्स ऑपरेशन को लागू करता है। रिवर्स को लागू करने के लिए कई भिन्न -भिन्न रणनीतियां हैं।


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

यह भी देखें

 * प्रतिवर्ती कंप्यूटिंग
 * रोलबैक (डेटा प्रबंधन)
 * हटाना
 * संस्करण नियंत्रण (देशी और विदेशी प्रारूप)

बाहरी संबंध

 * The Age of अनडूing - Article about the linguistic history of अनडू at The New York Times Magazine.
 * Cascading अनडू control - a paper focused on what is cascading अनडू and how it might be presented to users