jueves, 9 de enero de 2014

El entorno y sus partes

La vez pasada estaba recordando un experimento sencillo que se suele explicar en las escuelas sobre ondas y la velocidad de la luz.  El experimento consistía en observar la deformación aparente que se produce a una cuchara cuando se introduce un vaso lleno de agua hasta la mitad, algo relacionado con la ley de snell si no estoy mal, luego otro día estaba leyendo sobre  como se alimentan algunas células (y el ciclo de krebs creo) y por alguna extraña razón identifiqué en ambos casos una relación que podría ser interesante a la hora de modelar ciertos problemas computacionales.

Las relaciones se dan entre un elemento y su entorno, tenia entonces esta idea en la cabeza de que los valores en las propiedades de algunos elementos varían según los valores en las propiedades de su entorno, de esta manera en el primer caso la velocidad de un rayo de luz varia según el indice de refracción del material (o ambiente) en el cual se propaga, no es igual en el vacío que en el aire o en el agua. Por otro lado cuando desarrollamos software utilizando OOP definimos clases que encapsulan los datos de sus propiedades, si por ejemplo yo quisiera modelar el primer caso, tendría una clase llamada RayoDeLuz que tendría un atributo velocidad, uno podría modelar el atributo velocidad como un método ObtenerVelocidad(..) que recibe como parámetro el material sobre el que se propaga el rayo de luz y así hacer el calculo pertinente para devolver la velocidad.  Una vez que se ha definido una clase para representar un material, es difícil encontrar una forma de alterar el método ObtenerVelocidad para que funcione con otros materiales cuya influencia en los valores de velocidad están afectados por otro tipo de propiedades diferentes a las previamente establecidas, toca cambiar una interfaz, toca cambiar el método, toca establecer casos específicos para cada tipo de ambiente.

Ahora consideremos que los datos son similares al rayo de luz, la representación de la información estaría dada por el medio en el cual se propaga dicha información, si por ejemplo los datos viajan por la red su representación sería diferente a su representación en la capa de aplicación o la de presentación, entonces, ¿Podríamos lograr que la información "mutara" en cada cambio de medio de propagación?   Sera interesante codificar espacios reutilizables que pudieran albergar datos de diferentes tipos y adaptar la información entre si, por ejemplo, si tengo un objecto OBJ inmerso en un medio o espacio llamado MODELO y quiero enviar la información del objeto por la red, solo tendría que mover OBJ de MODELO a RED serializando automáticamente y agregando la información que haga falta. Los ORM se convertirían en un caso particular de este paradigma donde el espacio de origen es un modelo de datos y el de destino una base de datos relacional.  Podríamos tener ambientes de ejecución especiales para diagnosticar problemas haciendo que la ejecución misma de un algoritmo dependa del ambiente en el que se desenvuelve.  Si existieran ambientes heredados podríamos agregar aspectos nuevos al codigo existente, pero bueno la verdad se me acabó el tiempo y no terminé la idea, espero seguir otro día desarrollandola.