Cofnij - Undo

Cofnij to technika interakcji zaimplementowana w wielu programach komputerowych. Usuwa ostatnią zmianę dokonaną w dokumencie, przywracając go do starszego stanu. W niektórych bardziej zaawansowanych programach, takich jak obróbka grafiki , cofnij spowoduje zanegowanie ostatniego polecenia wykonanego w edytowanym pliku. Dzięki możliwości cofania użytkownicy mogą eksplorować i pracować bez obawy popełnienia błędów, ponieważ można je łatwo cofnąć.

Oczekiwania dotyczące cofania są łatwe do zrozumienia: mają przewidywalną funkcjonalność i uwzględniają wszystkie polecenia „cofania”. Zwykle cofanie jest dostępne, dopóki użytkownik nie cofnie wszystkich wykonanych operacji. Ale są pewne akcje, które nie są przechowywane na liście cofania i dlatego nie można ich cofnąć. Na przykład zapisu zbioru nie można cofnąć, ale jest on umieszczany w kolejce na liście, aby pokazać, że został wykonany. Innym działania, które nie jest zazwyczaj przechowywany, a tym samym nie można cofnąć jest przewijanie lub wyboru .

Przeciwieństwem cofania jest ponawianie . Polecenie redo odwraca cofnięcie lub przesuwa bufor do nowszego stanu.

Typowymi składnikami funkcji cofania są polecenia, które zostały wykonane przez użytkownika, bufor(y) historii przechowujący ukończone działania, menedżer cofania/ponawiania do kontrolowania bufora historii oraz interfejs użytkownika do interakcji z użytkownikiem.

W większości aplikacji Microsoft Windows skrót klawiaturowy polecenia cofania to Ctrl+Z lub Alt+Backspace, a skrót do ponawiania to Ctrl+Y lub Ctrl + Shift +Z.

W większości aplikacji Apple Macintosh skrót do polecenia cofania to Command -Z, a skrót do ponawiania to Command - Shift -Z.

Na wszystkich platformach dostęp do funkcji cofania/ponawiania można również uzyskać za pośrednictwem menu Edycja .

Historia

Możliwość cofnięcia operacji na komputerze została niezależnie wymyślona wielokrotnie, w odpowiedzi na sposób, w jaki ludzie używali komputerów.

System pobierania i edycji plików , opracowany w 1968 roku na Uniwersytecie Browna , jest uważany za pierwszy system komputerowy, który miał funkcję „cofnij”.

Warren Teitelman opracował Asystenta Programisty w ramach BBN-LISP z funkcją Cofnij do 1971 roku.

Xerox PARC Bravo edytor tekstu miał polecenia Cofnij w 1974. 1976 raport z badań Lance A. Miller i John C. Thomasa z IBM , problemy behawioralne w stosowaniu Systemów Interaktywnych , zauważył, że „byłoby bardzo przydatne, aby umożliwić użytkownikom 'odzyskać' przynajmniej bezpośrednio poprzedzające polecenie (wydając specjalne polecenie 'cofnij')." Programiści z centrum badawczego Xerox PARC przypisali skrót klawiszowy Ctrl-Z do polecenia cofania, które stało się kluczową funkcją edytorów tekstu i procesorów tekstu w erze komputerów osobistych . W 1980 roku Larry Tesler z Xerox PARC rozpoczął pracę w Apple Computer . Tam on i Bill Atkinson opowiedzieli się za obecnością polecenia cofania jako standardowego urządzenia Apple Lisa . Atkinsonowi udało się przekonać poszczególnych programistów aplikacji Lisa do uwzględnienia jednego poziomu cofania i ponawiania, ale nie udało mu się lobbować na wielu poziomach. Kiedy Apple wprowadził następcę Lisy, Macintosha , wymagał, aby wszystkie standardowe aplikacje zawierały „Cofnij” jako pierwsze polecenie w menu „Edycja”, które do dziś pozostaje standardem w macOS i Windows .

