Отменить - Undo

Отменить это метод взаимодействия, который реализован во многих компьютерных программах. Он удаляет последнее изменение, внесенное в документ, и возвращает его к более раннему состоянию. В некоторых более продвинутых программах, таких как графическая обработка, отменить отменяет последнюю команду, выполненную для редактируемого файла. Благодаря возможности отмены пользователи могут исследовать и работать, не опасаясь совершить ошибки, потому что их можно легко отменить.

Ожидания от отмены легко понять: иметь предсказуемую функциональность и включать все "отменяемые" команды.[1] Обычно отменить можно, пока пользователь не отменит все выполненные операции. Но есть некоторые действия, которые не хранятся в списке отмены, и поэтому их нельзя отменить. Например, Сохранить файл нельзя отменить, но стоит в очереди в списке, чтобы показать, что он был выполнен. Другое действие, которое обычно не сохраняется и, следовательно, не может быть отменено, - это прокрутка или же отбор.[2]

Противоположностью отмене является Повторить. Команда повтора отменяет отмену или переводит буфер в более новое состояние.

Общие компоненты функции отмены: команды которые были выполнены пользователем, буфер (ы) истории в котором хранятся выполненные действия, менеджер отмены / повтора для управления буфером истории и пользовательский интерфейс для взаимодействия с пользователем.[3]

В большинстве Майкрософт Виндоус приложений, Сочетание клавиш для команды Отменить Ctrl + Z или Alt + Backspace, а ярлык для Redo - Ctrl + Y или же Ctrl +Сдвиг + Z.

В большинстве Apple Macintosh приложений, ярлык для команды Отменить Команда -Z, а ярлык для Redo - Команда -Сдвиг -З.

На всех платформах к функциям Undo / Redo также можно получить доступ через Меню редактирования.

История

Возможность отмены операции на компьютере была изобретена несколько раз независимо от того, как люди использовали компьютеры.[4]

В Система поиска и редактирования файлов, разработанная с 1968 г. Брауновский университет Сообщается, что это первая компьютерная система, в которой есть функция отмены.[5][6]

Уоррен Тейтельман разработал Помощник программиста как часть BBN-LISP с функцией отмены к 1971 году.[7]

В Xerox PARC Браво В 1974 году в текстовом редакторе была команда Отменить.[8] Отчет об исследовании 1976 г., проведенный Лэнсом А. Миллером и Джоном К. Томасом из IBM, Поведенческие проблемы при использовании интерактивных систем[9], отметил, что «было бы весьма полезно разрешить пользователям« вернуть »по крайней мере непосредственно предыдущую команду (с помощью специальной команды« отменить »)».[10] Программисты на Xerox PARC Исследовательский центр назначил сочетание клавиш Ctrl-Z для команды отмены, которая стала важной функцией текстовых редакторов и текстовых процессоров в персональный компьютер эпоха.[11] В 1980 г. Ларри Теслер Xerox PARC начала работать на Компьютер Apple. Там он и Билл Аткинсон выступал за наличие команды отмены как стандартное приспособление на Яблочная Лиза. Аткинсону удалось убедить отдельных разработчиков прикладного программного обеспечения Lisa включить единый уровень отмены и повтора, но не добился успеха в лоббировании нескольких уровней.[нужна цитата ] Когда Apple представила преемника Lisa, Macintosh, было оговорено, что все стандартные приложения должны включать «Отменить» в качестве первой команды в меню «Правка».[12], который остался стандартом на macOS и Windows и по сей день.

Многоуровневые команды отмены были введены в 1980-х годах, позволяя пользователям возвращать серию действий, а не только самое последнее.[11] EMACS и у других экранных редакторов с разделением времени он был раньше программного обеспечения для персональных компьютеров. CygnusEd был первым текстовым редактором Amiga с неограниченной функцией отмены / повтора. AtariWriter приложение для обработки текстов, представленное в 1982 году, с функцией отмены. NewWord, еще одна программа для обработки текстов, выпущенная NewStar в 1984 году, имела команду удаления.[11] У IBM VisiWord также была команда восстановления удаления.

Отменить и повторить модели

Модели отмены можно разделить на линейные и нелинейные. Нелинейную модель отмены можно подразделить на модель сценария, модель US&R, триадную модель и выборочную отмену.[1]

