Download Un entorno de desarrollo visual para reforzar la - LINTI
Document related concepts
no text concepts found
Transcript
Un entorno de desarrollo visual para reforzar la comprensión de algoritmos y estructuras de datos Alejandra Schiavoni, Laura Fava, Jorge Rosso LINTI - Laboratorio de Investigación en Nuevas Tecnologías Informáticas. Facultad de Informática. Universidad Nacional de La Plata Calle 50 esq. 120, 2do Piso. Tel: +54 221 4223528 {ales, lfava, jrosso}@info.unlp.edu.ar Resumen La enseñanza de Algoritmos y Estructuras de Datos, es fundamental en las carreras de Ciencias de la Computación ya que éstas representan las posibles maneras de organizar los datos y el acceso a los mismos de manera eficiente. Estos temas se incluyen en las asignaturas del área de programación en los primeros años de las carreras. En general, se observa que a los estudiantes de estos cursos, les resulta complejo comprender los conceptos relacionados con estructuras de datos avanzadas y sus algoritmos de acceso. En este contexto, es de mucha utilidad para los estudiantes, contar con herramientas que acompañen el aprendizaje de esta temática. Este artículo presenta una línea de investigación cuyo objetivo central es diseñar una herramienta educativa innovadora destinada a mejorar la comprensión de algoritmos y estructuras de datos a través de la visualización de las estructuras de datos y de la exploración de la ejecución de sus propios algoritmos. Palabras clave: algoritmos y estructuras de datos, visualización de estructuras de datos, recursión, programación, Programación Orientada a Aspectos, JAVA. Contexto La Facultad de Informática cuenta actualmente con más de 4000 alumnos y 300 docentes [1]. Se dictan tres carreras de grado: Licenciatura en Informática, Licenciatura en Sistemas y Analista Programador Universitario. La asignatura Algoritmos y Estructuras de Datos corresponde a una materia obligatoria de segundo año de las tres carreras que cuenta con más de 400 alumnos inscriptos. Además, en conjunto con la Facultad de Ingeniería se dicta la carrera de Ingeniería en Computación desde el año 2011. En el plan de la carrera se encuentra la asignatura Programación 3, que es de carácter obligatorio, corresponde a segundo año y cuenta con más de 100 alumnos inscriptos. Dentro de los contenidos de ambas asignaturas se encuentra el estudio de estructuras de datos básicas y avanzadas tales como listas, pilas colas, árboles generales y binarios y grafos. Los alumnos aprenden los conceptos básicos de las representaciones y los algoritmos de acceso. Durante la cursada los alumnos deben implementar las estructuras de datos vistas usando el lenguaje de programación Java. La herramienta propuesta podría ser usada como un complemento novedoso de las clases teóricas y prácticas en las que el alumno incorpora los conceptos y los aplica en el desarrollo de sus propios algoritmos. El proyecto descripto en este artículo se desarrolla en el Laboratorio de Investigación en Nuevas Tecnologías Informáticas, LINTI de la Facultad de Informática de la UNLP y está enmarcado en el proyecto 11-F014 “Innovación en TICs para el desarrollo de aplicaciones en educación, inclusión, gobierno y salud”, acreditado en el marco del Programa de Incentivos, bajo la dirección del Lic. Javier Díaz. Introducción En Ciencias de la Computación el estudio de las Estructuras de Datos, es fundamental dado que las mismas son utilizadas en el desarrollo de casi todo tipo de software. Estudiar estructuras de datos implica estudiar las diferentes maneras de almacenar y organizar datos para facilitar el acceso y modificación [2]. El uso de una herramienta que visualice las diferentes estructuras de datos y el comportamiento de los algoritmos sobre ellas resulta de suma importancia, especialmente para los estudiantes de los primeros años de las carreras de informática. Actualmente existen varias herramientas dedicadas a reforzar la enseñanza de las estructuras de datos a través de una representación visual que ayuda a disminuir la abstracción inherente al estudio de las mismas [3,4,5]. Sin embargo algunas sólo consisten en animaciones de las operaciones sobre las estructuras a partir de un código inaccesible, otras si bien permiten visualizar la ejecución de un código propio, fuerzan a usar alguna técnica intrusiva -decorando o adaptando el código fuente original de la estructura- o conductista -usando un lenguaje no estándar/propietario-. Este artículo presenta una línea de investigación cuyo objetivo central es diseñar una herramienta educativa innovadora destinada a la enseñanza de las estructuras de datos, atendiendo a las dificultades observadas en los alumnos en cuanto a la comprensión y asimilación del comportamiento de las diferentes estructuras de datos. La herramienta a implementar está orientada a ofrecer una funcionalidad amplia y diversa basada en la posibilidad de contar con una representación visual de las estructuras de datos y de inspeccionar el estado de ejecución de algoritmos definidos por los alumnos. Esto último resulta novedoso y a la vez muy útil, en especial en algoritmos recursivos, en los que va a ser posible realizar un seguimiento detallado del estado de cada una de las llamadas realizadas. En la actualidad, después de un análisis profundo de las tecnologías disponibles, se está implementando un primer prototipo con las herramientas seleccionadas. En principio, como el lenguaje utilizado para la implementación de las estructuras de datos en las asignaturas Algoritmos y Estructuras de Datos y Programación 3 es JAVA, se tuvieron en cuenta soluciones basadas en este lenguaje. Por un lado, en las prácticas, los estudiantes utilizan Eclipse como entorno de desarrollo, motivo por el cual se decidió implementar un plug-in1 para integrarlo con este entorno, en vez de desarrollar una herramienta desde cero. De esta manera, los estudiantes seguirán usando Eclipse, un entorno de amplia aceptación en la comunidad de desarrolladores JAVA, pero con la 1 Un plug-in es una componente de software, es la unidad funcional más pequeña de la plataforma Eclipse que puede ser desarrollada de manera separada e integrada al entorno Eclipse para potenciar su funcionalidad. potencialidad del plug-in. Podrán ejecutar sus programas de la manera tradicional o elegir la opción ejecutar bajo las funcionalidades del plug-in. Por otro lado, para lograr la visualización de los algoritmos, el seguimiento de los mismos, el paso a paso en determinados métodos, y el estado de las variables en los sucesivos llamados recursivos, se decidió utilizar Programación Orientada Aspectos con el objetivo de no ser intrusivo en el código fuente de las estructuras de los estudiantes. Los aspectos que definen qué código sería interceptado, son independientes del código fuente implementado por los estudiantes [6]. Las funciones ofrecidas por la herramienta serán: Visualización del estado de ejecución de los códigos fuentes Java implementados por los alumnos Acceso al estado actual de las variables y al estado de las mismas en cada uno de los llamados recursivos anteriores. Visualización de las estructuras de datos seleccionadas por el alumno en un panel específico. Representación animada de la ejecución de los algoritmos implementados por los alumnos de las operaciones comunes que se realizan sobre las estructuras de datos: inserción, eliminación, recorridos. Líneas de Investigación, Desarrollo e Innovación Las líneas de investigación, desarrollo e innovación que se llevan a cabo en este proyecto se basan en dos ejes principales: uno vinculado a la enseñanza de las estructuras de datos y el otro relacionado con tecnologías avanzadas de JAVA. El primer eje incluye aspectos relacionados con el estudio, uso y comprensión de las estructuras de datos y de técnicas de programación, teniendo en cuenta las dificultades que ellas presentan en los alumnos de los primeros años de las carreras. Respecto a las estructuras de datos, es importante brindar una herramienta que les permita a los alumnos experimentar de manera de reducir la abstracción que su estudio conlleva. Respecto a las técnicas de programación, se analizan diferentes metodologías de enseñanza que apuntan a mejorar la comprensión y aplicación en casos concretos. La herramienta fue pensada para atacar los puntos críticos que se presentan al momento de aprender una nueva técnica de resolución de problemas. Tal es el caso de la recursión que involucra una forma distinta de pensar y encarar la solución a problemas [7, 8]. El segundo eje incluye el análisis y aplicación de tecnologías avanzadas basadas en el lenguaje Java para la implementación de un entorno de desarrollo visual, fácil de usar y que ayude a reforzar la comprensión de algoritmos y estructuras de datos. Como ya se mencionó, la herramienta será implementada usando tecnologías JAVA y para se establecieron las siguientes tres líneas: 1. Desarrollo de un plug-in y análisis para su integración con Eclipse. Eclipse es un framework de código abierto para la creación de entornos de desarrollo integrado utilizando un conjunto de herramientas y componentes GUI pre-construidas. Desde su lanzamiento, ha generado gran interés en muchos desarrolladores. El Workbench de Eclipse se compone de: Editores: los diferentes editores son paneles asociados con tipos de documentos específicos. Vistas: son paneles que apoyan a los editores. Perspectivas: son combinaciones de vistas específicas y editores. La idea de este plug-in es que incorpore una nueva Perspectiva a Eclipse, donde una vista muestre el código fuente java, otra el estado de las variables en los diferentes llamados recursivos (de métodos interceptados por el aspecto), otra la visualización de las estructuras de datos y algoritmos asociados [9]. las acciones que se llevarán a cabo se escriben en un aspecto (Aspect). El momento en que se entrelaza (weaving) el código origen con los aspectos se puede dar en tres momentos: en compilación (compile-time weaving), durante el empaquetado de un archivo JAR, o en ejecución (load-time weaving). La Fig. 1 muestra una esquematización del funcionamiento de AOP para entremezclar los aspectos con los programas. 2. Análisis de las características de la programación orientada a aspectos y su aplicación en la herramienta Desde un principio se busco poder visualizar estructuras de manera independiente del código desarrollado por los alumnos. Es decir, se buscaba alguna manera de indicarle a la herramienta las clases y métodos que permitirían describir la composición de la estructura y los datos contenidos en ella, sin imponer algún requerimiento de convención de nombres o alguna inclusión de anotaciones JAVA que indique de qué tipo de estructura se trata y cuáles son sus métodos de acceso a la información. Por otro lado utilizar archivos descriptores (con algún formato estándar como XML o JSON) asociados con las estructuras utilizadas, resultaría en una solución un tanto estática. De esta manera llegamos a la conclusión de que la Programación Orientada a Aspectos nos permitiría resolver este tema de una manera más elegante y dinámica. Con AspectJ es posible indicar puntos de un programa en los cuales uno desea examinar los objetos y realizar alguna determinada acción sin modificar el código original. La especificación de estos puntos de intervención (Pointcuts) y Fig. 1: Weaving de aspectos con el código fuente 3. Estudio de las componentes de interfaz de usuario provistas por JAVA para la implementación de la visualización de las estructuras de datos y la animación de algoritmos. La plataforma estándar de JAVA, provee una librería de componentes gráficas para crear GUIs de alta calidad. Se profundizarán tópicos avanzados de Java 2D, Swing y técnicas de animación para lograr una GUI amigable, expresiva que capture la atención de los estudiantes [10]. Resultados y Objetivos Como se mencionó anteriormente, la posibilidad de contar con una herramienta de apoyo al proceso de enseñanza de conceptos relacionados a la programación como son las estructuras de datos y la técnica de recursión, resulta novedoso y más que útil en los años iniciales. El proyecto presentado en este artículo está en una etapa inicial, razón por la cual los resultados representan las primeras pruebas de la tecnología a utilizar y de la integración entre ellas. Los resultados alcanzados en esta etapa son: Análisis y diseño visual de la herramienta propuesta en este artículo. Implementación e integración de un plug-in para Eclipse con funcionalidad mínima para testear la incorporación de nuevas funcionalidades en el ambiente. Estudio y aplicación de la Programación Orientada a Aspectos a través de la definición de un Aspecto básico y general que inspecciona algoritmos. Los objetivos inmediatos se relacionan con la implementación de la visualización del seguimiento de la ejecución de los algoritmos: Analizar las distintas componentes de interfaz de usuario de SWING, y seleccionar la más apropiada para visualizar en forma clara las sucesivas llamadas de algoritmos recursivos. Implementar las funcionalidades del plug-in que representa el seguimiento de la ejecución de algoritmos recursivos, y su visualización en la componente de interfaz de usuario seleccionada. Implementar la lógica del Aspecto para que cumpla con la funcionalidad de inspeccionar métodos/algoritmos seleccionados por el alumno. Los objetivos relacionados con posteriores están la representación animada de las estructuras y algoritmos implementados por los estudiantes. Esto implica un trabajo intenso de desarrollo de Interfaz de Usuario Grafica, teniendo en cuenta que tanto la visualización de las estructuras como la animación de los algoritmos depende en forma directa del código propio que está ejecutando el alumno y se resuelve en tiempo de ejecución. Como objetivo final del proyecto se prevé el testeo de la herramienta desarrollada con un grupo reducido y voluntario de estudiantes para evaluar el impacto en su aprendizaje. Se espera poder usarla como complemento innovador a las clases teóricas, explicaciones prácticas y textos recomendados por la Cátedra. Formación de Recursos Humanos El equipo de trabajo de la línea de I+D+i presentada en esta artículo se encuentra formado por docentes investigadores categorizados del LINTI y alumnos avanzados de las carreras de Lic. en Informática y Lic. en Sistemas de la Facultad de Informática. Basada en las líneas de investigación de este proyecto se está comenzando a desarrollar una tesina de grado. Referencias [1] Anuario Estadística 2013/2014: http://www.unlp.edu.ar/indicadores [2] T. Cormen, C. Leiserson, R. Rivest, C. Stein; Introduction to Algorithms, Second Edition, ISBN 0-07-013151-1 (McGrawHill), 2001. [3] T. Chen and T. Tarek Sobh; A Tool for Data Structure Visualization and Userdefined Algorithm Animation, Department of Computer Science and engineering, University of Bridgeport, USA. Accesible en: http://www1bpt.bridgeport.edu/~risc/pdf/jp29 .pdf [4] J. Cross, D. Hendrix; Workshop jGRASP: An Integrated Development Environment with Visualizations for Teaching Java in CS1, CS2, and Beyond, 36th ASEE/IEEE Frontiers in Education Conference, ISBN 1-4244-02565, 27 -31 Oct. 2006. [5] G. Cardim, I. Marcal, C. de Sousa, D. de Campos, C. Marin; A. do Carmo, D. Toledo, A. Saito, R. Correia, R. Garcia, Teaching and Learning of Data Structures Supported by Computer: An Experience with the CADILAG tool. Information Systems and Technologies (CISTI), 2012 7th Iberian Conference, Madrid, p:1-5. ISBN 978-1-4673-2843-2 [6] J. Gradecki, N. Lesiecki, Mastering AspectJ: Aspect-Oriented Programming in Java. ISDN 0-471-43104-4, Wiley, 2003. [7] J. Zhang, M. Atay, E. Smith, E. Caldwell, E. Jones, Using a Game-Like Module to Reinforce Student Understanding of Recursion, Frontiers in Education Conference (FIE), IEEE, ISBN: 978-1-4799-3921-3, Madrid, Spain, 22 – 25 Oct, 2014. [8] A. Chaffin, K. Doran, D. Hicks, T Barnes, Experimental Evaluation of Teaching Recursion in a Video Game, Proceedings of the 2009 ACM SIGGRAPH, Shimposium of Video Games, 79-86. [9] A. Blewitt, Eclipse 4 Plug-in Development by Example: Beginner's Guide. ISBN 978-1-78216-032-8, Packt Publishing, 2013. [10] C. Haase and R. Guy, Filthy Rich Clients: Developing Animated and Graphical Effects for Desktop Java Applications, ISBN10: 0132413930, Addison Wesley, 2007.