George Franco Cendales - María Paula Díaz
- Rafael J. Barros
gfranco@sanmartin.edu.co
Se plantea la importancia que brinda el desarrollo de herramientas asistidas por computador como apoyo al proceso de enseñanza. SIGACLE (Simulador Gráfico Asistido por Computador Para la Enseñanza de Programación de Lenguajes Estructurados), tiene como principal objetivo el desarrollo de habilidades cognoscitivas en estudiantes de pregrado en las materias de programación de computadores. Este documento define específicamente los conceptos necesarios para comprender los principios de SIGACLE y además, la motivación y el propósito detrás de este. Finalmente el documento direcciona usos potenciales de SIGACLE, mediante un ejemplo completo de simulación gráfica de apuntadores.
Palabras Clave: Simulación, sistemas de
apoyo educativo, educación, SIGACLE.
El propósito de este trabajo es el apoyo al
proceso de enseñanza de conceptos básicos de programación
mediante el uso de simulación gráfica. En este contexto se
aplican técnicas de ingeniería de software y diferentes metodologías
desarrolladas en la Fundación Universitaria San Martín, desde
su fundación, dentro del programa de varios cursos de pregrado.
Adicionalmente, se desarrollan herramientas de ayuda utilizadas en los cursos iniciales de pregrado, que apoyan el proceso de aprendizaje. Se considera entonces la aplicación de simuladores para el aumento de habilidades. Este nuevo recurso se vuelve fundamental para el desarrollo de destrezas intelectuales: como el pensamiento estructurado y la solución de problemas por medio de estrategias heurísticas, utilizando el computador como herramienta [Galv94].
A continuación se cita la organización del
documento: la sección 1 define los conceptos necesarios para la
interpretación del artículo; la sección 2, la problemática
tratada; la sección 3, una posible solución al problema;
la sección 4, un análisis detallado y formal de la solución
propuesta; la sección 5, la solución aplicada por medio de
un ejemplo a un problema específico; la sección 6, las conclusiones
del artículo y por último se citan las referencias utilizadas
en la investigación.
Es un método conveniente y sencillo para describir las estructuras de información y las secuencias de acciones necesarias para llevar a cabo una tarea concreta [Deit94, Díaz96].
Se debe encontrar un modelo de simulación que apoye el proceso
de enseñanza–aprendizaje en los cursos iniciales de programación
de computadores en pregrado.
Dada una descripción completa de la gramática del lenguaje,
se debe encontrar un algoritmo que permita la depuración de un programa.
Para ello se necesita analizar la sintaxis y semántica del código.
En la fase inicial del proyecto se propone el simulador para lenguaje C.
La aproximación propuesta trabaja sobre el archivo fuente en dos fases: análisis y síntesis. La parte de análisis divide el programa fuente en sus elementos componentes y crea una representación intermedia. La parte de síntesis construye el modelo de la ejecución del programa a partir de la representación intermedia. Soluciones similares se proponen industrialmente en diferentes herramientas, las cuales tratan el problema de simular paso a paso la ejecución de un programa.
A diferencia de los métodos anteriores, la función de SIGACLE es apoyar el proceso de enseñanza - aprendizaje y lograr visualizar conceptos de programación de una manera gráfica. Cuando se usa un depurador normal se lleva al estudiante a seguir la secuencia lógica de todo el proceso numérico de su algoritmo. En este trabajo se presenta el espacio de ejecución, en un ambiente gráfico, por medio de un método de depuración con un proceso predeterminado, que visualiza en pantalla lo que ocurre en los diferentes dispositivos del computador.
El objetivo pedagógico es presentar al estudiante vistas diferentes de lo que sucede en la máquina al ejecutar un programa. Para esto utiliza técnicas de compilación operando en fases bien definidas, cada una de las cuales transforma el código fuente de una representación en otra [Aho73].
Simular gráficamente la depuración de un programa es un concepto que intenta resolver el problema que tiene el estudiante cuando escribe un programa de computador. Al principio, el estudiante no es consciente de la importancia de utilizar metodologías para el desarrollo de programas; ya sean estrategias de planeación y modelaje, o el uso de técnicas formales como el Personal Software Process (PSP) [Hum94, Hum97]. Por lo general, él se dedica a escribir código de forma artesanal, dejando el problema de corrección al compilador.
Las fuentes de error al realizar la compilación del código fuente del programa son de origen sintáctico, semántico ó lógico. Generalmente, el compilador ayuda al programador a identificar y localizar errores de sintaxis; la estrategia comúnmente usada es la corrección global que, dada una cadena de entrada incorrecta x y la gramática G, utiliza algoritmos que generan un árbol de análisis sintáctico para una cadena relacionada y, tal que el número de inserciones, supresiones y modificaciones de componentes léxicos necesarios para transformar x en y sea el mínimo posible.
Un compilador debe comprobar si el programa fuente sigue las convenciones semánticas del lenguaje de programación. Esta comprobación es llamada estática, y garantiza la detección y comunicación de errores de tipos, de flujo de control, de unicidad y de nombres.
Existen algunos errores en los que un compilador normalmente no tiene forma de recuperarse, son llamados errores lógicos. Estos consisten en construcciones correctas, sintáctica y semánticamente, con consecuencias no deseadas. La solución que proporcionan lenguajes de programación como C o Pascal, es la depuración del programa fuente. Al no ser una opción viable para los niveles iniciales de pregrado debido a su complejidad, se presenta SIGACLE como una aproximación a la solución del problema.
Al utilizar un ambiente gráfico que muestra el estado de la memoria y la forma como las instrucciones del programa lo afectan, permite al estudiante comprender las acciones internas que ocurren en el computador.
SIGACLE utiliza dos enfoques para lograr su objetivo: Un primer
módulo de enseñanza dirigida, enfoque conductista, que cuenta
con secuencias preparadas de programas ilustrativos diseñados por
el profesor titular de la materia, incluyendo la depuración de algoritmos
para la comprensión de los conceptos básicos de programación
por parte de los estudiantes. Un segundo módulo de enseñanza
exploratoria, enfoque inductivo, en el cual el estudiante resuelve problemas,
aprende procedimientos, llega a entender las características de
los procesos y cómo controlarlos, y finalmente aprende qué
acciones llevar a cabo en diferentes circunstancias simuladas a la realidad
interna del computador. Lo esencial en este caso es que el estudiante es
un agente activo que debe procesar la información que el simulador
le proporciona.
Se propone la construcción de un sistema basado en técnicas
eficientes de compilación y visualización gráfica,
como una posible aproximación a la solución del problema
[Aho73]. A continuación se describe el método que se lleva
a cabo cuando se ejecuta un programa generado por un usuario:
Consiste en un análisis lineal del texto fuente donde los caracteres de las diversas proposiciones se agrupan en alguno de los siguientes componentes léxicos: identificadores, palabras reservadas, operadores, constantes, cadenas y signos de puntuación como paréntesis, coma y punto y coma.
Tabla 1. Componentes Léxicos
|
Descripción informal
Const
Const
Const
if
If
if
Relación
<, <=, >, >=, = =, !=
< 0 <= 0
Id
Pi, cuenta, d2
Letra seguida de letras y dígitos
Num
3.1416, 0
Cualquier constante numérica
Literal
"Refresque pantalla"
Cualquier caracter
El componente léxico también permite la recuperación de errores en los siguientes niveles:
El proceso de análisis se puede apreciar en la siguiente figura:
Figura 1. Proceso de análisis sintáctico
El algoritmo de solución se basa en un método de análisis descendente, construyendo un árbol binario de sintaxis que examina los componentes léxicos de entrada de izquierda a derecha, un símbolo a la vez.
Las principales funciones de este componente son:
Se puede dar nombre a las expresiones de tipos.
Construcción de tipos:
Realiza una comprobación estática de tipos antes de ejecutar gráficamente el programa y por lo tanto garantiza que los programas que compilen sin ningún error se ejecutaran sin problemas de unicidad.
Conforme avanza la compilación del archivo fuente, el simulador informa si existen errores de tipos, de unicidad, de control de flujo, y efectúa comprobaciones relacionadas con nombres para actualizar su tabla de signos en una estructura dinámica, con el objeto de llevar un registro del ámbito y de las relaciones existentes entre los nombres. Así, cuando encuentre un nombre o información nueva sobre una variable ya existente podrá actualizar sus registros. El diseño de la tabla de símbolos permite la realización de e consultas sobre n nombres en un tiempo proporcional a n(n+e)/m, para cualquier constante m elegida, m puede llegar a ser igual a n dando como resultado un método bastante eficiente de verificación.
En el proceso de ejecución se muestran cuatro ventanas: la ventana
de código fuente, la ventana de explicación, la ventana de
pantalla y la ventana de memoria interna. La primera visualiza el código
que se está ejecutando; la segunda explica línea por línea
las acciones que se están realizando en la ventana de código;
la tercera visualiza todas las entradas y salidas del programa, y la cuarta,
simula gráficamente el proceso de ejecución interna de este.
Se procede a generar la secuencia básica de imágenes, (ver figuras 2 y3) que el simulador le proporcionaría a un usuario al ejecutar un programa:
Figura 2. Un programa listo para empezar su ejecución gráfica
Figura 3 El programa realiza direccionamiento en memoria
Conclusiones
SIGACLE constituye una herramienta de apoyo al proceso de enseñanza de conceptos básicos de programación mediante el uso de simulación gráfica. Se espera brindar soporte al proceso educativo, en el área de programación de computadores en las universidades que lo utilicen.
Actualmente se realizan estudios de aceptación para validar la mejora al proceso real de aprendizaje con estudiantes que participan en pruebas piloto realizadas con el simulador.
La continuación del trabajo sigue en el proceso de reingeniería aplicando teoría de patrones de diseño y la implantación en un lenguaje orientado por objetos para fortalecer la posibilidad de mantener y extender la aplicación. En necesario mejorar la representación gráfica de los objetos de memoria adicionando algoritmos de visualización de grafos.
Al revisar en detalle el método propuesto y hacer una evaluación práctica, se puede concluir que sus mayores fortalezas son:
[Abel96] Abel, Peter. Lenguaje Ensamblador y Programación para PC IBMâ y Compatibles, Prentice Hall, 1996.
[Aho73] Aho, A.V.;Ullman, J. The theory of parsing, translation and compiling. Prentice Hall, Englewood Cliffs, Nueva Jersey, 1973.
[Deit94] Deitel, Harvey. C: How to Program. Prentice Hall, 1994
[Díaz96] Díaz, María Paula; Morales, Jorge. Conceptos básicos de Programación. Fundación Universitaria San Martín, 1996
[Galv94] Gálvis, A. H., Ingeniería de Software Educativo. Ediciones Uniandes 1994.
[Hum97] Watts S. Humphrey, Introduction to the Personal Software Process, Addison Wesley, SEI Series in SE - 1997
[Klau84] Klauss, J. Computer Lexicon. Circulo de Lectores, 1984.
[Lem74] Lemone A Karen, Fundamentos de Compiladores, CECSA, 1996.
Marg91] Margolis, Philip, Personal Computer Dictionary, Random House, New York, 1991.
[Morr82] Morris, M. Lógica digital y diseño de Computadores. Prentice Hall, 1982.
[Vill96] Villalobos, Jorge. Diseño y Manejo de Estructuras de Datos en C. McGraw Hill 1996.