อ่าน 6 นาที
เลิกทำ
การยกเลิก (Undo) เป็น เทคนิคการโต้ตอบ ที่นำมาใช้ใน โปรแกรมคอมพิวเตอร์ หลายโปรแกรม โดยจะลบการเปลี่ยนแปลงล่าสุดที่ทำกับ เอกสาร ทำให้เอกสาร กลับคืนสู่สถานะเดิม ในบางโปรแกรมขั้นสูง...
เลิกทำ

การยกเลิก (Undo)เป็นเทคนิคการโต้ตอบที่นำมาใช้ในโปรแกรมคอมพิวเตอร์ หลายโปรแกรม โดยจะลบการเปลี่ยนแปลงล่าสุดที่ทำกับเอกสาร ทำให้เอกสาร กลับคืนสู่สถานะเดิม ในบางโปรแกรมขั้นสูง เช่น โปรแกรมประมวลผลกราฟิกการยกเลิกจะยกเลิกคำสั่งล่าสุดที่ทำกับไฟล์ที่กำลังแก้ไข ด้วยความเป็นไปได้ของการยกเลิก[ 1 ]ผู้ใช้สามารถสำรวจและทำงานได้โดยไม่ต้องกลัวว่าจะทำผิดพลาด เพราะสามารถยกเลิกได้ง่าย
ความคาดหวังสำหรับการยกเลิกนั้นเข้าใจได้ง่าย คือ มีฟังก์ชันการทำงานที่คาดเดาได้ และรวมคำสั่ง "ที่สามารถยกเลิกได้" ทั้งหมด[ 2 ]โดยปกติการยกเลิกจะใช้งานได้จนกว่าผู้ใช้จะยกเลิกการดำเนินการทั้งหมดที่ดำเนินการไปแล้ว แต่มีบางการกระทำที่ไม่ได้บันทึกไว้ในรายการยกเลิก ดังนั้นจึงไม่สามารถยกเลิกได้ ตัวอย่างเช่นการบันทึกไฟล์ไม่สามารถยกเลิกได้ แต่จะถูกจัดคิวในรายการเพื่อแสดงว่าได้ดำเนินการไปแล้ว การกระทำอีกอย่างหนึ่งที่โดยปกติไม่ได้บันทึกไว้ ดังนั้นจึงไม่สามารถยกเลิกได้ คือการเลื่อนหรือการเลือก[ 3 ]
คำ สั่งตรงข้ามกับคำสั่งยกเลิก (undo) คือคำสั่งทำซ้ำ (redo) คำสั่งทำซ้ำจะย้อนกลับการกระทำของคำสั่งยกเลิก หรือเลื่อนบัฟเฟอร์ไปยังสถานะล่าสุด
ส่วนประกอบทั่วไปของฟังก์ชันยกเลิกการกระทำ ได้แก่คำสั่งที่ผู้ใช้ดำเนินการบัฟเฟอร์ประวัติที่จัดเก็บการกระทำที่เสร็จสมบูรณ์ตัวจัดการการยกเลิก/ทำซ้ำสำหรับการควบคุมบัฟเฟอร์ประวัติ และอินเทอร์เฟซผู้ใช้สำหรับการโต้ตอบกับผู้ใช้[ 4 ]
ในโปรแกรมกราฟิกส่วนใหญ่สำหรับ ระบบปฏิบัติการหลักๆ(เช่นMicrosoft Windows , LinuxและBSD ) ปุ่มลัดสำหรับการยกเลิกคือCtrl+ Zและปุ่มลัดสำหรับการทำซ้ำคือ+ หรือ+ + ใน โปรแกรม macOS ส่วนใหญ่ ปุ่มลัดสำหรับคำสั่งยกเลิกคือ+ และปุ่มลัดสำหรับการทำซ้ำคือ+ + บนทุกแพลตฟอร์ม ฟังก์ชันยกเลิก/ทำซ้ำยังสามารถเข้าถึงได้ผ่านเมนูแก้ไข (Edit ) CtrlYCtrl⇧ ShiftZ⌘ CommandZ⌘ Command⇧ ShiftZ
ประวัติศาสตร์
ความสามารถในการยกเลิกการดำเนินการบนคอมพิวเตอร์ได้รับการคิดค้นขึ้นโดยอิสระหลายครั้ง เพื่อตอบสนองต่อวิธีการที่ผู้คนใช้คอมพิวเตอร์[ 5 ]
ระบบการเรียกค้นและแก้ไขไฟล์ซึ่งเริ่มพัฒนาตั้งแต่ปี พ.ศ. 2511 ที่มหาวิทยาลัยบราวน์ได้รับการรายงานว่าเป็นระบบคอมพิวเตอร์ระบบแรกที่มีคุณสมบัติ "ยกเลิก" [ 6 ] [ 7 ]
Warren Teitelmanได้พัฒนาProgrammer's Assistantซึ่งเป็นส่วนหนึ่งของ BBN-LISP พร้อมฟังก์ชัน Undo ภายในปี 1971 [ 8 ]
มาร์วิน เซลโควิทซ์ เสนอ แนวคิดเรื่องการดำเนินการย้อนกลับได้ในวิทยานิพนธ์ปริญญาเอกของเขา (Reversible Execution as a Diagnostic Tool) ในปี 1971 ที่มหาวิทยาลัยคอร์เนลล์ ซึ่งโดยพื้นฐานแล้วก็คือการยกเลิกการกระทำ ต่อมา ในปี 1975 อลัน เอ็ม. เดวิส ได้ขยายแนวคิดของเซลโควิทซ์ในวิทยานิพนธ์ปริญญาเอกของเขา (An Interactive Analysis System for Execution-Time Errors) ที่ มหาวิทยาลัยอิลลินอยส์ เออร์บานา-แชมเปญเพื่อแสดงให้เห็นว่าการยกเลิกการกระทำหลายระดับ (เช่น การดำเนินการย้อนกลับได้หลายระดับ) สามารถนำมาใช้ในการแก้ไขข้อบกพร่องของโปรแกรมซอฟต์แวร์ ได้อย่างไร
โปรแกรมแก้ไขข้อความXerox PARC Bravo มีคำสั่ง Undo ในปี 1974 [ 9 ] รายงานการวิจัยในปี 1976 โดย Lance A. Miller และ John C. Thomas จากIBMเรื่องBehavioral Issues in the Use of Interactive Systems [ 10 ]ตั้งข้อสังเกตว่า "จะเป็นประโยชน์อย่างมากหากอนุญาตให้ผู้ใช้ 'ย้อนกลับ' อย่างน้อยคำสั่งก่อนหน้าทันที (โดยการออกคำสั่ง 'undo' พิเศษบางอย่าง)" [ 11 ] โปรแกรมเมอร์ที่ ศูนย์วิจัย Xerox PARCได้กำหนดปุ่มลัด Ctrl-Z ให้กับคำสั่ง undo ซึ่งกลายเป็นคุณสมบัติที่สำคัญของโปรแกรมแก้ไขข้อความและโปรแกรมประมวลผลคำในยุคคอมพิวเตอร์ส่วนบุคคล[ 12 ] ในปี 1980 Larry Teslerจาก Xerox PARC เริ่มทำงานที่Apple Computerที่นั่น เขาและBill Atkinsonสนับสนุนให้มีคำสั่ง undo เป็นคุณสมบัติมาตรฐานบนApple Lisaแอตคินสันสามารถโน้มน้าวให้นักพัฒนาซอฟต์แวร์แอปพลิ เคชันของลิซ่าแต่ละคน รวมการยกเลิกและการทำซ้ำเพียงระดับเดียว แต่ไม่ประสบความสำเร็จในการล็อบบี้ให้มีหลายระดับ เมื่อแอปเปิลเปิดตัวMacintosh ซึ่งเป็นรุ่นต่อจากลิซ่า ก็ได้กำหนดว่าแอปพลิเคชันมาตรฐานทั้งหมดควรมี "ยกเลิก" เป็นคำสั่งแรกในเมนู "แก้ไข" [ 13 ]ซึ่งยังคงเป็นมาตรฐานบนmacOSและWindowsจนถึงปัจจุบัน
คำสั่งยกเลิกหลายระดับถูกนำมาใช้ในช่วงทศวรรษ 1980 ทำให้ผู้ใช้สามารถย้อนกลับการกระทำหลายรายการ ไม่ใช่แค่การกระทำล่าสุดเท่านั้น[ 12 ] EMACSและโปรแกรมแก้ไขหน้าจอแบบแบ่งเวลาอื่นๆ มีฟังก์ชันนี้มาก่อนซอฟต์แวร์คอมพิวเตอร์ส่วน บุคคล CygnusEd เป็นโปรแกรมแก้ไขข้อความ Amigaตัวแรกที่มีคุณสมบัติยกเลิก/ทำซ้ำได้ไม่จำกัดAtariWriterซึ่งเป็นแอปพลิเคชันประมวลผลคำที่เปิดตัวในปี 1982 ก็มีฟังก์ชันยกเลิกเช่นกัน NewWord ซึ่งเป็นโปรแกรมประมวลผลคำอีกโปรแกรมหนึ่งที่ NewStar เปิดตัวในปี 1984 ก็มีคำสั่งยกเลิกการลบ[ 12 ] VisiWord ของ IBM ก็มีคำสั่งยกเลิกการลบเช่นกัน
ยกเลิกและทำซ้ำโมเดล
โมเดลการย้อนกลับสามารถจำแนกได้เป็นแบบเชิงเส้นหรือแบบไม่เชิงเส้น โมเดลการย้อนกลับแบบไม่เชิงเส้นสามารถแบ่งย่อยได้เป็นโมเดลสคริปต์ โมเดล US&R โมเดลไตรภาค และการย้อนกลับแบบเลือก[ 2 ]
คุณสมบัติทั่วไปบางประการของแบบจำลองมีดังนี้:
- คุณสมบัติการดำเนินการที่เสถียร:สถานะจะถูกแสดงเป็นรายการคำสั่งที่เรียงลำดับ ซึ่งหมายความว่าคำสั่ง "จะถูกยกเลิกในสถานะที่เข้าถึงได้หลังจากการดำเนินการครั้งแรกเสมอ" [ 4 ]
- การดำเนินการที่เสถียรแบบอ่อนลง:หมายความว่า หากมีการดำเนินการยกเลิก (undo) คำสั่งทั้งหมดที่ขึ้นอยู่กับคำสั่งที่ถูกยกเลิกจะถูกยกเลิกตามไปด้วย
- คุณสมบัติผลลัพธ์ที่เสถียร:คุณสมบัตินี้มีความหมายคล้ายกับคุณสมบัติการดำเนินการที่เสถียรยกเว้นในส่วนของรายการ รายการคำสั่งที่เรียงลำดับแล้วจะระบุว่าคำสั่งเหล่านั้นได้รับการดำเนินการแล้ว แทนที่จะเป็นเพียงแค่ตัวคำสั่งเอง
- คุณสมบัติการสลับที่ได้:หมายความว่า สถานะที่ได้หลังจากยกเลิกและทำซ้ำคำสั่งสองคำสั่งที่แตกต่างกัน จะเหมือนกันเมื่อดำเนินการในลำดับที่ตรงกันข้าม
- คุณสมบัติการยกเลิกแบบเรียบง่าย:อธิบายว่า "การยกเลิกการดำเนินการของคำสั่ง C จะยกเลิกเฉพาะคำสั่ง C และคำสั่งทั้งหมดที่อายุน้อยกว่า C ซึ่งขึ้นอยู่กับ C เท่านั้น" [ 4 ]
ยกเลิกเชิงเส้น
การยกเลิกแบบเชิงเส้นจะถูกนำไปใช้กับสแต็ก ( โครงสร้างข้อมูลแบบเข้าหลังออกก่อน (LIFO) ) ซึ่งจัดเก็บประวัติของคำสั่งที่ดำเนินการทั้งหมด เมื่อมีการดำเนินการคำสั่งใหม่ คำสั่งนั้นจะถูกเพิ่มเข้าไปที่ด้านบนของสแต็ก ดังนั้น เฉพาะคำสั่งที่ดำเนินการล่าสุดเท่านั้นที่สามารถยกเลิกและลบออกจากประวัติได้ การยกเลิกสามารถทำซ้ำได้ตราบใดที่ประวัติยังไม่ว่างเปล่า[ 2 ]
แบบจำลองเชิงเส้นแบบจำกัด
แบบจำลองเชิงเส้นแบบจำกัดเป็นการเสริมแบบจำลองการยกเลิกเชิงเส้น โดยเป็นไปตามคุณสมบัติการดำเนินการที่เสถียร ที่อธิบายไว้ข้างต้น สำหรับการยกเลิกเชิงเส้น เนื่องจากแบบจำลองนี้จะไม่รักษาคุณสมบัติดังกล่าวไว้หากมีการดำเนินการคำสั่งในขณะที่รายการประวัติมีคำสั่งอื่นอยู่ แบบจำลองเชิงเส้นแบบจำกัดจะล้างรายการประวัติก่อนที่จะเพิ่มคำสั่งใหม่ แต่ยังมีข้อจำกัดอื่นๆ อีกด้วย ตัวอย่างเช่น สามารถจำกัดขนาดของรายการประวัติได้ หรือเมื่อถึงขนาดที่กำหนดไว้ คำสั่งแรกที่ดำเนินการจะถูกลบออกจากรายการ[ 2 ]
การยกเลิกแบบไม่เชิงเส้น
ความแตกต่างหลักระหว่างการยกเลิกแบบเชิงเส้นและการยกเลิกแบบไม่เชิงเส้นคือความเป็นไปได้ที่ผู้ใช้จะยกเลิกคำสั่งที่ดำเนินการในลำดับใดก็ได้ พวกเขามีโอกาสที่จะยกเลิกไม่ใช่คำสั่งล่าสุด แต่สามารถเลือกคำสั่งจากรายการได้[ 4 ]สำหรับโมเดลแบบไม่เชิงเส้นจะมีคลาสย่อยที่ใช้โมเดลนี้
แบบจำลองสคริปต์
แบบจำลองสคริปต์จัดการการกระทำของผู้ใช้เป็นการแก้ไขสคริปต์ของคำสั่ง รายการประวัติของคำสั่งที่ดำเนินการจะถูกตีความ "เป็นสคริปต์ ผลของการยกเลิกจะถูกกำหนดให้เหมือนกับว่าการกระทำที่ถูกยกเลิกไม่เคยเกิดขึ้นตั้งแต่แรก" [ 2 ]ผลลัพธ์ของการยกเลิกคือสถานะจะต้องเป็นเช่นเดียวกับที่คำสั่งที่ถูกยกเลิกไม่เคยถูกดำเนินการ ข้อเสียของแบบจำลองนี้คือผู้ใช้ต้องทราบความเชื่อมโยงระหว่างคำสั่งที่ถูกยกเลิกกับสถานะปัจจุบันเพื่อหลีกเลี่ยงผลข้างเคียง ตัวอย่างเช่น การทำซ้ำ ปัญหาอื่นๆ คือ หาก "คำสั่งที่ตามมาถูกทำซ้ำในสถานะที่แตกต่างจากที่ถูกดำเนินการในตอนแรกในอินเทอร์เฟซการจัดการโดยตรง การตีความใหม่ของการกระทำของผู้ใช้ดั้งเดิมนี้จะไม่ชัดเจนหรือกำหนดไว้อย่างดีเสมอไป" [ 2 ]
แบบจำลอง US&R
คุณสมบัติพิเศษของโมเดลนี้คือมีตัวเลือกในการข้ามคำสั่ง ซึ่งหมายความว่าสามารถข้ามการทำซ้ำคำสั่งได้ คำสั่งที่ถูกข้ามจะถูกทำเครื่องหมายว่าข้ามแต่จะไม่ถูกลบ เมื่อมีการเรียกใช้คำสั่งใหม่ รายการประวัติจะยังคงอยู่ ดังนั้นลำดับของคำสั่งที่เรียกใช้จึงสามารถทำซ้ำได้ ลำดับสามารถอธิบายได้ผ่านแผนผังประวัติซึ่งเป็นกราฟแบบมีทิศทาง "เนื่องจากสามารถดำเนินการทำซ้ำคำสั่งจากสาขาอื่นโดยการสร้างลิงก์ในกราฟได้" [ 2 ]แม้ว่าชุดคำสั่งจะเรียบง่ายและเข้าใจง่าย แต่โครงสร้างที่ซับซ้อนที่มีการข้ามและการเชื่อมโยงสาขานั้นยากที่จะเข้าใจและจดจำเมื่อผู้ใช้ต้องการยกเลิกมากกว่าหนึ่งขั้นตอน[ 2 ]
แบบจำลองไตรภาค
โมเดลการยกเลิกแบบไม่เชิงเส้นนี้ นอกจากการยกเลิกและการทำซ้ำแล้ว ยังมีความเป็นไปได้ในการหมุนอีกด้วย มีโครงสร้างข้อมูลเหมือนกับโมเดลที่กล่าวถึงข้างต้น โดยมีรายการประวัติและรายการทำซ้ำที่แยกต่างหาก ซึ่งรวมถึงการดำเนินการทำซ้ำ การดำเนินการหมุนจะตั้งคำสั่งสุดท้ายของรายการทำซ้ำไว้ข้างหน้า ในแง่หนึ่ง หมายความว่าสามารถเลือกคำสั่งถัดไปที่จะทำซ้ำได้โดยการวางไว้ข้างหน้า ในอีกแง่หนึ่ง การหมุนสามารถใช้ "เพื่อเลือกตำแหน่งในรายการทำซ้ำที่การดำเนินการยกเลิกครั้งต่อไปจะวางคำสั่ง" [ 2 ]ดังนั้น รายการทำซ้ำจึงไม่มีลำดับ "ในการยกเลิกคำสั่งที่แยกออกมา ผู้ใช้ต้องยกเลิกหลายขั้นตอน หมุนรายการทำซ้ำ แล้วทำซ้ำหลายขั้นตอน" [ 2 ]สำหรับการทำซ้ำ รายการจะต้องหมุนจนกว่าคำสั่งที่ต้องการจะอยู่ด้านบน
ยกเลิกการกระทำแบบเลือกได้
Jakubec และคณะกล่าวว่า การยกเลิกแบบเลือกได้เป็นคุณสมบัติที่โมเดลสามารถนำเสนอได้ แต่สำหรับการยกเลิกแบบเลือกได้นั้นไม่มีคำจำกัดความที่ชัดเจน[ 4 ]ผู้เขียนได้เลือกฟังก์ชันที่โมเดลควรมีเมื่อรองรับการยกเลิกแบบเลือกได้ โดยควรจะสามารถ "ยกเลิกการกระทำใดๆ ที่ดำเนินการในบัฟเฟอร์ประวัติได้ การกระทำที่ไม่ขึ้นกับการกระทำที่กำลังถูกยกเลิกควรจะยังคงอยู่เหมือนเดิม" [ 4 ]เช่นเดียวกับที่ต้องสามารถทำซ้ำคำสั่งที่ถูกยกเลิกได้ ฟังก์ชันที่สามสำหรับการยกเลิกแบบเลือกได้คือ "ไม่มีคำสั่งใดสามารถถูกทิ้งออกจากบัฟเฟอร์ประวัติโดยอัตโนมัติโดยปราศจากคำขอโดยตรงจากผู้ใช้" [ 4 ]สำหรับการยกเลิกแบบเลือกได้นั้น หมายความว่าการยกเลิกและการทำซ้ำสามารถดำเนินการได้นอกบริบทใดๆ มีประเด็นหลักสามประการ ประการแรกคือ คำสั่งที่ถูกยกเลิกอาจอยู่นอกบริบทเดิม ซึ่งอาจทำให้เกิดการอ้างอิงที่ตายแล้วซึ่งต้องได้รับการจัดการ ประการที่สองคือ คำสั่งที่แก้ไขแล้วสามารถถูกยกเลิกได้ ดังนั้นจึงต้องแก้ไขว่าสถานะใดหลังจากยกเลิกจะถูกนำเสนอ ประเด็นที่สามคือปัญหาการทิ้งคำสั่ง การยกเลิกแบบเลือกไม่มีตัวชี้ในรายการ ดังนั้นจึงหมายความว่าไม่ควรทิ้งคำสั่งใด ๆ จากสแต็ก[ 4 ]
ยกเลิกการกระทำโดยตรงแบบเลือกเฉพาะ
การยกเลิกแบบเลือกโดยตรงเป็นส่วนขยายของการยกเลิกเชิงเส้นแบบจำกัดที่มีประวัติแบบต้นไม้ การดำเนินการจะสร้างสำเนาของคำสั่งที่เลือก เรียกใช้คำสั่งนี้ และเพิ่มลงในรายการประวัติ มีการกำหนดการดำเนินการแบบไม่เชิงเส้นสองรายการ ได้แก่ การยกเลิกแบบเลือกและการทำซ้ำแบบเลือก ดังนั้นจึงมีความสมมาตรมากขึ้น[ 2 ]
แอปพลิเคชันผู้ใช้หลายคน
เมื่อผู้ใช้หลายคนสามารถแก้ไขเอกสารเดียวกันได้พร้อมกัน จำเป็นต้องมีฟังก์ชันยกเลิกการกระทำแบบหลายผู้ใช้ การยกเลิกการกระทำแบบหลายผู้ใช้ ทั่วโลกจะย้อนกลับการกระทำล่าสุดที่เกิดขึ้นกับเอกสาร โดยไม่คำนึงว่าใครเป็นผู้แก้ไขในขณะที่การยกเลิกการกระทำแบบหลายผู้ใช้เฉพาะที่ จะย้อนกลับเฉพาะการกระทำที่ทำโดยผู้ใช้คนนั้น ซึ่งต้องใช้การใช้งานฟังก์ชันยกเลิกการกระทำแบบไม่เชิงเส้น
ในขณะที่คำสั่งยกเลิก (undo) ใช้เพื่อย้อนกลับไปยังการแก้ไขหลายรายการ คำสั่งทำซ้ำ (redo) จะดำเนินการไปข้างหน้าในประวัติการดำเนินการ การแก้ไขใหม่มักจะล้างรายการทำซ้ำ หากใช้โมเดลการทำซ้ำแบบมีสาขา การแก้ไขใหม่จะสร้างสาขา ใหม่ ในประวัติการดำเนินการ
จำนวนการกระทำก่อนหน้าที่สามารถย้อนกลับได้นั้นแตกต่างกันไปตามโปรแกรม เวอร์ชัน และความสามารถของฮาร์ดแวร์หรือซอฟต์แวร์ ตัวอย่างเช่น ขนาดสแต็กการย้อนกลับ/ทำซ้ำเริ่มต้นในAdobe Photoshopคือ 20 แต่ผู้ใช้สามารถเปลี่ยนแปลงได้ อีกตัวอย่างหนึ่งคือ เวอร์ชันก่อนหน้าของMicrosoft Paintอนุญาตให้ย้อนกลับการแก้ไขได้สูงสุดเพียงสามครั้งเท่านั้น เวอร์ชันที่เปิดตัวในWindows 7เพิ่มขีดจำกัดนี้เป็น 50
คุณสมบัติการยกเลิกแบบง่ายๆ ที่แก้ไขเพียงครั้งเดียวบางครั้งจะยกเลิก "การทำซ้ำ" โดยถือว่าคำสั่งยกเลิกนั้นเป็นการกระทำที่สามารถยกเลิกได้ นี่เรียกว่าโมเดลการยกเลิกแบบพลิกกลับ เนื่องจากผู้ใช้สามารถพลิกกลับไปมาระหว่างสองสถานะของโปรแกรมโดยใช้คำสั่งยกเลิก[ 14 ]นี่เป็นโมเดลมาตรฐานก่อนที่จะมีการนำการยกเลิกหลายระดับมาใช้กันอย่างแพร่หลายในช่วงต้นทศวรรษ 1990
ยกเลิกการดำเนินการ
การยกเลิกการกระทำสามารถทำได้โดยใช้รูปแบบต่างๆ รูปแบบที่พบได้บ่อยที่สุดคือรูปแบบคำสั่ง (command pattern ) และรูปแบบความทรงจำ (memento pattern )
รูปแบบคำสั่ง
รูปแบบคำสั่ง (Command pattern ) เป็นรูปแบบการออกแบบซอฟต์แวร์ที่ห่อหุ้มข้อมูลจากการดำเนินการลงในอ็อบเจ็กต์คำสั่ง ซึ่งหมายความว่าการกระทำทุกอย่างจะถูกเก็บไว้ในอ็อบเจ็กต์ คลาสคำสั่งแบบนามธรรม (Abstract command class) จะใช้การดำเนินการ execute แบบนามธรรม ดังนั้นอ็อบเจ็กต์คำสั่งทุกตัวจึงมีการดำเนินการ execute สำหรับการยกเลิก (Undo) ก็ต้องมีการดำเนินการ unexecuted ด้วย ซึ่งจะยกเลิกผลของคำสั่งที่ดำเนินการไปแล้ว ซึ่งจะถูกเก็บไว้ในรายการประวัติ การยกเลิกและการทำซ้ำ (Redo) จะถูกนำไปใช้เพื่อให้รายการทำงานไปข้างหน้าและข้างหลังเมื่อมีการเรียกใช้คำสั่ง execute หรือ unexecute [ 15 ]
สำหรับการยกเลิกแบบครั้งเดียว จะมีการจัดเก็บเฉพาะคำสั่งที่ดำเนินการเท่านั้น ในทางตรงกันข้ามกับการยกเลิกแบบหลายระดับ ซึ่งไม่เพียงแต่จะบันทึกรายการประวัติพร้อมคำสั่งเท่านั้น แต่ยังสามารถกำหนดจำนวนระดับการยกเลิกที่มีความยาวสูงสุดของรายการได้อีกด้วย[ 15 ]
ลวดลายของที่ระลึก
รูปแบบ Mementoจะจัดเก็บสถานะภายในของวัตถุ วัตถุที่ใช้บันทึกสถานะนี้เรียกว่า Memento และจะถูกจัดการผ่านผู้สร้าง Memento เมื่อมีการเรียกใช้คำสั่ง Undo ระบบจะส่งคืน Memento ที่เริ่มต้นด้วยข้อมูลของสถานะปัจจุบัน เพื่อให้สามารถตรวจสอบสถานะได้ Memento จะมองเห็นได้เฉพาะผู้สร้างเท่านั้น
ในรูปแบบ memento กลไกการยกเลิกเรียกว่าผู้ดูแล มีหน้าที่รับผิดชอบในการเก็บรักษา memento แต่จะไม่เปลี่ยนแปลงเนื้อหาของ memento เหล่านั้น สำหรับการยกเลิก ผู้ดูแลจะขอ memento จากผู้สร้าง จากนั้นจึงทำการยกเลิก[ 15 ]
กลไกการยกเลิกส่วนใหญ่สามารถนำไปใช้ได้โดยไม่ต้องพึ่งพาแอปพลิเคชันหรือคลาสคำสั่งเฉพาะ ซึ่งรวมถึง "การจัดการรายการประวัติ ตัวเลื่อนประวัติ รายการเมนูสำหรับการยกเลิกและการทำซ้ำ และการอัปเดตรายการเมนูโดยขึ้นอยู่กับชื่อของคำสั่งถัดไปที่พร้อมใช้งาน" [ 2 ]
คลาสคำสั่งทุกคลาสจะมีเมธอด `do` ซึ่งจะถูกเรียกเมื่อมีการดำเนินการคำสั่งนั้น เมธอด `undo` ทำหน้าที่ย้อนกลับการกระทำของเมธอด `do` โดยมีกลยุทธ์หลายวิธีในการดำเนินการย้อนกลับ
- การตรวจสอบสถานะแบบเต็ม (Full checkpoint) :หมายความว่าสถานะทั้งหมดจะถูกบันทึกไว้หลังจากคำสั่งถูกดำเนินการเสร็จสิ้น นี่เป็นการใช้งานที่ง่ายที่สุด แต่ไม่มีประสิทธิภาพมากนัก จึงไม่ค่อยได้ใช้บ่อยนัก
- การเรียกใช้งานซ้ำอย่างสมบูรณ์:ดังนั้น สถานะเริ่มต้นจะถูกบันทึกไว้ และสามารถเข้าถึงทุกสถานะในรายการประวัติได้โดย "เริ่มต้นจากสถานะเริ่มต้นและทำซ้ำคำสั่งทั้งหมดตั้งแต่ต้นประวัติ" [ 2 ]
- การตรวจสอบสถานะบางส่วน:นี่เป็นกลยุทธ์ที่ใช้บ่อยที่สุด สถานะของแอปพลิเคชันที่เปลี่ยนแปลงจะถูกบันทึกไว้ และเมื่อใช้ฟังก์ชันยกเลิก ส่วนหนึ่งของสถานะจะถูกตั้งค่ากลับไปเป็นค่าก่อนหน้า
- ฟังก์ชันผกผัน:ฟังก์ชันผกผันไม่ต้องการข้อมูลสถานะที่บันทึกไว้ “ตัวอย่างเช่น การเคลื่อนที่สามารถย้อนกลับได้โดยการย้ายวัตถุกลับไปตามปริมาณสัมพัทธ์” [ 2 ]สำหรับการยกเลิกแบบเลือกนั้นไม่มีข้อมูลเพียงพอสำหรับการบันทึกสถานะ
ดูเพิ่มเติม
- การคำนวณแบบย้อนกลับได้
- การย้อนกลับ (การจัดการข้อมูล)
- การกู้คืนข้อมูลที่ถูกลบ
- การควบคุมเวอร์ชัน ( รูปแบบไฟล์ดั้งเดิม )
อ่านเพิ่มเติม
- ซิมเมอร์, เบน (15 ก.ย. 2009). "ยุคแห่งการล้างแค้น" . เดอะนิวยอร์กไทมส์ . เก็บถาวรจากต้นฉบับเมื่อ 30 พ.ย. 2011.
ลิงก์ภายนอก
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ เลิกทำ
การยกเลิก (Undo) เป็น เทคนิคการโต้ตอบ ที่นำมาใช้ใน โปรแกรมคอมพิวเตอร์ หลายโปรแกรม โดยจะลบการเปลี่ยนแปลงล่าสุดที่ทำกับ เอกสาร ทำให้เอกสาร กลับคืนสู่สถานะเดิม ในบางโปรแกรมขั้นสูง...
ประวัติศาสตร์
ความสามารถในการยกเลิกการดำเนินการบนคอมพิวเตอร์ได้รับการคิดค้นขึ้นโดยอิสระหลายครั้ง เพื่อตอบสนองต่อวิธีการที่ผู้คนใช้คอมพิวเตอร์ [ 5 ]
ยกเลิกและทำซ้ำโมเดล
โมเดลการย้อนกลับสามารถจำแนกได้เป็นแบบเชิงเส้นหรือแบบไม่เชิงเส้น โมเดลการย้อนกลับแบบไม่เชิงเส้นสามารถแบ่งย่อยได้เป็นโมเดลสคริปต์ โมเดล US&R โมเดลไตรภาค และการย้อนกลับแบบเลือก [ 2 ]
ยกเลิกเชิงเส้น
การยกเลิกแบบเชิงเส้นจะถูกนำไปใช้กับ สแต็ก ( โครงสร้างข้อมูล แบบเข้าหลังออกก่อน (LIFO) ) ซึ่งจัดเก็บประวัติของคำสั่งที่ดำเนินการทั้งหมด เมื่อมีการดำเนินการคำสั่งใหม่ คำสั่งนั้นจะถูกเพิ่มเข้าไปที่ด้านบนของสแต็ก ดังนั้น...