Vrátit - Undo

Zpět je interakční technika, která je implementována v mnoha počítačových programech. Vymaže poslední provedenou změnu dokumentu a vrátí ji do staršího stavu. V některých pokročilejších programech, jako je grafické zpracování , zruší undo poslední příkaz provedený v upravovaném souboru. S možností vrátit zpět mohou uživatelé prozkoumat a pracovat bez obav z chyb, protože je lze snadno vrátit zpět.

Očekávání vrácení jsou snadno srozumitelná: mít předvídatelnou funkčnost a zahrnout všechny „nevratné“ příkazy. Zpět je obvykle k dispozici, dokud uživatel nezruší všechny provedené operace. Existují však některé akce, které nejsou uloženy v seznamu Zpět, a proto je nelze vrátit zpět. Například uložit soubor není možné vrátit zpět, ale je zařazen do seznamu v pořadí, aby se ukázalo, že byl spuštěn. Další akcí, která se obvykle neukládá, a tedy není možné ji vrátit zpět, je posouvání nebo výběr .

Opakem undo je redo . Příkaz redo převrátí zpět nebo vrátí vyrovnávací paměť do novějšího stavu.

Společnými součástmi funkce vrácení zpět jsou příkazy, které byly provedeny uživatelem, vyrovnávací paměť (y) historie, která ukládá dokončené akce, správce zpět / znovu pro ovládání vyrovnávací paměti historie a uživatelské rozhraní pro interakci s uživatelem.

Ve většině aplikací systému Microsoft Windows je klávesová zkratka pro příkaz Zpět zpět Ctrl + Z nebo Alt + Backspace a zkratka pro Znovu je Ctrl + Y nebo Ctrl + Shift + Z.

Ve většině aplikací Apple Macintosh je zkratka pro příkaz zpět Zpět Command -Z a zkratka pro opakování je Command - Shift -Z.

Na všech platformách lze funkce zpět / znovu provést také prostřednictvím nabídky Úpravy .

Dějiny

Schopnost vrátit operaci na počítači byla nezávisle vynalezena několikrát v reakci na to, jak lidé používali počítače.

Systém pro vyhledávání a editaci souborů , vyvinutý od roku 1968 na Brown University , je údajně prvním počítačovým systémem, který má funkci „zpět“.

Warren Teitelman do roku 1971 vyvinul programátorského pomocníka jako součást BBN-LISP s funkcí Zpět.

Xerox PARC Bravo textový editor měl příkaz Zpět v roce 1974. 1976 výzkumné zprávy Lance A. Miller a John C. Thomase IBM , behaviorálních problémů v používání interaktivních systémů , poznamenal, že „by bylo velmi užitečné, aby umožnily uživatelům „vzít zpět“ alespoň bezprostředně předcházející příkaz (vydáním zvláštního příkazu „zpět“). “ Programátoři ve výzkumném středisku Xerox PARC přiřadili klávesovou zkratku Ctrl-Z příkazu undo, který se stal zásadním rysem textových editorů a textových procesorů v éře osobních počítačů . V roce 1980 začal Larry Tesler ze společnosti Xerox PARC pracovat ve společnosti Apple Computer . Tam a Bill Atkinson se zasazovali o přítomnost příkazu pro zrušení jako standardní součást zařízení Apple Lisa . Atkinson dokázal přesvědčit jednotlivé vývojáře aplikačního softwaru Lisy, aby zahrnovali jednu úroveň zpět a znovu, ale nebyl úspěšný v lobování za více úrovní. Když společnost Apple představila nástupce Lisy, Macintosh , stanovila, že všechny standardní aplikace by měly obsahovat „Zpět“ jako první příkaz v nabídce „Úpravy“, která dodnes zůstává standardem pro macOS a Windows .

