موضوع مقاله: پادکرد | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # پادکرد | مقدمه: پادکرد (Undo) یک تکنیک تعاملی است که در بسیاری از برنامه‌های رایانه‌ای پیاده‌سازی شده است. | ## بخش 1: پادکرد | این تکنیک آخرین تغییر انجام شده در سند را پاک می‌کند و آن را به حالت قدیمی‌تر برمی‌گرداند. در برخی برنامه‌های پیشرفته‌تر، مانند پردازش گرافیکی ، پادکرد آخرین فرمان انجام شده در فایل در حال ویرایش را خنثی می‌کند. با امکان پادکرد، کاربران می‌توانند بدون ترس از اشتباه کردن، کاوش و کار کنند، زیرا به آسانی می‌توان آنها را پادکرد کرد. انتظارات از فرمان undo به آسانی قابل درک است: داشتن یک عملکرد قابل پیش‌بینی و شامل شدن تمام فرمان‌ها "قابل پادکرد". معمولاً فرمان undo تا زمانی که کاربر تمام عملیات اجرا شده را پادکرد نکند، در دسترس است. اما برخی از اقدامات وجود دارند که در فهرست پادکرد ذخیره نمی‌شوند و بنابراین نمی‌توان آنها را پادکرد کرد. به عنوان نمونه، ذخیره فایل قابل پادکرد نیست، اما در فهرست در صف قرار می‌گیرد تا نشان دهد که اجرا شده است. عمل دیگری که معمولاً ذخیره نمی‌شود و بنابراین قابل پادکرد نیست، پیمایش یا انتخاب است. (یا: برعکس عمل undo، عمل redo است.) اجزای رایج قابلیت پادکرد، فرمان‌های هستند که بدست کاربر اجرا شده‌اند، بافر(های) تاریخچه که اقدامات تکمیل‌شده را ذخیره می‌کنند، مدیر پادکرد/بازانجام برای کنترل بافر تاریخچه، و رابط کاربری برای تعامل با کاربر. تاریخچه توانایی پادکرد یک عملیات در رایانه، چندین بار به طور مستقل و در پاسخ به نحوه کاربری مردم از رایانه اختراع شد. سامانه بازیابی و ویرایش فایل، که از سال ۱۹۶۸ در دانشگاه براون توسعه یافت، گزارش شده است که نخستین سامانه مبتنی بر رایانه است که دارای ویژگی "پادکرد" بوده است. ماروین زلکوویتز در پایان‌نامه دکترای خود (اجرای برگشت‌پذیر به عنوان یک ابزار تشخیصی) در سال ۱۹۷۱ در دانشگاه کرنل، مفهوم اجرای برگشت‌پذیر را پیشنهاد کرد که اساساً یک پادکرد است. دیویس در پایان‌نامه دکترای خود (یک سامانه تحلیل تعاملی برای خطاهای زمان اجرا) در دانشگاه ایلینوی در اوربانا-شمپین در سال ۱۹۷۵، مفهوم زلکوویتز را گسترش داد تا نشان دهد که چگونه پادکرد چند سطحی (یعنی اجرای برگشت‌پذیر چند لایه‌ای) می‌تواند برای اشکال‌زدایی برنامه‌های نرم‌افزاری کاربری شود. توماس از آی‌بی‌ام با عنوان « مسائل رفتاری در کاربری از سامانه‌های تعاملی» ، اشاره کرد که «بسیار مفید خواهد بود که به کاربران اجازه داده شود حداقل فرمان بلافاصله قبل را (با صدور یک فرمان ویژه «undo») «پس بگیرند». در آنجا، او و بیل اتکینسون از وجود یک فرمان undo به عنوان یک قطعه استاندارد در اپل لیزا حمایت کردند. اتکینسون توانست توسعه‌دهندگان نرم‌افزار کاربردی لیزا را متقاعد کند که یک سطح واحد از undo و redo را در نظر بگیرند، اما در لابی کردن برای سطوح چندگانه ناموفق بود.[نیازمند منبع] وقتی اپل جانشین لیزا، مکینتاش ، را معرفی کرد، تصریح کرد که همه برنامه‌های استاندارد باید شامل «واگرد» به عنوان نخستین فرمان در منوی «ویرایش» باشند، که تا به امروز به عنوان استاندارد در مک‌او‌اس و ویندوز باقی مانده است. فرمان‌های پادکرد چند لایه‌ای در دهه ۱۹۸۰ معرفی شدند و به کاربران اجازه می‌دادند مجموعه‌ای از اقدامات را، نه فقط آخرین اقدام، به عقب برگردانند. EMACS و سایر ویرایشگرهای صفحه نمایش اشتراکی، قبل از نرم‌افزار رایانه شخصی، این قابلیت را داشتند. برخی از ویژگی‌های رایج مدل‌ها عبارتند از: ویژگی اجرای پایدار: یک حالت به صورت فهرستی مرتب از فرمان‌ها نمایش داده می‌شود. ویژگی نتیجه پایدار: این ویژگی معنای مشابهی با ویژگی اجرای پایدار دارد، با این تفاوت که فهرست فرمان‌ها را نشان می‌دهد. جابجایی‌پذیر: این بدان معناست که حالت حاصل پس از پادکرد و انجام مجدد دو فرمان مختلف، زمانی که آنها به ترتیب معکوس اجرا شوند، یکسان است. | ## بخش 2: پادکرد | ویژگی پادکرد حداقلی: این ویژگی بیان می‌کند که «عملیات پادکرد فرمان C فقط فرمان C و تمام فرمان‌ها کوچکتر از C که به C وابسته هستند را خنثی می‌کند.» پادکرد خطی پادکرد خطی با یک پشته ( ساختار داده آخرین ورودی، نخستین خروجی (LIFO پیاده‌سازی می‌شود که تاریخچه‌ای از همه‌ی فرمان‌ها اجرا شده را ذخیره می‌کند. این مدل ، ویژگی اجرای پایدار توصیف‌شده در بالا برای پادکرد خطی را برآورده می‌کند، زیرا این مدل در صورتی که فرمانی در حالی انجام شود که فهرست تاریخچه شامل فرمان‌ها دیگری باشد، این ویژگی را حفظ نمی‌کند. به عنوان نمونه، اندازه فهرست تاریخچه می‌تواند محدود شود یا وقتی به اندازه تعریف‌شده‌ای رسید، نخستین فرمان اجرا شده از فهرست حذف می‌شود.Berlage, Thomas (1994-09-01). پادکرد ناخطی تفاوت اصلی بین پادکرد خطی و پادکرد غیرخطی، امکان پادکرد فرمان‌ها اجرا شده به ترتیب دلخواه بدست کاربر است. مدل اسکریپت مدل اسکریپت، اقدامات کاربر را به عنوان ویرایش اسکریپتی از فرمان‌ها مدیریت می‌کند. در نتیجه پادکرد، وضعیت باید به گونه‌ای باشد که گویی فرمان پادکرد شده هرگز اجرا نشده است. یکی از معایب این مدل این است که کاربر باید ارتباط بین فرمان پادکرد شده و وضعیت فعلی را بداند تا از عوارض جانبی جلوگیری کند. مشکلات دیگر این است که اگر «فرمان‌ها بعدی در حالت متفاوتی نسبت به حالت اولیه خود در رابط‌های دستکاری مستقیم اجرا شوند، این تفسیر مجدد از عمل اصلی کاربر همیشه واضح یا به خوبی تعریف شده نیست.» مدل US&R ویژگی خاص این مدل این است که گزینه‌ی رد کردن یک فرمان را دارد. هنگامی که فرمان‌ها جدید اجرا می‌شوند، فهرست تاریخچه حفظ می‌شود، بنابراین ترتیب فرمان‌ها اجرا شده را می‌توان با آن تکرار کرد. این ترتیب را می‌توان از طریق یک درخت تاریخچه که یک نمودار جهت‌دار است توصیف کرد، "زیرا می‌توان فرمان‌ها را از شاخه‌ی دیگری که پیوندی در نمودار ایجاد می‌کند، به انجام مجدد ادامه داد".Berlage, Thomas (1994-09-01). اگرچه مجموعه‌ی فرمان‌ها ساده و قابل فهم است، اما ساختار پیچیده با پرش و پیوند شاخه‌ها، زمانی که کاربر می‌خواهد بیش از یک مرحله را پادکرد کند، درک و به خاطر سپردن آن دشوار است. این مدل دارای ساختار داده‌ای مشابه مدل‌های فوق با یک فهرست تاریخچه و یک فهرست redo جداگانه است که شامل عملیات redo می‌شود. از یک طرف، این بدان معناست که می‌توان فرمان بعدی که قرار است redo شود را با قرار دادن آن در جلو انتخاب کرد. نویسندگان توابعی را انتخاب کرده‌اند که یک مدل هنگام پشتیبانی از پادکرد گزینشی باید داشته باشد. سومین تابع برای پادکرد گزینشی این است که "هیچ فرمانی نمی‌تواند به طور خودکار از بافر تاریخچه بدون درخواست مستقیم کاربر حذف شود." برای پادکرد گزینشی، پادکرد و انجام مجدد خارج از هر زمینه‌ای قابل اجرا هستند. مسئله دوم این است که فرمان‌ها اصلاح شده را می‌توان خنثی کرد و بنابراین باید حل شود که کدام حالت پس از پادکرد ارائه خواهد شد. فرمان undo گزینشی هیچ اشاره‌گری در فهرست‌ها ندارد، بنابراین این بدان معناست که هیچ فرمانی نباید از پشته حذف شود. خنثیسازی گزینشی مستقیم پادکرد گزینشی مستقیم، بسطی از پادکرد خطی محدود با یک درخت تاریخچه است. این عملیات یک کپی از فرمان انتخاب شده ایجاد می‌کند، آن را اجرا می‌کند و به فهرست تاریخچه اضافه می‌کند. برنامه چند کاربره وقتی چندین کاربر می‌توانند همزمان یک سند را ویرایش کنند، به یک پادکرد چندکاربره نیاز است. پادکرد سراسری چندکاربره، آخرین اقدام انجام شده روی سند را صرف نظر از اینکه چه کسی ویرایش را انجام داده است، برمی‌گرداند. | ## بخش 3: پادکرد | پادکرد محلی چندکاربره فقط اقدامات انجام شده بدست کاربر محلی را برمی‌گرداند، که نیاز به پیاده‌سازی پادکرد غیرخطی دارد. در جایی که می‌توان از undo برای بازگشت به عقب در چندین ویرایش کاربری کرد، فرمان redo در طول تاریخچه اقدامات به جلو می‌رود. اگر از یک مدل redo شاخه‌ای کاربری شود، ویرایش جدید تاریخچه اقدامات را شاخه‌ای می‌کند . تعداد اقدامات قبلی که می‌توانند پادکرد شوند، بسته به برنامه، نسخه و قابلیت‌های سخت‌افزاری یا نرم‌افزاری متفاوت است. به عنوان نمونهی دیگر، قبلاً نسخه‌های قبلی مایکروسافت پینت فقط اجازه می‌دادند تا سه ویرایش پادکرد شوند؛ نسخه معرفی‌شده در ویندوز ۷ این محدودیت را به ۵۰ افزایش داد. ویژگی‌های ساده و تک ویرایشیِ پادکرد (undo) گاهی اوقات با در نظر گرفتن خود فرمان پادکرد به عنوان عملی که می‌توان آن را پادکرد کرد، «redo» را از بین می‌برند. پیاده‌سازی را پادکرد کنید عمل Undo را می‌توان از طریق الگوهای مختلفی پیاده‌سازی کرد. پادکرد (undo) و انجام مجدد (redo) به گونه‌ای پیاده‌سازی شده‌اند که هنگام فراخوانی فرمان اجرا یا پادکرد، فهرست به جلو و عقب اجرا شود. برخلاف پادکرد چند مرحله‌ای که نه تنها فهرست تاریخچه فرمان‌ها ذخیره می‌شود، بلکه تعداد سطوح پادکرد نیز با توجه به حدبیشتر طول فهرست قابل تعیین است. شیء‌ای که وضعیت در آن ذخیره می‌شود، یادگاری نامیده می‌شود و از طریق مبدأ یادگاری سازماندهی می‌شود. این الگو یک یادگاری را برمی‌گرداند که با اطلاعات وضعیت فعلی، هنگام اجرای undo، مقداردهی اولیه شده است تا وضعیت قابل بررسی باشد. این مکانیزم مسئول نگهداری یادگاری‌ها است، اما هرگز محتوای آنها را تغییر نمی‌دهد. برای پادکرد، متصدی درخواست یک یادگاری از مبدأ می‌کند و سپس پادکرد را اعمال می‌کند. بخش عمده‌ای از مکانیزم پادکرد عملیات (undo) می‌تواند بدون وابستگی به برنامه‌های خاص یا کلاس‌های فرمان پیاده‌سازی شود. این شامل «مدیریت فهرست تاریخچه، پیمایشگر تاریخچه، ورودی‌های منو برای پادکرد و انجام مجدد و به‌روزرسانی ورودی‌های منو بسته به نام فرمان بعدی در دسترس» می‌شود. چک پوینت کامل : این بدان معناست که وضعیت کامل پس از اجرای یک فرمان ذخیره می‌شود. این ساده‌ترین پیاده‌سازی است، اما کارایی بالایی ندارد و بنابراین اغلب کاربری نمی‌شود. اجرای مجدد کامل: بنابراین، حالت اولیه ذخیره می‌شود و می‌توان از طریق «شروع با حالت اولیه و اجرای مجدد تمام فرمان‌ها از ابتدای تاریخچه» به هر حالت در فهرست تاریخچه دسترسی پیدا کرد. حالت تغییر یافته برنامه ذخیره می‌شود و با undo، بخشی از حالت به مقدار اولیه خود برمی‌گردد. | ## جمع‌بندی | "برای نمونه، حرکت را می‌توان با حرکت دادن جسم به عقب به میزان نسبی معکوس کرد." برای پادکرد گزینشی، اطلاعات کافی برای ذخیره وضعیت وجود ندارد.