Некоторые общие свойства моделей:

  • свойство стабильного исполнения: Состояние представлено в виде упорядоченного списка команд. Это означает, что команда «всегда отменяется в состоянии, которое было достигнуто после первоначального выполнения».[3]
  • ослабленное стабильное исполнение: Это означает, что при выполнении отмены все команды, зависящие от отмененной команды, отменяются в зависимости от команды.
  • свойство стабильного результата: Это свойство имеет то же значение, что и стабильное исполнение собственностикроме списка. В упорядоченном списке команд указано, что они были выполнены, а не только команды.
  • коммутативный: Это означает, что достигнутое состояние после отмены и повтора двух разных команд одинаково, когда они выполняются в обратном порядке.
  • минималистичное свойство отмены: Он описывает, что «операция отмены команды C отменяет только команду C и все команды младше C, которые зависят от C.»[3]

Линейная отмена

Линейная отмена осуществляется с помощью куча (структура данных последний пришел - первый ушел (LIFO)), в которой хранится история всех выполненных команд. Когда выполняется новая команда, она добавляется в начало стека. Таким образом, только последнюю выполненную команду можно отменить и удалить из истории. Отменить можно повторить, пока история не пуста.[1]

Ограниченная линейная модель

Ограниченная линейная модель является дополнением линейной модели отмены. Он удовлетворяет описанному выше стабильное исполнение собственности для линейной отмены, поскольку эта модель не сохраняет свойство, если команда выполняется, в то время как список истории включает другие команды. Ограниченная линейная модель очищает список истории перед добавлением новой команды. Но есть и другие ограничения. Например, размер списка истории может быть ограничен или при достижении определенного размера первая выполненная команда удаляется из списка.[1]

Нелинейная отмена

Основное различие между линейной отменой и нелинейной отменой заключается в возможности пользователя отменить выполненные команды в произвольном порядке. У них есть возможность отменить не самую последнюю команду, а выбрать команду из списка.[3] Для нелинейной модели существуют подклассы, реализующие эту модель.

Модель сценария

Модель сценария обрабатывает действия пользователя как редактирование сценария команд. Список истории выполненных команд интерпретируется «как сценарий, эффект отмены определяется как такой же, как если бы отмененное действие никогда не происходило».[1] В результате отмены состояние должно быть таким, как если бы отмененная команда никогда не выполнялась. Недостатком этой модели является то, что пользователь должен знать связь между отмененной командой и текущим состоянием, чтобы избежать побочных эффектов. Одним из них может быть, например, дублирование. Другие проблемы состоят в том, что если «последующие команды переделываются в другом состоянии, в котором они были первоначально выполнены в интерфейсах прямого управления, эта переинтерпретация исходного действия пользователя не всегда очевидна или четко определена».[1]

Модель US&R

Особенностью этой модели является возможность пропуска команды. Это означает, что повторное выполнение команды можно пропустить. Пропущенная команда помечается как пропущенная, но не удаляется. Когда выполняются новые команды, список истории сохраняется, поэтому порядок выполненных команд может быть воспроизведен с этим. Порядок можно описать с помощью дерева истории, которое представляет собой ориентированный граф, «потому что можно продолжить повторять команды из другой ветви, создавая ссылку в графе».[1] Несмотря на то, что набор команд прост и понятен, сложную структуру с пропуском и связыванием ветвей трудно понять и запомнить, когда пользователь хочет отменить более одного шага.[1]

Триадическая модель

Эта нелинейная модель отмены помимо отмены и повтора имеет возможность поворота. Он имеет ту же структуру данных, что и вышеупомянутые модели, со списком истории и отдельным списком повтора, который включает операции повтора. Операция поворота устанавливает перед собой последнюю команду списка повторов. С одной стороны, это означает, что следующую команду, которую нужно выполнить, можно выбрать, поместив ее впереди. С другой стороны, вращение можно использовать «для выбора места в списке повтора, куда следующая операция отмены поместит команду».[1] Таким образом, список повторов неупорядочен. «Чтобы отменить изолированную команду, пользователь должен отменить несколько шагов, повернуть список повторов, а затем повторить несколько шагов».[1] Для повтора список нужно повернуть, пока нужная команда не окажется выше.

Выборочная отмена

