Un entorno basado en Java para enseñar conceptos de lenguaje de programación

Manfred Hauswirth, Mehdi Jazayeri y Alexander Winzer

Grupo de sistemas distribuidos

Universidad tecnica de viena

Argentinierstraße 8 / 184-1, A-1040 Wien, Austria

{M.Hauswirth, M.Jazayeri, A.Winzer} @ infosys.tuwien.ac.at

http://www.infosys.tuwien.ac.at/

 

Resumen: describimos el entorno visual SDE para el estudio de la semántica de los lenguajes de programación. SDE es compatible con la máquina abstracta llamada SIMPLESEM, que se utiliza para definir la semántica operacional de los lenguajes de programación en un libro de texto ampliamente utilizado en lenguajes de programación. Al basar el entorno en la infraestructura de la World Wide Web, el entorno está inmediatamente disponible para estudiantes e instructores de todo el mundo. SDE mejora el aprendizaje del estudiante simulando y visualizando conceptos abstractos de semántica. Tales entornos de visualización son invaluables en el estudio de sujetos abstractos. SDE se está utilizando actualmente en varios cursos universitarios en diferentes países. Describimos la arquitectura y las capacidades del entorno y revisamos algunas de nuestras experiencias en el desarrollo del entorno.

Introducción

Los cursos sobre conceptos o principios de los lenguajes de programación son una parte estándar de los currículos universitarios de informática. A diferencia de los cursos sobre programación en lenguajes particulares, estos cursos enfatizan aspectos comunes y diferencias entre muchos lenguajes de programación diferentes. Estos cursos consideran la sintaxis y los componentes semánticos de los lenguajes de programación. El estudio de sintaxis se ocupa de los aspectos estáticos de los lenguajes de programación para los cuales las notaciones basadas en Backus-Naur Form (BNF) han demostrado ser adecuadas y se han convertido en herramientas estándar para dicho estudio. Para el estudio de la semántica, sin embargo, hay varios enfoques y no hay consenso en cuanto al mejor método. Los enfoques existentes para la descripción semántica pueden categorizarse como axiomáticos, denotacionales y operativos.

El enfoque operacional define la semántica de un lenguaje de programación con referencia a la ejecución del programa en una máquina abstracta. En particular, la semántica de una construcción de lenguaje se define dando su traducción en términos de las instrucciones de la máquina abstracta. Por lo tanto, para comprender completamente la semántica de un lenguaje de programación, el estudiante debe aprender las instrucciones de la máquina abstracta, cómo traducir los programas del lenguaje de programación a los programas de la máquina abstracta y cómo la máquina abstracta ejecuta sus programas. En los cursos convencionales, estos se realizan con lápiz y papel. Una vez que aprendió la semántica de un idioma, el estudiante debería poder traducir una construcción de lenguaje a las instrucciones de la máquina abstracta. Dada una traducción de este tipo, ¿cómo sabe el alumno que la traducción es correcta? No importa cuán simple sea la máquina abstracta, rastrear la ejecución de construcciones como las llamadas a procedimientos recursivos es tedioso y propenso a errores porque el estudiante tiene que pasar manualmente por este código manteniendo un registro de todos los elementos de datos, el puntero de instrucciones, la pila y el montón .

Un entorno informático que admite el desarrollo, la ejecución y la visualización de programas para la máquina abstracta libera al estudiante de tener que lidiar con el tedio de la ejecución de la máquina y, en cambio, concentrarse en la semántica de las construcciones del lenguaje. Una ejecución visual del programa da vida a la semántica de las construcciones lingüísticas. Vetter [7] defiende las “ herramientas especializadas ” para mejorar la comprensión del curso. SIMPLESEM Development Environment (SDE) es una herramienta especializada en conceptos de lenguaje de programación. SIMPLESEM es una máquina abstracta semántica introducida y utilizada en el libro Programming Language Concepts [4]. SDE es un entorno gráfico basado en Java que le permite al estudiante editar, ejecutar y depurar programas SIMPLESEM. SDE anima las ejecuciones de SIMPLESEM al visualizar el código y las memorias de datos del procesador SIMPLESEM. Los usuarios tienen control interactivo sobre los contenidos de la memoria y el flujo del programa en cualquier momento. Tanto el código como los puntos de interrupción de datos son compatibles. Estas instalaciones permiten una fácil depuración y apreciación del control y flujo de datos de un programa. Esto conduce a una mejor comprensión del comportamiento dinámico del programa [6]. El uso de nuevas tecnologías para mejorar la enseñanza y el aprendizaje es actualmente un área activa de discusión. Un número especial de Comunicaciones de la ACM [1] está dedicado a los nuevos usos educativos de las computadoras en el entorno del campus. La mesa redonda virtual [3] analiza muchos temas e implicaciones interesantes de la nueva infraestructura educativa de TI. Krämer [5] describe los problemas generales del aprendizaje a distancia, el cambio de paradigma de la enseñanza en el aula a la enseñanza a distancia interactiva y un curso en línea específico para la ingeniería de software distribuida.

