stringtranslate.com

Deshacer

Deshacer es una técnica de interacción que se implementa en muchos programas informáticos. Borra el último cambio realizado en el documento y lo devuelve a un estado anterior. En algunos programas más avanzados, como el procesamiento gráfico , deshacer anulará el último comando realizado en el archivo que se está editando. Con la posibilidad de deshacer, los usuarios pueden explorar y trabajar sin temor a cometer errores, porque se pueden deshacer fácilmente.

Las expectativas para deshacer son fáciles de entender: tener una funcionalidad predecible e incluir todos los comandos "deshaceres". [1] Por lo general, deshacer está disponible hasta que el usuario deshaga todas las operaciones ejecutadas. Pero hay algunas acciones que no se almacenan en la lista de deshacer y, por lo tanto, no se pueden deshacer. Por ejemplo, guardar el archivo no se puede deshacer, pero se pone en cola en la lista para mostrar que se ejecutó. Otra acción que normalmente no se almacena y, por tanto, no se puede deshacer, es el desplazamiento o la selección . [2]

Lo opuesto a deshacer es rehacer . El comando rehacer invierte la operación de deshacer o avanza el búfer a un estado más reciente.

Los componentes comunes de la funcionalidad de deshacer son los comandos que ejecutó el usuario, el búfer de historial que almacena las acciones completadas, el administrador de deshacer/rehacer para controlar el búfer de historial y la interfaz de usuario para interactuar con el usuario. [3]

En la mayoría de las aplicaciones de Microsoft Windows , el método abreviado de teclado para el comando deshacer es Ctrl+Z o Alt+Retroceso, y el método abreviado para rehacer es Ctrl+Y o Ctrl + Shift +Z.

En la mayoría de las aplicaciones de Apple Macintosh , el atajo para el comando deshacer es Comando -Z y el atajo para rehacer es Comando - Mayús -Z.

En todas las plataformas, también se puede acceder a las funciones deshacer/rehacer a través del menú Editar .

Historia

La capacidad de deshacer una operación en una computadora se inventó de forma independiente varias veces, en respuesta a la forma en que la gente usaba las computadoras. [4]

Se informa que el sistema de edición y recuperación de archivos , desarrollado a partir de 1968 en la Universidad de Brown , es el primer sistema informático que tuvo una función de "deshacer". [5] [6]

Warren Teitelman desarrolló un asistente del programador como parte de BBN-LISP con una función Deshacer, en 1971. [7]

El editor de texto Xerox PARC Bravo tenía un comando Deshacer en 1974. [8] Un informe de investigación de 1976 realizado por Lance A. Miller y John C. Thomas de IBM , Behavioral Issues in the Use of Interactive Systems , [9] señaló que "no Sería muy útil permitir a los usuarios 'recuperar' al menos el comando inmediatamente anterior (emitiendo algún comando especial 'deshacer')." [10] Los programadores del centro de investigación Xerox PARC asignaron el método abreviado de teclado Ctrl-Z al comando deshacer, que se convirtió en una característica crucial de los editores y procesadores de texto en la era de las computadoras personales . [11] En 1980, Larry Tesler de Xerox PARC comenzó a trabajar en Apple Computer . Allí, él y Bill Atkinson abogaron por la presencia de un comando de deshacer como elemento estándar en el Apple Lisa . Atkinson pudo convencer a los desarrolladores individuales del software de aplicación de Lisa para que incluyeran un único nivel de deshacer y rehacer, pero no logró presionar para lograr múltiples niveles. [ cita necesaria ] Cuando Apple presentó el sucesor de Lisa, el Macintosh , estipuló que todas las aplicaciones estándar debían incluir "Deshacer" como primer comando en el menú "Editar", [12] que sigue siendo el estándar en macOS y Windows hasta este día.

Los comandos de deshacer de varios niveles se introdujeron en la década de 1980, lo que permitía a los usuarios cancelar una serie de acciones, no sólo la más reciente. [11] EMACS y otros editores de pantalla de tiempo compartido lo tenían antes que el software de computadora personal. CygnusEd fue el primer editor de texto de Amiga con una función ilimitada de deshacer/rehacer. AtariWriter , una aplicación de procesamiento de texto introducida en 1982, incluía deshacer. NewWord, otro programa de procesamiento de textos lanzado por NewStar en 1984, tenía un comando para recuperar el contenido. [11] VisiWord de IBM también tenía un comando de recuperación.

Deshacer y rehacer modelos