Jakubec et al. говорят, что выборочная отмена - это функция, которую может предложить модель, но для выборочной отмены нет четкого определения.[3] Авторы выбрали функции, которые должна иметь модель, если она поддерживает выборочную отмену. Должна быть возможность «отменить любое выполненное действие в буфере истории. Действия, независимые от отменяемого действия, должны оставаться нетронутыми».[3] Точно так же должен быть возможен повтор любой отмененной команды. Третья функция выборочной отмены заключается в том, что «никакая команда не может быть автоматически удалена из буфера истории без прямого запроса пользователя».[3] Для выборочной отмены применяется то, что отмена и повтор выполняются вне любого контекста. Есть три основных вопроса. Во-первых, отмененные команды могут быть вне исходного контекста. Из-за этого могут возникнуть мертвые ссылки, которые необходимо обработать. Вторая проблема заключается в том, что измененные команды можно отменить, и поэтому необходимо решить, какое состояние после отмены будет представлено. Третья проблема - это отказ от командных проблем. Селективная отмена не имеет указателя в списках, поэтому это означает, что ни одна команда не должна быть удалена из стека.[3]

Прямая выборочная отмена

Прямая выборочная отмена - это расширение ограниченной линейной отмены с деревом истории. Операция создает копию выбранной команды, выполняет ее и добавляет в список истории. Определены две нелинейные операции: выборочная отмена и выборочный повтор, поэтому она более симметрична.[1]

Многопользовательское приложение

Когда несколько пользователей могут редактировать один и тот же документ одновременно, требуется отмена для нескольких пользователей. Глобальный многопользовательская отмена отменяет последнее действие, выполненное с документом, независимо от того, кто выполнил редактирование. Местный многопользовательская отмена отменяет только действия, выполненные локальным пользователем, что требует реализации нелинейной отмены.

Если отменить можно использовать для возврата к нескольким изменениям, команда повтора проходит вперед по истории действий. При выполнении нового редактирования список повторов обычно очищается. Если используется модель повторения ветвления, новое редактирование ветви история действий.

Количество предыдущих действий, которые можно отменить, зависит от программы, версии и возможностей оборудования или программного обеспечения. Например, размер стека отмены / повтора по умолчанию в Adobe Photoshop равно 20, но может быть изменено пользователем. Другой пример, ранее[когда? ] версии Microsoft Paint можно отменить только до трех правок; версия, представленная в Windows 7, увеличила этот предел до 50.

Упрощенные функции отмены однократного редактирования иногда избавляются от «повтора», рассматривая саму команду отмены как действие, которое можно отменить. Это известно как модель отмены переворота, поскольку пользователь может переключаться между двумя состояниями программы с помощью команды отмены.[13] Это была стандартная модель до широкого распространения многоуровневой отмены в начале 1990-х годов.

Отменить реализацию

Отменить можно с помощью различных шаблонов. Наиболее распространенные модели: Шаблон команды и Образец сувенира.

Командный шаблон

В шаблон команды это шаблон разработки программного обеспечения который инкапсулирует информацию из операции в командные объекты. Это означает, что каждое действие хранится в объекте. Абстрактный командный класс реализует абстрактную операцию выполнения, поэтому каждый командный объект имеет операцию выполнения. Для отмены также должна быть невыполненная операция, которая отменяет эффект выполненной команды, которая сохраняется в списке истории. Отмена и возврат реализованы таким образом, что список просматривается вперед и назад при вызове команды выполнения или невыполнения.[14]

Для однократной отмены сохраняется только выполненная команда. В отличие от многоуровневой отмены, где сохраняется не только список истории с командами, но также количество уровней отмены может быть определено из максимальной длины списка.[14]

Образец Мементо

С Образец сувенира внутреннее состояние объекта сохраняется. Объект, в котором сохраняется состояние, называется мементо и организован через создателя мементо. Это возвращает памятный знак, инициализированный информацией о текущем состоянии, когда выполняется отмена, так что состояние можно проверить. Памятка видна только создателю.

В образце памятного подарка механизм отмены называется хранителем. Он несет ответственность за сохранность сувениров, но никогда не изменяет их содержимое. Для отмены смотритель запрашивает память об создателе и затем применяет отмену.[14]

Большая часть механизма отмены может быть реализована независимо от конкретных приложений или классов команд. Это включает в себя «управление списком истории, прокруткой истории, записями меню для отмены и повтора, а также обновление записей меню в зависимости от имени следующей доступной команды».[1]