Víceúrovňové příkazy pro vrácení zpět byly zavedeny v 80. letech, což uživatelům umožnilo vzít zpět řadu akcí, nejen nejnovější. EMACS a další časově sdílené editory obrazovky to měly před softwarem osobního počítače. CygnusEd byl první Amiga textový editor s neomezenou funkcí undo / redo. AtariWriter , aplikace pro zpracování textu zavedená v roce 1982, obsahovala zpět. NewWord, další program pro zpracování textu, který vydala společnost NewStar v roce 1984, měl příkaz nevymazání. VisiWord od IBM měl také příkaz pro obnovení.

Vrátit zpět a znovu provést modely

Undo modely lze kategorizovat jako lineární nebo nelineární. Nelineární zpětný model lze rozdělit na skriptový model, model US & R, triadický model a selektivní zpět.

Některé společné vlastnosti modelů jsou:

  • vlastnost stabilního provedení: Stav je reprezentován jako seřazený seznam příkazů. To znamená, že příkaz „je vždy vrácen ve stavu, kterého bylo dosaženo po původním provedení.“
  • oslabené stabilní provedení: To znamená, že pokud je provedeno vrácení zpět, všechny příkazy, které jsou závislé na příkazu Zpět, jsou zrušeny v závislosti na příkazu.
  • stabilní výsledek vlastnost: Tato vlastnost má podobný význam jako stabilní provedení vlastnost s výjimkou seznamu. Uspořádaný seznam příkazů zahrnuje, že byly provedeny namísto pouze příkazů.
  • komutativní: To znamená, že dosažený stav po undo a redo dvou různých příkazech je stejný, když jsou provedeny v opačném pořadí.
  • minimalistická vlastnost zpět: Popisuje, že „operace zrušení příkazu C zruší pouze příkaz C a všechny příkazy mladší než C, které jsou závislé na C.“

Lineární zpět

Lineární vrácení zpět je implementováno pomocí zásobníku (datová struktura last in first out (LIFO)), který ukládá historii všech provedených příkazů. Když je spuštěn nový příkaz, je přidán do horní části zásobníku. Proto lze vrátit zpět a odebrat z historie pouze poslední provedený příkaz. Zpět může být opakován, dokud není historie prázdná.

Omezený lineární model

Omezený lineární model je rozšířením lineárního undo modelu. Splňuje výše popsanou vlastnost stabilního spuštění pro lineární vrácení zpět, protože tento model nezachová vlastnost, pokud je proveden příkaz, zatímco seznam historie obsahuje další příkazy. Omezený lineární model vymaže seznam historie před přidáním nového příkazu. K dispozici jsou však i další omezení. Lze například omezit velikost seznamu historie nebo když je dosaženo definované velikosti, první provedený příkaz je ze seznamu odstraněn.

Nelineární zpět

Hlavním rozdílem mezi lineárním undo a nelineárním undo je možnost uživatele vrátit zpět provedené příkazy v libovolném pořadí. Mají šanci vrátit zpět nejaktuálnější příkaz, ale spíše si vybrat příkaz ze seznamu. Pro nelineární model existují podtřídy, které tento model implementují.

Skriptový model

Model skriptu zpracovává akce uživatele jako úpravy skriptu příkazů. Seznam historie provedených příkazů je interpretován „jako skript, účinek vrácení zpět je definován stejně, jako kdyby k vrácené akci nikdy nedošlo.“ V důsledku zrušení stavu musí být stát takovým způsobem, jako kdyby příkaz Zpět nebyl nikdy proveden. Nevýhodou tohoto modelu je, že uživatel musí znát spojení mezi zrušeným příkazem a aktuálním stavem, aby se vyhnul vedlejším účinkům. Jedním z nich může být například duplikace. Další problémy spočívají v tom, že pokud „jsou následné příkazy přepracovány v jiném stavu, než v jakém byly původně provedeny v rozhraních přímé manipulace, není tato reinterpretace původní akce uživatele vždy zřejmá nebo dobře definovaná“.

US&R model