Los modelos de deshacer se pueden clasificar como lineales o no lineales. El modelo de deshacer no lineal se puede subclasificar en modelo de script, modelo us&r, modelo triádico y deshacer selectivo. [1]

Algunas propiedades comunes de los modelos son:

Deshacer lineal

La deshacer lineal se implementa con una pila (estructura de datos último en entrar, primero en salir (LIFO)) que almacena un historial de todos los comandos ejecutados. Cuando se ejecuta un nuevo comando, se agrega a la parte superior de la pila. Por lo tanto, sólo se puede deshacer y eliminar del historial el último comando ejecutado. Deshacer se puede repetir siempre que el historial no esté vacío. [1]

Modelo lineal restringido

El modelo lineal restringido es un aumento del modelo lineal de deshacer. Satisface la propiedad de ejecución estable descrita anteriormente para deshacer lineal, porque este modelo no mantiene la propiedad si se ejecuta un comando mientras la lista del historial incluye otros comandos. El modelo lineal restringido borra la lista del historial antes de agregar un nuevo comando. Pero también existen otras restricciones. Por ejemplo, se puede restringir el tamaño de la lista del historial o, cuando se alcanza un tamaño definido, el primer comando ejecutado se elimina de la lista. [1]

Deshacer no lineal

La principal diferencia entre deshacer lineal y deshacer no lineal es la posibilidad del usuario de deshacer los comandos ejecutados en un orden arbitrario. Tienen la posibilidad de deshacer no el comando más reciente sino elegir un comando de la lista. [3] Para el modelo no lineal, existen subclases que implementan este modelo.

Modelo de guión

El modelo de script maneja las acciones del usuario como editar un script de comandos. La lista histórica de los comandos ejecutados se interpreta "como un script, el efecto de deshacer se define como el mismo que si la acción deshacer nunca hubiera ocurrido en primer lugar". [1] Como resultado de deshacer, el estado debe ser como si el comando deshacer nunca se hubiera ejecutado. Una desventaja de este modelo es que el usuario debe conocer la conexión entre el comando deshecho y el estado actual para evitar efectos secundarios. Uno de estos puede ser, por ejemplo, la duplicación. Otros problemas son que si "los comandos posteriores se rehacen en un estado diferente al que se ejecutaron originalmente en interfaces de manipulación directa, esta reinterpretación de la acción original del usuario no siempre es obvia o está bien definida". [1]

Modelo EE.UU. y R

La particularidad de este modelo es que tiene la opción de saltarse un comando. Esto significa que se puede omitir rehacer un comando. El comando que se omite se marca como omitido pero no se elimina. Cuando se ejecutan nuevos comandos, la lista del historial se conserva, por lo que el orden de los comandos ejecutados se puede reproducir con eso. El orden se puede describir a través de un árbol histórico que es un gráfico dirigido, "porque es posible seguir rehaciendo comandos desde otra rama creando un enlace en el gráfico". [1] Aunque el conjunto de comandos es simple y fácil de entender, la compleja estructura con saltos y vinculaciones de ramas es difícil de comprender y recordar cuando el usuario quiere deshacer más de un paso. [1]

modelo triádico

Este modelo de deshacer no lineal tiene además la posibilidad de deshacer y rehacer de rotar. Tiene la misma estructura de datos que los modelos mencionados anteriormente con una lista histórica y una lista de rehacer separada que incluye las operaciones de rehacer. La operación de rotación establece el último comando de la lista de rehacer delante de ella. Por un lado, esto significa que el siguiente comando a rehacer se puede seleccionar colocándolo al frente. Por otro lado, la rotación se puede utilizar "para seleccionar el lugar en la lista de rehacer donde la siguiente operación de deshacer pondrá el comando". [1] Por lo tanto, la lista de rehacer está desordenada. "Para deshacer un comando aislado, el usuario debe deshacer una serie de pasos, rotar la lista de rehacer y luego rehacer una serie de pasos". [1] Para rehacer, la lista debe rotarse hasta que el comando deseado esté arriba.

Deshacer selectivo

Jakubec et al. Decimos que el deshacer selectivo es una característica que un modelo puede ofrecer, pero para el deshacer selectivo no existe una definición clara. [3] Los autores seleccionaron funciones que debería tener un modelo cuando admite deshacer selectivo. Debería ser posible "deshacer cualquier acción ejecutada en el búfer del historial. Las acciones independientes de la acción que se está deshaciendo deben dejarse intactas". [3] Así como rehacer tiene que ser posible para cualquier comando deshecho. La tercera función para deshacer selectivamente es que "ningún comando puede descartarse automáticamente del búfer del historial sin la solicitud directa del usuario". [3] Para deshacer selectivamente se aplica que deshacer y rehacer es ejecutable fuera de cualquier contexto. Hay tres cuestiones principales. La primera es que los comandos deshechos pueden estar fuera del contexto original. A través de esto pueden haber referencias muertas que deben ser manejadas. El segundo problema es que los comandos modificados se pueden deshacer, por lo que hay que resolver qué estado se presentará después de deshacer. La tercera cuestión es descartar los problemas de mando. El deshacer selectivo no tiene ningún puntero en las listas, por lo que esto significa que ningún comando debe descartarse de la pila. [3]