SDE es portátil en muchas plataformas y se puede usar a través de la World Wide Web en un navegador habilitado para Java (versión de applet) o como una aplicación independiente. Para garantizar una funcionalidad idéntica en ambas versiones, a pesar del hecho de que los applets y aplicaciones Java tienen diferentes requisitos de seguridad, la versión del applet emula funcionalidades que solo están permitidas para las aplicaciones, por ejemplo. La versión del applet incluye un servidor de archivos simple para almacenar y cargar el código. SDE tiene una única fuente de programa para ambas versiones. Se puede acceder a SDE a través de WWW y no requiere ningún procedimiento de instalación en las computadoras cliente. El único requisito para su uso es un navegador WWW habilitado para Java.

El documento está estructurado de la siguiente manera. Primero describimos el procesador abstracto semántico SIMPLESEM, al que sigue una descripción general de SDE y sus funcionalidades. Luego discutimos el impacto de SDE en la enseñanza de la semántica del lenguaje. La sección final resume los principales puntos planteados, presenta algunas lecciones aprendidas y concluye el documento.

Conceptos de SIMPLESEM

SIMPLESEM es un procesador semántico abstracto para soportar un enfoque operacional de la semántica de los lenguajes de programación. Permite comprender los conceptos de un lenguaje de programación concreto asignándolos a secuencias de instrucciones SIMPLESEM que luego se pueden “ejecutar”.

SIMPLESEM consiste en un puntero de instrucción, una memoria, que se divide en dos secciones separadas (código y memoria de datos) y un procesador. La memoria de códigos (C) contiene el código a ejecutar y la memoria de datos (D) contiene los datos que el código manipula. Las direcciones de C y D comienzan en 0 (cero) y se asume que tanto los programas como los datos se almacenan a partir de esta dirección. El puntero de instrucción (ip) se usa para señalar el siguiente comando en C que se ejecutará. Se inicializa a 0 y se incrementa automáticamente a medida que se ejecuta una instrucción. Cada instrucción toma una ubicación en C. La ejecución se detiene cuando se encuentra la detención de instrucciones especiales.

Las notaciones C [X] y D [X] se utilizan para denotar los valores almacenados en la ubicación X de C y D, respectivamente. La modificación del valor almacenado en una ubicación se realiza mediante el conjunto de instrucciones objetivo, fuente donde destino es la dirección de la ubicación cuyo contenido se va a configurar, y fuente es la expresión que evalúa el nuevo valor. Por ejemplo, el conjunto 10, D [20] almacena el valor de la ubicación 20 en la ubicación 10.

La entrada / salida en SIMPLESEM se logra mediante el uso de la instrucción establecida y haciendo referencia a los registros especiales de lectura (entrada) y escritura (salida). Por ejemplo, set 15, read leería un valor del dispositivo de entrada y lo almacenaría en la ubicación 15, y set write, D [50] imprimiría el contenido de la ubicación 50 en el dispositivo de salida.

Los valores se pueden combinar en expresiones de manera liberal y natural; por ejemplo, set 99, D [15] + D [33] * D [41] sería una instrucción aceptable para modificar el contenido de la ubicación 99.

Para modificar el flujo de control secuencial, SIMPLESEM tiene las instrucciones de saltar y jumpt. El primero es un salto incondicional a una determinada instrucción, por ejemplo, el salto 47 hace que la instrucción en C [47] sea la siguiente instrucción a ejecutar. El último es un salto condicional que se produce si una expresión se evalúa como verdadera. Por ejemplo, para la ejecución 47, D [3]> D [8] la ejecución continuaría en la ubicación 47 si el valor en la ubicación 3 es mayor que el valor en la ubicación 8; de lo contrario, la ejecución continuará con la siguiente instrucción.