В каждом классе команд есть метод do, который вызывается при выполнении команды. Отменить-метод реализует обратную операцию do-метода. Чтобы реализовать обратное, существует несколько различных стратегий.

  • полный КПП: Это означает, что полное состояние сохраняется после выполнения команды. Это простейшая реализация, но она не очень эффективна и поэтому используется нечасто.
  • полный повтор: Таким образом, начальное состояние сохраняется, и в каждое состояние в списке истории можно попасть, «начиная с начального состояния и повторяя все команды с начала истории».[1]
  • частичный контрольно-пропускной пункт: Это наиболее используемая стратегия. Измененное состояние приложения сохраняется, и при отмене часть состояния возвращается к прямому значению.
  • обратная функция: Обратной функции не требуется сохраненная информация о состоянии. «Например, перемещение можно обратить, переместив объект на относительную величину».[1] Для выборочной отмены недостаточно информации для сохранения состояния.

Смотрите также

Рекомендации

  1. ^ а б c d е ж грамм час я j k л м п Берлаге, Томас (1994-09-01). «Механизм выборочной отмены для графических пользовательских интерфейсов на основе командных объектов». Транзакции ACM о взаимодействии компьютера и человека. 1 (3): 269–294. Дои:10.1145/196699.196721. ISSN  1073-0516.
  2. ^ Майерс, Брэд А.; Косби, Дэвид С. (1996-04-13). Многоразовые иерархические командные объекты. ACM. стр.260–267. Дои:10.1145/238386.238526. ISBN  0897917774.
  3. ^ а б c d е ж грамм час Якубец, Карел; Полак, Марек; Нечаски, Мартин; Голубова, Ирена (2014). «Отменить / повторить операции в сложных средах». Процедуры информатики. 32: 561–570. Дои:10.1016 / j.procs.2014.05.461. ISSN  1877-0509.
  4. ^ Моран, Чуктрополис Веллинг (01.01.2013). Интерактивное время (Кандидат наук.). Ла-Хойя: Калифорнийский университет в Сан-Диего. ISBN  9781303194450.
  5. ^ Барнет, Белинда (01.12.2014). Машины памяти: эволюция гипертекста. Anthem Press. п. 108. ISBN  9781783083442. Но самой популярной разработкой для начинающих пользователей FRESS была не способность размещать несколько дисплеев и пользователей; это была особенность «отмены» - особенность, которой ван Дам гордится больше всего (van Dam 2011). FRESS впервые применил одноуровневую отмену как для обработки текста, так и для гипертекста. Каждое изменение файла сохранялось в теневой версии структуры данных, что позволяло как «автосохранение», так и отмену. Сотрудники и студенты Брауна сразу поняли важность и полезность этой функции (van Dam 1999).
  6. ^ Барнет, Белинда (01.01.2010). «Создание ориентированного на пользователя интерфейса документа: система редактирования гипертекста (HES) и система поиска и редактирования файлов (FRESS)». 4 (1). Цитировать журнал требует | журнал = (помощь)
  7. ^ Тейтельман, Уоррен (1972-01-01). «Автоматизированное программирование: помощник программиста». Труды осенней совместной компьютерной конференции 5–7 декабря 1972 г., часть II. AFIPS '72 (осень, часть II). Нью-Йорк, Нью-Йорк, США: ACM: 917–921. Дои:10.1145/1480083.1480119.
  8. ^ "Руководство Bravo в Руководстве для непрограммистов Alto, стр. 52" (PDF). Получено 2014-03-29.
  9. ^ Miller, Lance A .; Томас, Джон К. (1977-09-01). «Поведенческие проблемы при использовании интерактивных систем». Международный журнал человеко-машинных исследований. 9 (5): 509–536. Дои:10.1016 / S0020-7373 (77) 80002-3. ISSN  0020-7373.
  10. ^ Miller, Lance A .; Джон С. Томас младший (декабрь 1976 г.). «Поведенческие проблемы при использовании интерактивных систем» (PDF). Получено 2011-05-21. Цитировать журнал требует | журнал = (помощь)
  11. ^ а б c Бен Циммер (15 сентября 2009 г.). «Эпоха отмены». Нью-Йорк Таймс. Получено 2013-06-02.
  12. ^ Apple Computer, Inc. (1984). "Пользовательский интерфейс". Внутри Macintosh, том I.
  13. ^ Роберта Манчини, Алан Дикс и Стефано Левиальди. 2006 г. «Размышления об отмене»
  14. ^ а б c Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования. Гамма, Эрих. Ридинг, Массачусетс: Эддисон-Уэсли. 1995 г. ISBN  0201633612. OCLC  31171684.CS1 maint: другие (связь)

внешняя ссылка