ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Transparencia Referencial


Enviado por   •  17 de Septiembre de 2014  •  865 Palabras (4 Páginas)  •  264 Visitas

Página 1 de 4

TRANSPARENCIA REFERENCIAL

Hay transparencia referencial si al reemplazar una operación por su resultado se logra el mismo efecto. Una definición alternativa dice: Hay transparencia referencial cuando al realizar una operación con los mismos valores siempre da el mismo resultado. Si bien esta parece más fácil de entender, no es tan precisa como la primera; puede ser útil para dar los primeros pasos, pero para el final hay que terminar de entender la otra.

También se puede pensar en las propiedades necesarias para tener Transparencia Referencial.

Decimos que una operación tiene transparencia referencial si es:

 Independiente: No dependen del estado de nada que este fuera de si misma

 Sin estado/Stateless: No tiene un estado que se mantenga de llamada en llamada

 Determinística: Siempre devuelven el mismo valor dados los mismos argumentos

Ejemplos

Cuando hablamos de que "algo" tiene transparencia referencial, efecto de lado o asignación destructiva, ese "algo" es la realización de una operación, de un lenguaje en particular o de un paradigma.

Estos tres conceptos suelen ir de la mano y si bien pueden darse relaciones entre ellas es saludable poder detectar la aparición de cada uno de ellos individualmente. Una relación que surge de la definición de transparencia referencial es que para ésta se dé, no puede haber efecto colateral, ya que si el estado del sistema se modifica, no es lo mismo ejecutar esa operación que reemplazar por el resultado.

A continuación mostramos algunos ejemplos en Smalltalk, ya que permite la aparición de todas estas características, para dejar más en claro de qué manera podemos identificarlas.

Ejemplo 1: consulta no determinística

Date today

 Transparencia Referencial: NO (Con cualquiera de las 2 definiciones de transparencia referencial)

 Efecto de Lado: NO

 Asignación Destructiva: NO

Evaluarlo con los mismos parámetros (o sea ninguno) en días distintos va a dar resultados distintos. Reemplazar la operación por el resultado una vez que cambia el día se rompe todo. Asignación destructiva y efecto de lado hay, pero en la CPU que actualiza la variable que indica el tiempo, no en el mensaje today que consulta ese valor (no se si es tan así, pero es a modo ilustrativo).

El efecto colateral de otra operación afecta a esta operación y le hace perder la transparencia referencial, a pesar de que esta operación por si misma NO tiene efecto de lado.

Ejemplos como este hacen que transparencia referencial y efecto colateral no sean conceptos opuestos.

Ejemplo 2: método con efecto

#LaColeccionConEfectoDeLado

>>add: unElemento

"El add: siempre devuelve lo que se agrega. Acá se redefine para avisarle

al elemento que fue agregado (no se me ocurrió nada mejor)"

unElemento teAgregaronEn: self.

^super add: unElemento.

 Transparencia Referencial:

...

Descargar como (para miembros actualizados) txt (6 Kb)
Leer 3 páginas más »
Disponible sólo en Clubensayos.com