SIMPLESEM permite direccionamiento indirecto. Por ejemplo, el conjunto D [10], D [20] asigna el valor almacenado en la ubicación 20 a la celda cuya dirección es el valor almacenado en la ubicación 10. Por lo tanto, si el valor 30 se almacena en la ubicación 10, la instrucción modifica el contenido de la ubicación 30. La indirección también es posible para los saltos. Por ejemplo, el salto D [13] salta a la instrucción almacenada en la ubicación 88 de C, si 88 es el valor almacenado en la ubicación 13.

Como puede verse en la descripción de SIMPLESEM hasta ahora, es una máquina simple y es fácil de entender cómo funciona y cuáles son los efectos de ejecutar sus instrucciones. En otros términos, podemos asumir que su semántica es intuitivamente conocida por los estudiantes con una educación básica en computación. Por lo tanto, la semántica de los lenguajes de programación se puede describir mediante reglas que especifican cómo cada construcción del lenguaje se traduce en una secuencia de instrucciones SIMPLESEM equivalentes. Dado que las instrucciones SIMPLESEM ya son conocidas, la semántica de construcciones recién definidas también se conoce.

Todas las construcciones y conceptos de los lenguajes de programación modernos, como bucles, rutinas, recursión, memoria de pila y montón, estructura de bloques, alcance, semántica de paso de parámetros, se pueden mapear en las instrucciones SIMPLESEM descritas anteriormente. Estas asignaciones, sin embargo, están fuera del alcance de este documento. Se refiere al lector interesado [4] para una descripción detallada.

La Figura 1 muestra un ejemplo simple e intuitivo de mapear conceptos del lenguaje de programación en instrucciones SIMPLESEM.

Figura 1: Un mapeo a SIMPLESEM

El programa de la izquierda, dado en un lenguaje tipo C, calcula el mayor divisor común de dos números enteros utilizando un simple bucle. El código de la derecha muestra el mismo programa en términos de instrucciones SIMPLESEM.

Entorno de desarrollo SIMPLESEM

Los estudiantes aprenden a atravesar el código de procedimiento al principio de sus estudios. Sin soporte de software, repasar el código es una tarea tediosa y propensa a errores. El SIMPLESEM Development Environment (SDE) es un entorno gráfico basado en Java que admite el desarrollo y la visualización de programas SIMPLESEM. Elegimos Java [2] para la implementación para que SDE sea accesible a través de Internet como un applet. Java facilita la portabilidad en una amplia gama de plataformas. Por lo tanto, se puede utilizar de inmediato y ejecutar “ fuera de la plataforma ”.

Un applet es un fragmento de código Java que se descarga desde un servidor WWW y se ejecuta en la computadora cliente (consulte la Figura 2). El navegador WWW utilizado para la descarga proporciona al applet un entorno de tiempo de ejecución viable y se ocupa de los problemas de seguridad, etc.

Figura 2: Descarga y ejecución de un applet

El uso de esta configuración tiene varias ventajas: no se necesita una instalación explícita en la computadora cliente; solo se necesita un navegador habilitado para Java, que está disponible en la mayoría de las computadoras de todos modos; SDE es accesible en todo el mundo a través de Internet; los usuarios no tienen que mantener el software ya que siempre descargan la versión más reciente.

Además, SDE también se puede descargar y ejecutar como un applet local o como una aplicación independiente. Esto es interesante para usar en computadoras sin conexión a Internet o si solo hay disponible una conexión lenta. El uso de SDE como un applet local requiere un navegador mejorado con Java. Para la versión de la aplicación es necesaria una Máquina Virtual Java (JVM), es decir, el entorno de ejecución de Java.

La figura 3 muestra la arquitectura global de SDE.

Figura 3: Arquitectura global

Los applets solo tienen acceso restringido al equipo cliente, por ejemplo, el acceso a archivos no es posible Para proporcionar almacenamiento y carga de archivos SIMPLESEM para la versión del applet, implementamos un servidor de archivos que se ejecuta en el host que contiene el applet SDE. Los usuarios de la versión del applet pueden cargar y almacenar en el servidor. La versión de la aplicación utiliza el sistema de archivos directamente. A pesar de las capacidades ligeramente diferentes, que se deben a restricciones de seguridad, ambas versiones se incluyen en una sola fuente. Las funciones se vuelven disponibles o no están permitidas dependiendo de si SDE se ejecuta como un applet o como una aplicación. La configuración, sin embargo, no es necesaria.