Deshacer selectivo directo

El deshacer selectivo directo es una extensión del deshacer lineal restringido con un árbol histórico. La operación crea una copia del comando seleccionado, lo ejecuta y lo agrega a la lista del historial. Allí se definen dos operaciones no lineales de deshacer selectivo y rehacer selectivo, por lo que es más simétrica. [1]

Aplicación multiusuario

Cuando varios usuarios pueden editar el mismo documento simultáneamente, es necesario deshacerlo entre varios usuarios. La deshacer global multiusuario revierte la última acción realizada en el documento, independientemente de quién realizó la edición. La deshacer local multiusuario solo revierte las acciones realizadas por el usuario local, lo que requiere una implementación de deshacer no lineal.

Mientras que deshacer se puede utilizar para retroceder en varias ediciones, el comando rehacer avanza a través del historial de acciones. Generalmente, realizar una nueva edición borra la lista de rehacer. Si se utiliza un modelo de rehacer de ramificación, la nueva edición ramifica el historial de acciones.

La cantidad de acciones anteriores que se pueden deshacer varía según el programa, la versión y las capacidades del hardware o software. Por ejemplo, el tamaño de pila predeterminado para deshacer/rehacer en Adobe Photoshop es 20, pero el usuario puede cambiarlo. Como otro ejemplo, antes [ ¿cuándo? ] Las versiones de Microsoft Paint solo permitían deshacer hasta tres ediciones; la versión introducida en Windows 7 aumentó este límite a 50.

Las funciones simplistas de deshacer de edición única a veces eliminan "rehacer" al tratar el comando de deshacer en sí como una acción que se puede deshacer. Esto se conoce como modelo de deshacer, porque el usuario puede alternar entre dos estados del programa usando el comando deshacer. [13] Este era el modelo estándar antes de la adopción generalizada de deshacer en múltiples niveles a principios de la década de 1990.

Deshacer implementación

Deshacer se puede implementar mediante diferentes patrones. Los patrones más comunes son el patrón de comando y el patrón de recuerdo .

Patrón de comando

El patrón de comando es un patrón de diseño de software que encapsula información de la operación en objetos de comando. Esto significa que cada acción se almacena en un objeto. La clase de comando abstracto implementa una operación de ejecución abstracta, por lo que cada objeto de comando tiene una operación de ejecución. Para deshacer también debe haber una operación no ejecutada, que deshaga el efecto del comando ejecutado, que se almacena en una lista del historial. Deshacer y rehacer se implementan para que la lista se ejecute hacia adelante y hacia atrás cuando se llama al comando de ejecución o desejecución. [14]

Para deshacer solo se almacena el comando ejecutado. A diferencia del deshacer de varios niveles, donde no sólo se guarda la lista del historial con los comandos sino que también se puede determinar el número de niveles de deshacer de la longitud máxima de la lista. [14]

Patrón de recuerdo

Con el patrón de recuerdo se almacena el estado interno de un objeto. El objeto en el que se guarda el estado se llama memento y se organiza a través del creador del memento. Esto devuelve un recuerdo, inicializado con información del estado actual, cuando se ejecuta deshacer, para que se pueda verificar el estado. El recuerdo sólo es visible para el autor.

En el patrón de recuerdo, el mecanismo de deshacer se llama cuidador. Es responsable de la custodia de los recuerdos pero nunca cambiará el contenido de estos. Para deshacer, el cuidador solicita un recuerdo del autor y luego aplica la deshacer. [14]

La mayor parte del mecanismo de deshacer se puede implementar sin dependencia de aplicaciones o clases de comando específicas. Esto incluye "la gestión de la lista del historial, el desplazamiento del historial, las entradas del menú para deshacer y rehacer y la actualización de las entradas del menú según el nombre del siguiente comando disponible". [1]

Cada clase de comando tiene un método do que se llama cuando se ejecuta un comando. El método deshacer implementa la operación inversa del método hacer. Para implementar lo contrario, existen varias estrategias diferentes.

