implementando funciones undo

20
Implementando funciones Implementando funciones “undo” “undo” Complemento SSD4 Complemento SSD4

Upload: uvm

Post on 12-Jul-2015

423 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Implementando Funciones Undo

Implementando funciones Implementando funciones “undo”“undo”

Complemento SSD4Complemento SSD4

Page 2: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 22

Funciones “undo”Funciones “undo”

El estado del sistema computacional, se El estado del sistema computacional, se caracteriza generalmente por una serie de caracteriza generalmente por una serie de valores que se almacenan en diferentes valores que se almacenan en diferentes localidades de memoria. Igualmente, el localidades de memoria. Igualmente, el estado del programa se caracteriza por la estado del programa se caracteriza por la serie de valores que se almacenan (o serie de valores que se almacenan (o acceden a las referencias almacenadas) acceden a las referencias almacenadas) en sus variables. en sus variables.

Page 3: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 33

Funciones “undo”Funciones “undo”

Así pues, se puede decir que la mayor Así pues, se puede decir que la mayor parte del trabajo de undo es almacenar parte del trabajo de undo es almacenar los valores anteriores de varias variables los valores anteriores de varias variables cuando cambien y así poder regresar cuando cambien y así poder regresar esos valores cuando se ejecute la función esos valores cuando se ejecute la función de undo. de undo.

Page 4: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 44

Funciones “undo”Funciones “undo”

Una implementación típica de la función Una implementación típica de la función de undo, comienza registrando cuales son de undo, comienza registrando cuales son las variables que han cambiado y sus las variables que han cambiado y sus valores anteriores (para que los valores valores anteriores (para que los valores anteriores se restauren cuando se anteriores se restauren cuando se solicite). solicite).

Page 5: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 55

Funciones “undo”Funciones “undo”

Este registro se guarda en una estructura Este registro se guarda en una estructura de pila, asegurando así que los últimos de pila, asegurando así que los últimos valores que se guarden sean los primeros valores que se guarden sean los primeros en restaurarse. El límite del tamaño de la en restaurarse. El límite del tamaño de la pila determina el número de funciones pila determina el número de funciones undo que se pueden realizar.undo que se pueden realizar.

Page 6: Implementando Funciones Undo

Mtl Lourdes Cahuich 6

Page 7: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 77

Un Sistema Undo SimplificadoUn Sistema Undo Simplificado

El método reportChange puede usarse El método reportChange puede usarse para reportar cualquier cambio que se para reportar cualquier cambio que se hace en el sistema.hace en el sistema.

Este reporte aparece junto a un objeto Este reporte aparece junto a un objeto responsable de revertir el cambio, un responsable de revertir el cambio, un identificador que puede usar el objeto identificador que puede usar el objeto para determinar lo que cambió, y un para determinar lo que cambió, y un registro del valor anterior. registro del valor anterior.

Page 8: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 88

Un Sistema Undo SimplificadoUn Sistema Undo Simplificado

El método reportChange simplemente se El método reportChange simplemente se encarga de agregar esta información a la encarga de agregar esta información a la pila interna de undo. Cuando se efectúa pila interna de undo. Cuando se efectúa un undo, se extrae el último valor un undo, se extrae el último valor guardado de la pila. guardado de la pila.

Al objeto responsable se le pide entonces Al objeto responsable se le pide entonces que revierta este cambio (utilizando el que revierta este cambio (utilizando el método putBackValue). método putBackValue).

Page 9: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 99

Un Sistema Undo SimplificadoUn Sistema Undo Simplificado

Esta estructura implementa una función Esta estructura implementa una función undo básica independiente de los detalles undo básica independiente de los detalles precisos de los objetos en sí y de su precisos de los objetos en sí y de su estructura. Esos detalles se encuentran estructura. Esos detalles se encuentran en la interfaz Reversible.en la interfaz Reversible.

Page 10: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 1010

Un Sistema Undo SimplificadoUn Sistema Undo Simplificado

Mientras que varias partes del sistema Mientras que varias partes del sistema implementen la interfaz de manera implementen la interfaz de manera adecuada y manden llamar a la función adecuada y manden llamar a la función reportChange(), las acciones pueden reportChange(), las acciones pueden cancelar usando el sistema undocancelar usando el sistema undo

Page 11: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 1111

Un Sistema Undo Con Más Un Sistema Undo Con Más CapacidadesCapacidades

Para incluir la integridad de la función Para incluir la integridad de la función undo que espera el usuario, es necesario undo que espera el usuario, es necesario grabar explícitamente la secuencia de las grabar explícitamente la secuencia de las acciones internas que están asociadas acciones internas que están asociadas con cada acción de usuario.con cada acción de usuario.