Wielopoziomowe polecenia cofania zostały wprowadzone w latach 80. XX wieku, umożliwiając użytkownikom cofnięcie szeregu działań, a nie tylko ostatniej. EMACS i inne współdzielone w czasie edytory ekranów miały to przed oprogramowaniem na komputery osobiste. CygnusEd był pierwszym edytorem tekstu na Amigę z nieograniczoną funkcją cofania/ponawiania. AtariWriter , edytor tekstu wprowadzony w 1982 r., zawierał funkcję cofania. NewWord, inny program do edycji tekstu wydany przez NewStar w 1984 roku, posiadał polecenie cofnięcia kasowania. VisiWord IBM miał również polecenie cofnięcia usunięcia.

Cofnij i ponów modele

Modele cofania można podzielić na liniowe lub nieliniowe. Nieliniowy model cofania można podzielić na podklasy w modelu skryptowym, modelu us&r, modelu triadowym i selektywnym cofaniu.

Niektóre wspólne właściwości modeli to:

  • Właściwość stabilnego wykonania: stan jest reprezentowany jako uporządkowana lista poleceń. Oznacza to, że polecenie „jest zawsze cofane w stanie osiągniętym po pierwotnym wykonaniu”.
  • osłabione stabilne wykonanie: Oznacza to, że jeśli wykonywane jest cofnij, wszystkie polecenia, które zależą od polecenia cofania, są cofane w zależności od polecenia.
  • Właściwość stabilnego wyniku: Ta właściwość ma podobne znaczenie jak właściwość stabilnego wykonywania, z wyjątkiem listy. Uporządkowana lista poleceń zawiera informację, że zostały wykonane, a nie tylko polecenia.
  • przemienny: Oznacza to, że osiągnięty stan po cofnięciu i ponawianiu dwóch różnych poleceń jest taki sam, gdy są one wykonywane w odwrotnej kolejności.
  • minimalistyczna właściwość cofania: opisuje, że „cofnij operację polecenia C cofa tylko polecenie C i wszystkie polecenia młodsze niż C, które są zależne od C”.

Cofanie liniowe

Liniowe cofanie jest zaimplementowane za pomocą stosu (struktura danych „ostatnie weszło, pierwsze wyszło” (LIFO)), która przechowuje historię wszystkich wykonanych poleceń. Kiedy wykonywane jest nowe polecenie, jest ono dodawane na szczyt stosu. Dlatego tylko ostatnio wykonane polecenie może zostać cofnięte i usunięte z historii. Cofanie można powtarzać, o ile historia nie jest pusta.

Ograniczony model liniowy

Ograniczony model liniowy jest rozszerzeniem liniowego modelu cofania. Spełnia on opisaną powyżej właściwość stabilnego wykonywania dla cofania liniowego, ponieważ ten model nie zachowuje właściwości, jeśli polecenie zostanie wykonane, podczas gdy lista historii zawiera inne polecenia. Ograniczony model liniowy czyści listę historii przed dodaniem nowego polecenia. Ale dostępne są również inne ograniczenia. Na przykład, rozmiar listy historii może być ograniczony lub gdy zostanie osiągnięty określony rozmiar, pierwsze wykonane polecenie jest usuwane z listy.

Cofanie nieliniowe

Główną różnicą między liniowym cofaniem a nieliniowym cofaniem jest możliwość cofania przez użytkownika wykonywanych poleceń w dowolnej kolejności. Mają szansę nie cofnąć ostatniego polecenia, ale wybrać polecenie z listy. Dla modelu nieliniowego istnieją podklasy, które implementują ten model.

Model skryptu

Model skryptu obsługuje działania użytkownika jako edycję skryptu poleceń. Lista historii wykonywanych poleceń jest interpretowana „jako skrypt, efekt cofania jest definiowany tak, jakby akcja cofania nigdy nie miała miejsca”. W wyniku cofnięcia stan musi być taki, jakby polecenie cofnięcia nigdy nie zostało wykonane. Wadą tego modelu jest to, że użytkownik musi znać związek między cofniętym poleceniem a bieżącym stanem, aby uniknąć skutków ubocznych. Jednym z nich może być na przykład powielanie. Inne problemy polegają na tym, że jeśli „kolejne polecenia są powtarzane w innym stanie, niż zostały pierwotnie wykonane w interfejsach bezpośredniej manipulacji, ta reinterpretacja oryginalnej akcji użytkownika nie zawsze jest oczywista lub dobrze zdefiniowana”.

Model US i R