Zvláštností tohoto modelu je, že má možnost přeskočit příkaz. To znamená, že opakování příkazu lze přeskočit. Přeskočený příkaz je označen jako přeskočený, ale neodstraní se. Když jsou provedeny nové příkazy, seznam historie je zachován, takže pořadí provedených příkazů může být s tím reprodukovatelné. Pořadí lze popsat prostřednictvím stromu historie, což je řízený graf, „protože je možné pokračovat v předávání příkazů z jiné větve a vytvářet tak odkaz v grafu“. I když je sada příkazů jednoduchá a snadno srozumitelná, složitá struktura s přeskakováním a propojováním větví je těžko pochopitelná a zapamatovatelná, pokud chce uživatel vrátit více než jeden krok.

Triadický model

Tento nelineární model Zpět má kromě možnosti Zpět a Znovu možnost otáčení. Má stejnou datovou strukturu jako výše uvedené modely se seznamem historie a odděleným seznamem opakování, který zahrnuje operace opakování. Operace otočení nastaví poslední příkaz seznamu opakovaných akcí před ním. Na jedné straně to znamená, že další příkaz, který má být přepracován, lze vybrat umístěním dopředu. Na druhou stranu lze rotaci použít k „výběru místa v seznamu opakovaných akcí, kam bude při další operaci vrácení příkazu zadán příkaz“. Seznam opakování je proto neuspořádaný. "Chcete-li vrátit izolovaný příkaz, musí uživatel vrátit zpět několik kroků, otočit seznam opakovaných kroků a poté znovu provést několik kroků". Pro opakování je nutné seznam otočit, dokud není požadovaný příkaz výše.

Selektivní zrušení

Jakubec a kol. řekněme, že selektivní zrušení je funkce, kterou model může nabídnout, ale pro selektivní zrušení neexistuje jasná definice. Autoři vybrali funkce, které by model měl mít, když podporuje selektivní vrácení zpět. Mělo by být možné "vrátit zpět jakoukoli provedenou akci ve vyrovnávací paměti historie. Akce nezávislé na akci, která se vrátí zpět, by měly zůstat nedotčené". Stejně jako to musí být možné provést jakýkoli příkaz pro vrácení. Třetí funkcí pro selektivní vrácení zpět je, že „žádný příkaz nelze automaticky vyřadit z vyrovnávací paměti historie bez přímého požadavku uživatele.“ Pro selektivní vrácení zpět platí, že zpět a znovu je možné spustit mimo jakýkoli kontext. Existují tři hlavní problémy. První je, že vrácené příkazy mohou být mimo původně kontext. Díky tomu mohou existovat mrtvé reference, které je třeba zpracovat. Druhý problém, který lze změnit, je možné vrátit zpět, a proto je třeba vyřešit, který stav po vrácení bude uveden. Třetím problémem je zahození problémů s příkazy. Selektivní vrácení zpět nemá v seznamech žádný ukazatel, takže to znamená, že ze zásobníku by neměl být zahozen žádný příkaz.

Přímé selektivní vrácení zpět

Přímé selektivní vrácení zpět je rozšíření omezeného lineárního vrácení zpět se stromem historie. Operace vytvoří kopii vybraného příkazu, provede ji a přidá ji do seznamu historie. Jsou definovány dvě nelineární operace, selektivní zpět a selektivní opakování, takže je symetrickější.

Aplikace pro více uživatelů

Když může stejný dokument upravovat více uživatelů současně, je potřeba vrátit zpět více uživatelů. Globální vrácení více uživatelů vrátí zpět poslední akci provedenou v dokumentu bez ohledu na to, kdo provedl úpravu. Místní vrácení více uživatelů vrátí pouze akce provedené místním uživatelem, což vyžaduje nelineární implementaci zpět.

Tam, kde lze použít zpět ke zpětnému procházení několika úpravami, přejde příkaz redo vpřed v historii akcí. Provedení nové úpravy obvykle vymaže seznam opakovaných akcí. Pokud se použije nový model větvení, nová úprava rozvětví historii akce.