Page 12: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 1212

Un Sistema Undo Con Más Un Sistema Undo Con Más CapacidadesCapacidades

Para esto, puedes usar "apuntadores" en Para esto, puedes usar "apuntadores" en la pila de undo que indiquen el principio y la pila de undo que indiquen el principio y fin de las acciones del usuario. Esto se fin de las acciones del usuario. Esto se puede implementa como se muestra a puede implementa como se muestra a continuación: continuación:

Page 13: Implementando Funciones Undo

Mtl Lourdes Cahuich 13

Page 14: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 1414

Un Sistema Undo CompletoUn Sistema Undo Completo

Una aportación final importante para Una aportación final importante para nuestro sistema undo es la capacidad de nuestro sistema undo es la capacidad de redoredo. .

Tal como el usuario puede cambiar su Tal como el usuario puede cambiar su opinión acerca de una acción, es probable opinión acerca de una acción, es probable que también cambie de opinión sobre la que también cambie de opinión sobre la cancelación misma. cancelación misma.

Page 15: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 1515

Un Sistema Undo CompletoUn Sistema Undo Completo

Si el usuario no cuenta con la opción de Si el usuario no cuenta con la opción de "deshacer una cancelación" (redo), "deshacer una cancelación" (redo), entonces la función undo misma entonces la función undo misma representa una operación peligrosa representa una operación peligrosa (debido a que sus efectos no se pueden (debido a que sus efectos no se pueden cancelar), perdiéndose así muchos de los cancelar), perdiéndose así muchos de los beneficios de la función. beneficios de la función.

Page 16: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 1616

Un Sistema Undo CompletoUn Sistema Undo Completo

Para incluir la función redo, es necesario Para incluir la función redo, es necesario guardar los valores que se remplazaron guardar los valores que se remplazaron cuando se realizó la función undo para cuando se realizó la función undo para que dichos valores puedan restaurarse. que dichos valores puedan restaurarse.

Este proceso es muy parecido al proceso Este proceso es muy parecido al proceso de guardar los valores ya actualizados de guardar los valores ya actualizados para el redo. para el redo.

Page 17: Implementando Funciones Undo

Mtl Lourdes Cahuich 17

Page 18: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 1818

Métodos accessorMétodos accessor

Al utilizar los métodos accessor (set y get) para Al utilizar los métodos accessor (set y get) para los accesos a variables, la implementación del los accesos a variables, la implementación del sistema undo se puede simplificar en gran sistema undo se puede simplificar en gran medida. medida.

Particularmente, las llamadas para registro (las Particularmente, las llamadas para registro (las llamadas a reportChange ) se pueden incrustar llamadas a reportChange ) se pueden incrustar dentro del accessor write (el método set). Así, dentro del accessor write (el método set). Así, los reportes se encuentran localizados en un los reportes se encuentran localizados en un solo lugar, por lo cual no es necesario que se solo lugar, por lo cual no es necesario que se repitan y no así no se olvidan. repitan y no así no se olvidan.

Page 19: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 1919

Métodos accessorMétodos accessor

Por último, observa que los objetos Por último, observa que los objetos reverserreverser deben ser capaces de modificar las variables deben ser capaces de modificar las variables directamente sin usar el método set normal. directamente sin usar el método set normal.

Esto es debido que el método set mandaría Esto es debido que el método set mandaría llamar a reportChange. llamar a reportChange.

Sin embargo, no debe ocurrir esto mientras se Sin embargo, no debe ocurrir esto mientras se restablece un valor porque se generaría un ciclo restablece un valor porque se generaría un ciclo infinito (para cada valor, undo agregará otro infinito (para cada valor, undo agregará otro registro de cambio en la pila de undo). registro de cambio en la pila de undo).

Page 20: Implementando Funciones Undo

Mtl Lourdes CahuichMtl Lourdes Cahuich 2020

Métodos accessorMétodos accessor

Para arreglar esto, típicamente incluimos el Para arreglar esto, típicamente incluimos el método método restorerestore a los métodos accessor. a los métodos accessor.

Así pues, para cada variable v, tendremos los Así pues, para cada variable v, tendremos los métodos setV(), getV(), and restoreV()—donde métodos setV(), getV(), and restoreV()—donde el método restore se encargará de determinar el el método restore se encargará de determinar el valor de la variable y no se requerirá ningún valor de la variable y no se requerirá ningún reporte adicional para actualizar los valores reporte adicional para actualizar los valores relacionados (debido a que cada uno se hará relacionados (debido a que cada uno se hará por separado). por separado).