Cechą szczególną tego modelu jest możliwość pominięcia polecenia. Oznacza to, że ponowne wykonanie polecenia można pominąć. Pominięte polecenie jest oznaczone jako pominięte, ale nie usunięte. Kiedy wykonywane są nowe polecenia, lista historii jest zachowywana, więc kolejność wykonywanych poleceń może być z nią odtwarzalna. Kolejność można opisać za pomocą drzewa historii, które jest grafem skierowanym, "ponieważ można kontynuować powtarzanie poleceń z innej gałęzi tworząc link w grafie". Mimo że zestaw poleceń jest prosty i łatwy do zrozumienia, skomplikowana struktura z pomijaniem i łączeniem gałęzi jest trudna do zrozumienia i zapamiętania, gdy użytkownik chce cofnąć więcej niż jeden krok.

Model triadyczny

Ten nieliniowy model cofania ma oprócz cofania i ponawiania możliwość obracania. Ma taką samą strukturę danych jak wyżej wymienione modele z listą historii i oddzieloną listą ponawiania, która zawiera operacje ponawiania. Operacja obracania ustawia przed nią ostatnie polecenie z listy ponawiania. Z jednej strony oznacza to, że następne polecenie do ponownego wykonania można wybrać, umieszczając je z przodu. Z drugiej strony, obrót może być użyty „do wybrania miejsca na liście ponawiania, w którym następna operacja cofania spowoduje umieszczenie polecenia”. Lista powtórzeń jest zatem nieuporządkowana. „Aby cofnąć izolowane polecenie, użytkownik musi cofnąć kilka kroków, obrócić listę powtórzeń, a następnie powtórzyć kilka kroków”. Aby powtórzyć, listę należy obracać, aż żądane polecenie znajdzie się powyżej.

Selektywne cofanie

Jakubec i in. powiedzmy, że selektywne cofanie jest funkcją, którą może zaoferować model, ale dla selektywnego cofania nie ma jasnej definicji. Autorzy wybrali funkcje, które powinien mieć model obsługujący selektywne cofanie. Powinno być możliwe "cofnięcie dowolnej wykonanej akcji w buforze historii. Akcje niezależne od cofanej akcji należy pozostawić bez zmian". Tak samo musi być możliwe powtórzenie każdego cofniętego polecenia. Trzecią funkcją selektywnego cofania jest to, że „żadne polecenie nie może zostać automatycznie usunięte z bufora historii bez bezpośredniego żądania użytkownika”. W przypadku selektywnego cofania ma zastosowanie, że cofanie i ponawianie jest wykonywane poza dowolnym kontekstem. Są trzy główne problemy. Po pierwsze, cofnięte polecenia mogą znajdować się poza pierwotnym kontekstem. Dzięki temu mogą powstać martwe referencje, z którymi trzeba się uporać. Druga sprawa, że ​​zmodyfikowane polecenia można cofnąć i dlatego należy rozwiązać, jaki stan po cofnięciu zostanie przedstawiony. Trzecią kwestią jest odrzucenie problemów z poleceniami. Selektywne cofanie nie ma wskaźnika na listach, co oznacza, że ​​żadne polecenie nie powinno zostać usunięte ze stosu.

Bezpośrednie selektywne cofanie

Bezpośrednie selektywne cofanie jest rozszerzeniem ograniczonego liniowego cofania z drzewem historii. Operacja tworzy kopię wybranego polecenia, wykonuje ją i dodaje do listy historii. Istnieją dwie operacje nieliniowe, selektywne cofanie i selektywne ponawianie, więc jest to bardziej symetryczne.

Aplikacja dla wielu użytkowników

Gdy wielu użytkowników może jednocześnie edytować ten sam dokument, konieczne jest cofnięcie przez wielu użytkowników. Cofnięcie globalne dla wielu użytkowników przywraca ostatnią akcję wykonaną na dokumencie, niezależnie od tego, kto wykonał edycję. Lokalne cofnięcie dla wielu użytkowników cofa tylko działania wykonane przez użytkownika lokalnego, co wymaga nieliniowej implementacji cofania.

Tam, gdzie cofnij można użyć do cofnięcia się przez wiele edycji, polecenie ponów przechodzi dalej przez historię działań. Dokonanie nowej edycji zwykle czyści listę powtórzeń. Jeśli używany jest rozgałęziony model ponawiania, nowa edycja rozgałęzia historię działań.