Počet předchozích akcí, které lze vrátit zpět, se liší podle programu, verze a možností hardwaru nebo softwaru. Například výchozí velikost zásobníku zpět / znovu v aplikaci Adobe Photoshop je 20, ale uživatel ji může změnit. Jako další příklad dřívější verze aplikace Microsoft Paint umožňovaly vrátit zpět až tři úpravy; verze představená v systému Windows 7 zvýšila tento limit na 50.

Zjednodušující funkce pro vrácení zpět s jednou úpravou někdy způsobí, že funkce „redo“ odstraní, protože samotný příkaz zpět považuje za akci, kterou lze vrátit zpět. Toto se nazývá model převrácení zpět, protože uživatel může přepínat mezi dvěma stavy programu pomocí příkazu zpět. Jednalo se o standardní model před rozšířeným přijetím víceúrovňového zrušení na počátku 90. let.

Vrátit zpět implementaci

Zpět lze provést pomocí různých vzorů. Nejběžnější vzory jsou příkazový vzor a vzor mementa .

Vzor příkazu

Příkaz vzor je návrhový vzor , který shrnuje informace z provozu do velení objektů. To znamená, že každá akce je uložena v objektu. Třída abstraktních příkazů implementuje operaci abstraktního provedení, takže každý objekt příkazu má operaci provedení. Pro vrácení zpět musí také existovat neprovedená operace, která zruší účinek provedeného příkazu, které jsou uloženy v seznamu historie. Zpět a znovu jsou implementovány tak, že seznam je spuštěn dopředu a dozadu, když je volán příkaz k provedení nebo provedení.

U jednoduchého vrácení zpět je uložen pouze provedený příkaz. Na rozdíl od víceúrovňového vrácení zpět, kde je uložen nejen seznam historie s příkazy, ale také počet úrovní vrácení, lze určit maximální délku seznamu.

Memento vzor

U memento vzoru je uložen vnitřní stav objektu. Objekt, ve kterém je stav uložen, se nazývá memento a je organizován prostřednictvím původce mementa. To vrací memento, inicializované informacemi o aktuálním stavu, když je provedeno vrácení zpět, aby bylo možné stav zkontrolovat. Memento je viditelné pouze pro původce.

V memento vzoru se mechanismus zrušení nazývá domovník. Je odpovědný za úschovu upomínkových předmětů, ale nikdy nemění jejich obsah. Pro zrušení požádá správce o upomínku na původce a poté odvolání použije.

Většinu mechanismů zpět lze implementovat bez závislosti na konkrétních aplikacích nebo třídách příkazů. To zahrnuje „správu seznamu historie, posouvače historie, položky nabídky pro zpět a znovu a aktualizaci položek nabídky v závislosti na názvu dalšího dostupného příkazu.“

Každá třída příkazů má metodu do, která je volána při provádění příkazu. Zpět-metoda implementuje reverzní operaci do-metody. K implementaci zpětného chodu existuje několik různých strategií.

  • plný kontrolní bod : To znamená, že po provedení příkazu je uložen úplný stav. Toto je nejjednodušší implementace, ale není vysoce efektivní a proto se často nepoužívá.
  • kompletní opakování: Proto je počáteční stav uložen a ke každému stavu v seznamu historie lze dosáhnout pomocí „počínaje počátečním stavem a opakováním všech příkazů od začátku historie.“
  • částečný kontrolní bod : Toto je nejpoužívanější strategie. Změněný stav aplikace se uloží a při vrácení zpět se část stavu nastaví zpět na předanou hodnotu.
  • inverzní funkce: Inverzní funkce nepotřebuje žádné uložené informace o stavu. "Například pohyb lze zvrátit přesunutím objektu zpět o relativní částku." Pro selektivní vrácení není k dispozici dostatek informací pro uložení stavu.

Viz také