SDE consiste en un editor simple orientado a líneas, un intérprete SIMPLESEM y un depurador gráfico.

Figura 4: captura de pantalla SDE

La figura 4 muestra una sesión SDE de muestra. El componente editor / código muestra el código del programa SIMPLESEM en la memoria de códigos C (aquí el programa que se muestra en la Figura 1). La siguiente instrucción que se ejecutará es la instrucción en la línea 6. Esto se indica por el color de fondo cambiado de esta línea. Se ha establecido un punto de interrupción en la línea 7, que se muestra en la ventana de punto de interrupción a la izquierda. Además, la parte del número de línea de la línea 7 en la ventana de código indica el punto de interrupción al tener un color de fondo diferente. Se establece un punto de interrupción de datos en la ubicación 1. El color de fondo diferente del número de línea de la ubicación 1 en la ventana de datos indica que el punto de interrupción se activó en el estado actual de ejecución. Esto significa que la ejecución automática se suspendió y SDE espera la entrada del usuario. El usuario ahora puede verificar el estado de ejecución, cambiar los valores de los datos, editar el programa, cambiar los puntos de interrupción, continuar con la ejecución, etc. Se puede acceder a estas funcionalidades a través de varias ventanas en combinación con los botones en la parte inferior de la ventana principal. SDE ofrece las siguientes funcionalidades:

Edición. Los programas SDE se pueden escribir directamente en la ventana del editor. El editor está orientado a líneas y ofrece funcionalidades básicas de edición como cortar y pegar, eliminar e insertar líneas, etc.

Puntos de interrupción. Se pueden insertar puntos de interrupción en el programa para suspender la ejecución automática en puntos definidos.

Control de ejecución. El comportamiento estándar es que los programas se ejecutan automáticamente hasta que se requiera la entrada del usuario (se accede al registro de lectura), la ejecución llega a un punto de interrupción, o el usuario presiona un botón de control (pausar, detener, reiniciar). En tales casos, el usuario puede realizar otras acciones, por ejemplo, proporcione información, establezca / elimine puntos de interrupción, continúe la ejecución, paso a paso a través del código, etc.

Puntos de interrupción de datos. Los puntos de interrupción de datos se establecen en las ubicaciones de memoria D. Si una instrucción intenta modificar una ubicación con un punto de interrupción de datos, la ejecución se suspende.

Cargando y almacenando archivos. El código SIMPLESEM se puede almacenar y cargar desde archivos. En el caso de la versión de la aplicación, esto se hace en el sistema de archivos local. La versión del applet no tiene permiso para acceder al sistema de archivos. Por lo tanto, la carga y el almacenamiento se realizan a través de un servidor de archivos remoto que se ejecuta en el servidor del applet. Este servidor es parte de SDE.

Una guía detallada del usuario de SDE se incluye en [8]. Para redondear la discusión, la Figura 5 muestra la arquitectura interna de SDE.

Figura 5: Arquitectura interna de SDE.

El componente de control proporciona la interfaz de usuario para la comunicación entre el usuario y los otros componentes. Adicionalmente, se encarga de la comunicación entre los componentes. El componente de código implementa el editor de código fuente. Los dos componentes de punto de interrupción almacenan y muestran puntos de interrupción. Proporcionan una interfaz especializada al intérprete para admitir la comprobación rápida de puntos de interrupción.

El componente de intérprete (Figura 6) obtiene líneas de código del componente de código y las introduce en su analizador léxico. El analizador léxico rompe la entrada en tokens, que son la entrada para el analizador. El analizador combina múltiples tokens en una instrucción SIMPLESEM y comprueba su corrección sintáctica. El intérprete entonces ejecuta la instrucción. Los valores de datos necesarios se recuperan y se envían al componente de datos.

Figura 6: Interacción intérprete

Para permitir al usuario interrumpir o pausar la ejecución, como se describe anteriormente, el intérprete se implementa como un hilo de Java. Cuando el usuario inicia un programa SIMPLESEM, se crea un subproceso de intérprete. Coopera con el analizador y analizador léxico que son hilos en sí mismos. Las solicitudes de interrupción y pausa se realizan suspendiendo los subprocesos relevantes. Más tarde, estos hilos se pueden destruir o reanudar, p. Ej. En caso de operaciones continuas o de un solo paso. Esta arquitectura multihilo asegura una capacidad de respuesta altamente interactiva. Una descripción detallada de la implementación de SDE se encuentra en [8].