Ver también

Referencias

  1. ^ abcdefghijklmn Berlage, Thomas (1 de septiembre de 1994). "Un mecanismo de deshacer selectivo para interfaces gráficas de usuario basadas en objetos de comando". Transacciones ACM sobre la interacción computadora-humano . 1 (3): 269–294. doi :10.1145/196699.196721. ISSN  1073-0516. S2CID  11848679.
  2. ^ Myers, Brad A.; Kosbie, David S. (13 de abril de 1996). "Objetos de comando jerárquicos reutilizables". Actas de la conferencia SIGCHI sobre factores humanos en el terreno común de los sistemas informáticos: CHI '96 . ACM. págs. 260–267. doi :10.1145/238386.238526. ISBN 0897917774. S2CID  17033810.
  3. ^ abcdefgh Jakubec, Karel; Polák, Marek; Nečaský, Martín; Holubová, Irena (2014). "Deshacer/Rehacer operaciones en entornos complejos". Procedia Ciencias de la Computación . 32 : 561–570. doi : 10.1016/j.procs.2014.05.461 . ISSN  1877-0509.
  4. ^ Moran, Chuktropolis Welling (1 de enero de 2013). Tiempo interactivo (Doctor.). La Jolla: Universidad de California, San Diego. ISBN 9781303194450. Archivado desde el original el 28 de abril de 2021 . Consultado el 7 de julio de 2016 .
  5. ^ Barnet, Belinda (1 de diciembre de 2014). Máquinas de memoria: la evolución del hipertexto. Prensa del himno. pag. 108.ISBN 9781783083442. Pero el desarrollo más popular entre los usuarios novatos de FRESS no fue su capacidad para acomodar múltiples pantallas y usuarios; era la función 'deshacer', la característica de la que van Dam está más orgulloso (van Dam 2011). FRESS fue pionero en deshacer un solo nivel tanto para procesamiento de textos como para hipertexto. Cada edición de un archivo se guardaba en una versión oculta de la estructura de datos, lo que permitía tanto un "guardado automático" como un deshacer. El personal y los estudiantes de Brown comprendieron inmediatamente la importancia y utilidad de esta característica (van Dam 1999).
  6. ^ Barnet, Belinda (1 de enero de 2010). "Elaboración de la interfaz de documentos centrada en el usuario: el sistema de edición de hipertexto (HES) y el sistema de edición y recuperación de archivos (FRESS)". Humanidades Digitales Trimestrales . 4 (1). Archivado desde el original el 1 de mayo de 2021 . Consultado el 27 de mayo de 2016 .
  7. ^ Teitelman, Warren (1 de enero de 1972). "Programación automatizada: el asistente del programador". Actas de la conferencia informática conjunta de otoño del 5 al 7 de diciembre de 1972, Parte II sobre - AFIPS '72 (Otoño, parte II) . Nueva York, NY, Estados Unidos: ACM. págs. 917–921. doi :10.1145/1480083.1480119. S2CID  1276566.
  8. ^ "Manual Bravo en la Guía para no programadores de Alto, p. 52" (PDF) . Archivado (PDF) desde el original el 5 de mayo de 2015 . Consultado el 29 de marzo de 2014 .
  9. ^ Molinero, lanza A.; Thomas, John C. (1 de septiembre de 1977). "Problemas de comportamiento en el uso de sistemas interactivos". Revista Internacional de Estudios Hombre-Máquina . 9 (5): 509–536. doi :10.1016/S0020-7373(77)80002-3. ISSN  0020-7373.
  10. ^ Molinero, lanza A.; John C. Thomas Jr. (diciembre de 1976). "Problemas de comportamiento en el uso de sistemas interactivos". Archivado desde el original (PDF) el 27 de mayo de 2012 . Consultado el 21 de mayo de 2011 .
  11. ^ abc Ben Zimmer (15 de septiembre de 2009). "La era de la deshacer". New York Times . Archivado desde el original el 17 de junio de 2013 . Consultado el 2 de junio de 2013 .
  12. ^ Apple Computer, Inc. (1984). "Interfaz de usuario". Dentro de Macintosh, Volumen I.
  13. ^ Roberta Mancini, Alan Dix y Stefano Levialdi. 2006. “Reflexiones sobre Deshacer”
  14. ^ abc Patrones de diseño: elementos de software orientado a objetos reutilizable . Gama, Erich. Lectura, Massachusetts: Addison-Wesley. 1995.ISBN 0201633612. OCLC  31171684.{{cite book}}: CS1 maint: others (link)

enlaces externos