Supongamos que en realizamos algunas sustituciones: en lugar de una base de datos
tenemos un programa
, en lugar de una vista
tenemos un slice
, y en lugar de hablar
de consulta
nos referimos a un criterio de slicing
. Realizando estas sustituciones el
diagrama se reescribe como sigue
Por lo tanto, hay una correspondencia exacta entre los elementos que intervienen en el problema
de la actualizaci'on de vistas en el contexto de las bases de datos, con los elementos que intervienen
en el contexto de las t'ecnicas de slicing [#!We81!#].
Las t'ecnicas de slicing permiten enfocar la atenci'on sobre aspectos espec'ificos de la sem'antica
de un programa, eliminando aquellas partes que no afectan la sem'antica de inter'es. El conjunto de sentencias
involucradas con la sem'antica de inter'es se denomina slice. Una de los formatos m'as usuales que
se adopta para especificar un criterio de slicing es mediante un par: (n'umero de sentencia, variable).
Es decir, informalmente, el slice responde la pregunta: cuales son las sentencias que potencialmente afectan
a la variable en la sentencia
?
Originalmente, el prop'osito del c'alculo y extracci'on de slices, era facilitar la detecci'on y
correcci'on de errores, haciendo que la atenci'on del programador se focalice solo en las sentencias
relevantes. Sin embargo, m'ultiples han sido los usos posteriores que los slices han tenido, as'i como
tambi'en, diversos han sido los m'etodos que se han desarrollado para calcularlos, y que han dado origen
a distintos tipos de slices.
Si bien son muy diversas las tareas de manipulaci'on de slices, una posible forma de clasificar las
mismas es, seg'un conserven o no la sem'antica original.
As'i, por ejemplo, durante actividades de re-ingenier'ia, podemos usar slicing para
reesctructurar partes de un componente de software para mejorar su entendimento.
Es decir, la tarea requiere conservar la sem'antica de el/los slice/s manipulados, y del componente.
O bien, por cambios en los requerimientos, podemos modificar la sem'antica de un componente mediante
t'ecnicas de slicing que focalicen la atenci'on del programador en la funcionalidad relacionada
con los requerimientos. Es decir, la tarea requiere alterar la sem'antica de el/los slice/s, y del
componente.
En cualquier caso, tanto la reestructuraci'on de slices manteniendo la sem'antica, como la modificaci'on de
slices para cambiar la misma, constituyen ejemplos generales de transformaciones en
.
Por otro lado, las actividades de modificaci'on sint'actica o sem'antica de los slices est'an
dirigidas por restricciones que determinan si tales modificaciones se ajustan o no, a los objetivos
perseguidos por el programador. Es decir, es necesario dise nar tales restricciones y luego
probar que las mismas se cumplen. Esto se corresponde con las transformaciones en
,
ya que estas representan los ajustes sobre
, que reflejan las transformaciones
realizadas sobre
.
El problema principal a resolver en el contexto de las lenses aplicadas a cualquier dominio, es reducir la tensi'on entre el
poder expresivo de las transformaciones , con la robustez suministrada por las transformaciones
. Esto se produce debido a que cuando m'as rico es el conjunto de transformaciones
, m'as
complejo se vuelve el dise no de las transformaciones
.
Para disminuir esta tensi'on, se debe dise nar un enfoque adecuado para el problema de actualizaci'on de vistas
orientado hacia un dominio espec'ifico [#!Focal2005-long!#].
En particular, el dominio de la aplicaci'on de slices en re-ingenier'ia de software es muy amplio, y
abarca todas las t'ecnicas de manipulaci'on de c'odigo fuente conocidas, ya sea que conserven o
modifiquen la sem'antica. En consecuencia, el dise no de un lenguaje bidireccional con una sem'antica
s'olida, capaz de describir transformaciones para la manipulaci'on de slices, parece no ser una tarea
trivial.