Usando SDE para la enseñanza

 Los conceptos abstractos siempre son difíciles de enseñar a los principiantes en una materia. Por ejemplo, los estudiantes principiantes siempre tienen dificultades con el concepto de recursión: “ ¿cómo es posible llamar a un procedimiento que está definiendo? ”, Preguntan. Al visualizar la ejecución de los procedimientos recursivos, el estudiante puede ver claramente cómo comienza la recursión, cómo avanza y cómo termina finalmente. El estudiante puede ver el costo del mecanismo y puede compararlo visualmente con implementaciones equivalentes basadas en iteración. El impacto visual es inmediato. Depurar un procedimiento recursivo no finalizador mediante su rastreo en papel es mucho más difícil que ejecutarlo en un intérprete. De hecho, el programa de demostración inicial cargado con SDE es un programa factorial recursivo. Es una buena demostración de cómo un programa simple genera un comportamiento dinámico complicado. Obtener una instrucción equivocada puede llevar a una recursión infinita. Al modificar las instrucciones selectivas en el programa, el instructor puede demostrar errores comunes y sus consecuencias, a veces dramáticas.

La idea básica de SDE es visualizar conceptos abstractos que no tengan contrapartes físicas. La mayoría de las áreas de la informática tratan con conceptos abstractos similares y pueden beneficiarse de herramientas de software de soporte similares.

Conclusión

 Hemos descrito el entorno de desarrollo SIMPLESEM para el estudio de la semántica de los lenguajes de programación. SDE se está utilizando en nuestra universidad para nuestro curso Conceptos del lenguaje de programación. Esta es la primera vez que el curso se imparte con tal apoyo.

Curiosamente, aunque SDE se acaba de desarrollar y ni siquiera se ha anunciado oficialmente, ya ha sido “descubierto” por varios instructores de todo el mundo (¡en al menos tres continentes!) Y se está utilizando para apoyar su enseñanza. Tradicionalmente, los instructores de cursos similares comparten sus experiencias y también son apoyados por autores de libros de texto. El material compartido suele ser de naturaleza estática: ejemplos de programas, copias de transparencias, etc. Una herramienta de software como SDE permite nuevas formas de compartir. En particular, los programas SIMPLESEM especialmente interesantes (como nuestro programa de demostración factorial) que demuestran problemas específicos como la recursión o los parámetros del procedimiento pueden proporcionarse en la WWW.

SDE también permite nuevos tipos de tareas que antes no eran posibles debido al tedio de manejar todo menos los programas SIMPLESEM muy pequeños. Además, las asignaciones de tareas pueden tomar la forma de applets que son ejecutados por los estudiantes y enviados automáticamente al sitio del instructor. Las tareas pueden ser evaluadas automáticamente y el estudiante notificado inmediatamente. Tales mecanismos permiten que un instructor apoye a un mayor número de estudiantes de lo que suele ser posible.

SDE se implementó en Java y se diseñó principalmente para su uso con navegadores en la WWW. Java y la infraestructura WWW / browser fueron elegidos para proporcionar acceso ubicuo y disponibilidad inmediata de nuevas versiones. Además, esta configuración estaba destinada a liberar a los usuarios del trabajo de instalación y mantenimiento. Dado que Java admite la portabilidad, asumimos que podríamos cumplir estos objetivos fácilmente. Esto resultó ser demasiado optimista. Hubo dos razones principales que alargaron considerablemente la duración del proyecto: una nueva versión de Java y los entornos Java de los navegadores. Durante la implementación, Java cambió de la versión 1.0.2 a 1.1.x. Esto introdujo algunas incompatibilidades, por ejemplo. Interfaces en desuso, lo que provocó una reelaboración de SDE. Los navegadores y las plataformas en las que se ejecutan tienen entornos ligeramente diferentes, especialmente en términos de programación GUI. Estas diferencias fueron lo suficientemente grandes como para convertir el enfoque de “ escribir una vez, ejecutar en todas partes ” de Java en un ” escribir una vez, probar en todas partes ” y causaron un retraso considerable debido a las pruebas de compatibilidad y estabilidad. Estos problemas estarán con nosotros hasta que Java se estabilice. Sin embargo, no conocemos otros enfoques que ofrezcan beneficios similares. SDE está disponible en la World Wide Web (http://www.infosys.tuwien.ac.at/pl-book/simplesem/).

 

Original Resource:-http://lsirpeople.epfl.ch/hauswirth/papers/Simplesem/