Liczba poprzednich czynności, które można cofnąć, zależy od programu, wersji oraz możliwości sprzętu lub oprogramowania. Na przykład domyślny rozmiar stosu cofania/ponawiania w programie Adobe Photoshop wynosi 20, ale użytkownik może go zmienić. Jako inny przykład, wcześniejsze wersje programu Microsoft Paint pozwalały na cofnięcie maksymalnie trzech edycji; wersja wprowadzona w Windows 7 zwiększyła ten limit do 50.

Uproszczone funkcje cofania z pojedynczą edycją czasami eliminują „ponawianie”, traktując samo polecenie cofania jako czynność, którą można cofnąć. Jest to znane jako model odwracania cofania, ponieważ użytkownik może przełączać się między dwoma stanami programu za pomocą polecenia cofania. Był to standardowy model przed powszechnym przyjęciem wielopoziomowego cofania na początku lat dziewięćdziesiątych.

Cofnij implementację

Cofnij można zaimplementować za pomocą różnych wzorców. Najczęstsze wzorce to wzorzec poleceń i wzorzec memento .

Wzorzec polecenia

Wzór komenda jest wzorzec projektowania oprogramowania , który obudowuje informacji z pracy w obiektach dowodzenia. Oznacza to, że każda akcja jest przechowywana w obiekcie. Klasa abstrakcyjna poleceń implementuje abstrakcyjną operację wykonania, więc każdy obiekt polecenia ma operację wykonania. Do cofnięcia potrzebna jest również niewykonana operacja, która cofa efekt wykonanego polecenia, które są przechowywane w liście historii. Cofanie i ponawianie są zaimplementowane tak, że lista jest uruchamiana do przodu i do tyłu po wywołaniu polecenia execute lub unexecute.

W przypadku pojedynczego cofnięcia przechowywane jest tylko wykonane polecenie. W przeciwieństwie do wielopoziomowego cofania, w którym nie tylko zapisywana jest lista historii z poleceniami, ale także liczba poziomów cofania może być określona przez maksymalną długość listy.

Wzór pamiątkowy

Z memento wzór stan wewnętrzny obiektu jest przechowywana. Obiekt, w którym zapisywany jest stan, nazywa się memento i jest organizowany przez autora memento. Zwraca to memento, inicjowane informacją o bieżącym stanie, gdy wykonywane jest cofnięcie, aby można było sprawdzić stan. Pamiątka jest widoczna tylko dla pomysłodawcy.

We wzorcu memento mechanizm cofania nazywa się opiekunem. Jest odpowiedzialny za przechowywanie pamiątek, ale nigdy nie zmienia ich zawartości. Aby cofnąć, dozorca prosi o pamiątkę twórcy, a następnie stosuje cofnięcie.

Większość mechanizmu cofania można zaimplementować bez zależności od określonych aplikacji lub klas poleceń. Obejmuje to „zarządzanie listą historii, przewijaniem historii, wpisami menu do cofania i ponawiania oraz aktualizacją wpisów menu w zależności od nazwy następnego dostępnego polecenia”.

Każda klasa poleceń ma metodę do, która jest wywoływana, gdy wykonywane jest polecenie. Metoda undo implementuje działanie odwrotne do metody do. Aby wdrożyć odwrotność, istnieje kilka różnych strategii.

  • pełny punkt kontrolny : Oznacza to, że pełny stan jest zapisywany po wykonaniu polecenia. Jest to najłatwiejsza implementacja, ale nie jest wysoce wydajna i dlatego nie jest często używana.
  • kompletne ponowne uruchomienie: W związku z tym stan początkowy jest zapisywany, a każdy stan na liście historii można osiągnąć poprzez „rozpoczęcie od stanu początkowego i powtórzenie wszystkich poleceń od początku historii”.
  • częściowy punkt kontrolny : jest to najczęściej używana strategia. Zmieniony stan aplikacji jest zapisywany, a po cofnięciu część stanu jest przywracana do wartości w przód.
  • Funkcja odwrotna: Funkcja odwrotna nie wymaga zapisanych informacji o stanie. „Na przykład ruch można odwrócić, przesuwając obiekt z powrotem o względną wartość”. W przypadku selektywnego cofania nie ma wystarczających informacji do zapisania stanu.