Reference

  1. ^ a b c d e f g h i j k l m n Berlage, Thomas (01.09.1994). "Selektivní mechanismus zpět pro grafická uživatelská rozhraní založená na příkazových objektech". Transakce ACM při interakci počítač-člověk . 1 (3): 269–294. doi : 10,1145 / 196699,196721 . ISSN  1073-0516 .
  2. ^ Myers, Brad A .; Kosbie, David S. (1996-04-13). Opakovaně použitelné objekty hierarchických příkazů . ACM. str.  260–267 . doi : 10,1145 / 238386,238526 . ISBN 0897917774.
  3. ^ a b c d e f g h Jakubec, Karel; Polák, Marek; Nečaský, Martin; Holubová, Irena (2014). "Vrátit / Znovu provést operace ve složitém prostředí" . Procedia Computer Science . 32 : 561–570. doi : 10.1016 / j.procs.2014.05.461 . ISSN  1877-0509 .
  4. ^ Moran, Chuktropolis Welling (01.01.2013). Interaktivní čas (Ph.D.). La Jolla: Kalifornská univerzita v San Diegu. ISBN 9781303194450.
  5. ^ Barnet, Belinda (01.12.2014). Paměťové stroje: vývoj hypertextu . Anthem Press. p. 108. ISBN 9781783083442. Nejoblíbenějším vývojem pro začínající uživatele ve FRESS však nebyla jeho kapacita pro umístění více displejů a uživatelů; šlo o funkci „vrátit zpět“ - na kterou je van Dam nejvíce pyšný (van Dam 2011). FRESS propagoval jednoúrovňové vrácení zpět jak pro zpracování textu, tak pro hypertext. Každá úprava souboru byla uložena ve stínové verzi datové struktury, která umožňovala „automatické ukládání“ i vrácení zpět. Zaměstnanci a studenti Brown okamžitě pochopili důležitost a užitečnost této funkce (van Dam 1999).
  6. ^ Barnet, Belinda (01.01.2010). "Tvorba uživatelského rozhraní dokumentu: Hypertextový editační systém (HES) a systém pro vyhledávání a úpravy souborů (FRESS)" . 4 (1). Citovat deník vyžaduje |journal=( pomoc )
  7. ^ Teitelman, Warren (01.01.1972). "Automated Programmering: The Programmer's Assistant". Sborník z 5. – 7. Prosince 1972, Fall Joint Computer Conference, část II . AFIPS '72 (podzim, část II). New York, NY, USA: ACM: 917–921. doi : 10,1145 / 1480083,1480119 .
  8. ^ „Bravo Manual in Alto Non-Programmers Guide, p. 52“ (PDF) . Citováno 2014-03-29 .
  9. ^ Miller, Lance A .; Thomas, John C. (01.09.1977). "Problémy s chováním při používání interaktivních systémů". International Journal of Man-Machine Studies . 9 (5): 509–536. doi : 10,1016 / S0020-7373 (77) 80002-3 . ISSN  0020-7373 .
  10. ^ Miller, Lance A .; John C. Thomas Jr. (prosinec 1976). „Problémy s chováním při používání interaktivních systémů“ (PDF) . Citováno 2011-05-21 . Citovat deník vyžaduje |journal=( pomoc )
  11. ^ a b c Ben Zimmer (2009-09-15). "The Age of Undoing" . New York Times . Citováno 2013-06-02 .
  12. ^ Apple Computer, Inc. (1984). "Uživatelské rozhraní". Uvnitř Macintosh, Volume I .
  13. ^ Roberta Mancini, Alan Dix a Stefano Levialdi. 2006. „Úvahy o zrušení“
  14. ^ a b c Návrhové vzory: prvky opakovaně použitelného objektově orientovaného softwaru . Gamma, Erichu. Reading, Mass .: Addison-Wesley. 1995. ISBN 0201633612. OCLC  31171684 .CS1 maint: others ( odkaz )

externí odkazy