martes, 24 de septiembre de 2013



Buenas tardes, hoy volvemos al hilo inicial de "El arte de programar", voy a hablar un poco en la publicación de hoy sobre el tema de de gap semántico e Isomorfismo estructural, retomaremos un poco el tema del espacio de soluciones y el espacio del problema y abordaremos de la forma más sutil éste tema importante.

Pero antes... como siempre quiero aclarar que...


ADVERTENCIAprobablemente mucha gente esté en desacuerdo con lo que expreso en las entradas de mi blog, la idea del blog siempre fue, como todo blog, la de presentar textos que muestren un poco de mi "día a día", en mi caso en el mundo de la programación y la informática.
No obstante, todos mis textos están basados en la normativa vigente, y en toda mi experiencia hasta el momento, aquellos que estén en desacuerdo, probablemente sea por ignorancia o desconocimiento, y también podríamos mencionar engreimiento, creer que saben todo, pero tampoco podemos dejar de lado que quizá esté equivocado en algunas cosas, pero con el tiempo me daré cuenta y lo aclararé en nuevas entradas al blog.

 Vamos entonces al tema en cuestión.-

Todo programa consta de dos espacios, el espacio de los problemas, y el espacio de las soluciones. Podríamos definir al espacio de los problemas, como a todo aquello que presente el motivo por el cual iniciamos el desarrollo de software, podríamos decir que es, la especificación para nuestro programa, o el problema que nuestro programa desea solucionar, e de aquí el nombre. Por el contrario, el espacio de soluciones, vendría a ser precisamente, nuestro software o solución a un problema dado.

El desarrollo de software involucra un mapeo de aspectos o características de los objetos y conceptos presentes en el espacio del problema en representaciones abstractas en el espacio de soluciones, de manera tal, que operaciones sobre estas representaciones abstractas correspondan a operaciones en la realidad, a partir de ahí se diseñan algoritmos que ejecutados producirán resultados, resultados estos que podrán ser mapeados físicamente sobre algún suceso en tiempo real en el mundo real, o que serán examinados y mapeados mentalmente por personas sobre resultados en la realidad.

Todo programa es además, en última instancia, una composición de acciones, procesos o procedimientos actuando sobre composiciones o estructuras de datos. Los lenguajes y métodos llamados tradicionales tienden a privilegiar una determinada manera de combinar estos ingredientes básicos. Los lenguajes de uso más general proveen un buen soporte para la representación de acciones o abstracción procedural, pero proveen poco o deficiente soporte para la representación de entidades o conceptos presentes en la realidad, o abstracción de datos, como Grady Booch, señala:

"Si examinamos los lenguajes naturales, verificamos que todos tienen dos componentes porimarios, verbos y sustantivos, debería existir una estructura similar o paralela en los lenguajes simbólicos que provea construcciones para implementar objetos y operaciones.
Todavía la mayoría de los lenguajes son primariamente imperativos, ellos proveen de un rico conjunto de construcción que soportan implementar opiniones, mas en general son significativamente pobres o deficientes en cuanto a la abstracción de objetos de la realidad"

Mas aún como Tadeo Takahashi nota,

"--- la topología de los lenguajes funcionales parece indicar que ellos tienen una estructura realmente plana, pero la realidad no es ni plana ni secuencial sino por el contrario, multidimensional y con frecuencia altamente paralela"

Teniendo en cuenta lo mencionado anteriormente podemos inferir, que cuanto más cerca conceptualmente estén ambos espacios, más fácil será la tarea de desarrollar software, y obviamente con más facilidad se podrá asegurar la comprensión, corrección, robustez y extensibilidad de la aplicación.

Fundamentalmente se trata de un proceso de identificación de abstracciones, si las representaciones de los aspectos más importantes no tuviera una expresión igual o cercana al espacio del problema, entonces sería cada vez más complicado el desarrollo de software.
La distancia entre la representación del problema y el problema en si, es denominado Gap Semántico, el objetivo más claro de los procedimientos, herramientas, métodos y desarrollo del lenguaje, es reducir esta brecha conocida como el gap semántico. (Se puede leer en wikipedia Gap Semántico como definición fuera del ámbito de programación, no obstante, solo es útil para poder entender mejor la idea que se plantea en ésta publicación)

Este paralelismo entre los aspectos estables de la caracterización del problema y la estructura de la solución es escencial para la evolución del modelo, este principio, llamado "principio de isomorfismo estructural" es central en la capacidad de estas abstracciones de encapsular el cambio.

vamos cerrando aquí la publicación del día de hoy, y nos veremos mañana, en otra publicación, siguiendo con el crono grama publicaremos algo del hilo de "El correcto diseño de bases de datos".-

0 comentarios:

Publicar un comentario