Zobacz też

Bibliografia

  1. ^ B c d e f g h i j K L m n Berlage Thomas (01.09.1994). „Wybiórczy mechanizm cofania dla graficznych interfejsów użytkownika opartych na obiektach poleceń”. Transakcje ACM w interakcji komputer-człowiek . 1 (3): 269–294. doi : 10.1145/196699.196721 . ISSN  1073-0516 .
  2. ^ Myers, Brad A.; Kosbie, David S. (1996.04.13). Wielokrotnego użytku hierarchiczne obiekty poleceń . ACM. s.  260–267 . doi : 10.1145/238386.238526 . Numer ISBN 0897917774.
  3. ^ a b c d e f g h Jakubec, Karel; Polak, Marek; Nečaský, Martin; Holubová, Irena (2014). "Cofnij/Ponów operacje w złożonych środowiskach" . Procedia Informatyka . 32 : 561-570. doi : 10.1016/j.procs.2014.05.461 . ISSN  1877-0509 .
  4. ^ Moran, Chuktropolis Welling (01.01.2013). Czas interaktywny (doktorat). La Jolla: Uniwersytet Kalifornijski, San Diego. Numer ISBN 9781303194450.
  5. ^ Barnet, Belinda (01.12.2014). Maszyny pamięci: ewolucja hipertekstu . Hymn Prasa. P. 108. Numer ISBN 9781783083442. Jednak najpopularniejszym rozwiązaniem dla początkujących użytkowników we FRESS nie była jego zdolność do obsługi wielu wyświetlaczy i użytkowników; była to funkcja „cofnij” – cecha, z której van Dam jest najbardziej dumny (van Dam 2011). FRESS jest pionierem jednopoziomowego cofania zarówno dla przetwarzania tekstu, jak i hipertekstu. Każda zmiana w pliku była zapisywana w ukrytej wersji struktury danych, co umożliwiało zarówno automatyczne zapisywanie, jak i cofanie zmian. Pracownicy i studenci Browna natychmiast zrozumieli wagę i użyteczność tej funkcji (van Dam 1999).
  6. ^ Barnet, Belinda (01.01.2010). „Tworzenie interfejsu dokumentu zorientowanego na użytkownika: system edycji hipertekstu (HES) oraz system wyszukiwania i edycji plików (FRESS)” . 4 (1). Cytowanie dziennika wymaga |journal=( pomoc )
  7. ^ Teitelman, Warren (1972-01-01). „Automatyczne programowanie: asystent programisty”. Materiały z 5–7 grudnia 1972, Jesienna Połączona Konferencja Komputerowa, Część II . AFIPS '72 (jesień, część II). Nowy Jork, NY, USA: ACM: 917-921. doi : 10.1145/1480083.1480119 .
  8. ^ "Podręcznik Bravo w Alto Non-Programmers Guide, str. 52" (PDF) . Pobrano 29.03.2014 .
  9. ^ Miller, Lance A .; Thomas, John C. (1977.09.01). „Kwestie behawioralne w korzystaniu z systemów interaktywnych”. 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. (grudzień 1976). „Problemy behawioralne w korzystaniu z systemów interaktywnych” (PDF) . Źródło 2011-05-21 . Cytowanie dziennika wymaga |journal=( pomoc )
  11. ^ B c Ben Zimmer (2009-09-15). „Wiek zagłady” . New York Times . Źródło 2013-06-02 .
  12. ^ Komputer Apple, Inc. (1984). "Interfejs użytkownika". Wewnątrz Macintosh, Tom I .
  13. ^ Roberta Mancini, Alan Dix i Stefano Levialdi. 2006. „Refleksje na temat cofania”
  14. ^ a b c Wzorce projektowe : elementy oprogramowania obiektowego wielokrotnego użytku . Gamma, Erich. Czytanie, Mass.: Addison-Wesley. 1995. ISBN 0201633612. OCLC  31171684 .CS1 maint: inne ( link )

Linki zewnętrzne

  • The Age of Undoing — artykuł o językowej historii Undo w The New York Times Magazine.
  • Kaskadowa kontrola cofania - artykuł skupiający się na tym, co to jest kaskadowe cofanie i jak może być prezentowane użytkownikom