“Una Metodología para el aprendizaje de la Programación Orientada a Objetos basada en Programación Extrema (XP)” “A Methodology for learning Object Oriented Programming based on Extreme Programming (XP)” Diva Sanjur Araúz Universidad Tecnológica de Panamá Facultad de Ingeniería de Sistemas Computacionales [email protected] RESUMEN Palabras Claves En este documento se presenta nuestra propuesta de investigación que consiste en la enseñanza de Java como Lenguaje de Programación Orientado a Objetos, a través del diseño e implementación de una metodología de aprendizaje basada en la integración de herramientas de Tecnologías de la Información y Comunicaciones como lo son Cmap Tools para el modelado del conocimiento y BlueJ como un ambiente de desarrollo integrado e interactivo para aprender a programar en Java. Este estudio se aplicará a estudiantes de 11°, en un curso de programación regular, en el periodo comprendido a dos bimestres de clases y se dará a través de la comparación de dos segmentos de la población estudiantil, los cuales paralelamente se dedicarán al aprendizaje de este lenguaje de programación. BlueJ, concepto, Cmap Tools, colaboración, GUI, Java, Karel++, mapas conceptuales, palabras de enlace, programación extrema, ObjectKarel, OO, POO, programación en pares, proposición, software de exploración, software de marcado, WebCT, WEBL. ABSTRACT This paper presents our research proposal that consist in teaching Java as a Programming Language Object Oriented, through the design and implementation of a learning methodology based on integration of tools of Information Technology and Communications as are Cmap Tools for knowledge modeling and BlueJ as an integrated development environment for interactive learning to program in Java. This study will apply to students from 11° in a regular programming course, in the period of two bimonthly periods of classes and will be through the comparison of two segments of the student population, which will be devoted in a parallel form in the process of learning this programming language. Categories and Subject Descriptors D.1.5 [Software]: Object Oriented Programming. General Terms Documentation, Experimentation, Verification. Keywords BlueJ, concept, Cmap Tools, collaboration, extreme programming, GUI, Java, Karel++, concept maps, linking words, marking software, ObjectKarel, OO, OOP, pair programming, proposition, scanning software, WebCT, WEBL. 1. INTRODUCCIÓN La programación orientada a objetos (POO) modela el mundo real, cualquier cosa del mundo puede ser modelada como un objeto. Por ejemplo: una circunferencia es un objeto, un automóvil es un objeto, una ventana es un objeto, un libro es un objeto e incluso un préstamo o una tarjeta de crédito son objetos[1]. De allí que con la POO podemos crear estructurar de programas sobre la base de los objetos, los cuales tienen propiedades (un estado) y un comportamiento que son especificados en su clase. Un programa en Java se denomina orientado a objetos (OO) debido a que la programación en Java se centra en la creación, manipulación y construcción de objetos[1]. Los lenguajes que utilizan este tipo de programación son muchos y entre los más importante se pueden mencionar los siguientes: JAVA, C++, Delphi, Smalltalk, la mayoría de los lenguajes de la plataforma de Microsoft.NET, como Visual Basic.NET, C# y ASP.NET. Tomando en consideración lo antes expuesto, al tratar de introducir la enseñanza de un lenguaje de POO, como lo es Java, debemos tomar en consideración que existe una gran diversidad en las habilidades, velocidad en el aprendizaje y aptitudes de los estudiantes, es por ello que la atención sobre las dificultades que enfrenta una persona no puede ser tratada fácilmente en una clase en la que hay muchos estudiantes, de tal forma que los docentes deben buscar diversas vías alternativas que ayuden a los estudiantes en su aprendizaje[2]. Partiendo de esto, podemos decir que el aprender a programar en un lenguaje de programación es una tarea bastante ardua, para muchos estudiantes difícil y compleja, en la que deben concentrarse en el aprendizaje de los contenidos esenciales para adquirir los conceptos principales del lenguaje y poder así aplicar los conocimientos en el desarrollo progresivo del programa. Aún cuando existan dificultades, el aprendizaje de algún lenguaje de programación en particular resulta bastante interesante, debido a que permite que el desarrollador del software cree la aplicación de acuerdo a los requerimientos que necesita en un momento determinado y de la misma forma le permite modificar la aplicación de acuerdo a las posteriores necesidades que se presenten, tanto durante la realización como también después de la implementación del mismo. Muchos métodos han sido utilizados por los docentes en la enseñanza de la programación, como lo son[2]: La elección de el primer lenguaje de programación; La elección del libro de texto del curso; La elección del ambiente de programación; Variaciones en los métodos de enseñanza; Variaciones en las asignaciones. En este estudio proponemos una nueva metodología a seguir en la enseñanza de Java como lenguaje de POO y la integración de las TIC’s como herramientas de gran ayuda e importancia en el proceso de E-A. El resto del documento está organizado como sigue. La sección 2 presenta una visión general sobre la problemática encontrada. La sección 3 hace referencia a los trabajos relacionados a la investigación y que nos han servido de referencia para la misma. La sección 4 presenta la propuesta de tesis, tecnologías y herramientas y la arquitectura del ambiente. En la sección 5 se presentan breves conclusiones del documento. 2. PROBLEMÁTICA En el ámbito de la educación en los colegios públicos panameños, y muy específicamente en el Centro de Educación Básica General Stella Sierra, el cual es un centro educativo que consta de un Bachillerato en Ciencias con instrumentación en Informática, lo que significa que los egresados de este bachillerato deben tener conocimientos muchos más amplios que el resto en cuanto al área de Informática en sí y más aún sobre Programación, la enseñanza de algún lenguaje de programación tiene muchas deficiencias, entre las que se mencionan las siguientes: Carencia de metodologías adecuadas de enseñanza. Existen deficiencias marcadas en cuanto a la realización de contenidos programáticos basados en competencias. No hay libros de texto definidos para la enseñanza de la programación. En los planes de este bachillerato, se contemplan materias de Programación en los últimos niveles escolares del bachillerato, y no desde niveles previos, de tal forma que los estudiantes puedan ir adquiriendo una base para las materias posteriores. En la Tabla 1 se muestran las materias del área de Informática que se imparten en el centro educativo de acuerdo a los niveles escolares. Tabla 1. Materias de Informática por nivel escolar. Nivel escolar 10° 10° 11° 11° 12° 12° Materia Introducción a la Computadora Utilidad I Programación I Utilidad II Programación II Tendencia Como se muestra en la Tabla 1, en el Nivel 11°, se encuentra dentro del plan de estudio del bachillerato, el lenguaje de programación C; de la misma forma en el Nivel 12° se encuentra dentro del plan de estudio del bachillerato, el lenguaje de programación Visual Basic. Aclaramos que los planes de estudio no se siguen de una manera rígida, sino de acuerdo al criterio de cada uno de los docentes involucrados en la enseñanza. Si bien es cierto Visual Basic es un lenguaje de POO, se requiere de una licencia para su uso, lo que resulta costoso para el centro educativo al momento de adquirir el software para un grupo de aproximadamente 25 computadoras por laboratorio que requiera utilizar este lenguaje. Visual Basic es un software que sólo se ejecuta en plataformas Windows. Java es un software de utilización libre de Sun Microsystems, lo cual permite que el centro educativo no incurra en gastos extras e innecesarios. Java es multiplataforma y tiene la gran ventaja que los programas realizados en este lenguaje pueden ejecutarse en una diversidad de plataformas sin tener la necesidad de modificarlos, por lo que proponemos la utilización de este lenguaje de POO en la realización de este estudio. En las aulas de clases, de manera regular, los estudiantes aprenden las técnicas necesarias para programar de manera tradicional, utilizando el muy conocido tablero, en el que el docente explica ampliamente los conceptos que considere convenientes para que los estudiantes comprendan el tema y se inicien en la programación de un software utilizando la técnica de programación secuencial. Lo que se trata de buscar en nuestra propuesta, es la enseñanza de Java como lenguaje de POO utilizando una nueva metodología de enseñanza, en la que los estudiantes se sientan cómodos y satisfechos con los conocimientos adquiridos a través del curso de programación, enfocando el mismo en la enseñanza de los procesos básicos de un lenguaje de POO y buscando que la enseñanza del mismo lenguaje no sea tan monótona, sino más bien que resulte de la interacción del estudiante con nuevas herramientas tecnológicas que le permitan asimilar el conocimiento con mayor facilidad y obtener un aprendizaje significativo y útil, y de la misma forma que contribuya a que los estudiantes se adentren en la utilización de las Tics con el objetivo de brindarles una pedagogía diferente a la usual y de esta forma aprovechar todo ese potencial que las Tics representan y que no se está explotando en su totalidad. las que se introducía el nuevo material de las sesiones de laboratorio en donde este nuevo material se ponía en práctica. Justificamos nuestra propuesta en la necesidad creciente de contar con nuevos e innovadores métodos de enseñanza en los que se integren a los estudiantes en el uso de nuevas tecnologías que le permitan adquirir conocimiento y de la misma forma que los mantengan actualizados, ya que cada día que transcurre es un nuevo reto a seguir, por lo que se considera necesario hacer nuevas propuestas dentro del campo de la enseñanza en nuestro país. El libro de texto utilizado en este estudio fue Horstmann y todo el material del curso estaba disponible en la página de la Intranet del Departamento de Sistemas de Información y Comunicación (DISC) de Brunel. El material del curso incluía detalles del mismo curso (ejemplos: guías de estudios, horarios, datos de contacto del grupo de trabajo, descargas de software, etc.), copias de las dispositivas de las clases, ejercicios de laboratorio asignados para cada semana, noticias, detalles del trabajo del curso, exámenes de convocatorias anteriores, etc. 3. TRABAJOS RELACIONADOS El ambiente de programación utilizado fue JBuilder de Borland y una librería impresa y personalizada que contenía los métodos I-O por Tony Elliman. Los cursos que terminaban a tiempo eran enviados vía electrónica y los que terminaban de manera tardía se entregaban en discos flexibles. Los exámenes eran de opción múltiple y eran evaluados usando scanning software. A continuación presentamos algunos de los trabajos relacionados con nuestro estudio, en los cuales hemos analizado los hallazgos encontrados y que nos han permitido guiarnos a lo largo de nuestra investigación. 3.1 WEBL (Web Enhanced BlueJ learning) En [2] describen las experiencias sobre la enseñanza de OO en un curso de Programación en el que utilizan Java como medio para enseñar los principios de programación, BlueJ como un ambiente de desarrollo para Java y WebCT como un recurso basado en web; y en la que se considera la experiencia previa de los estudiantes como muy enriquecedoras y positivas. Los resultados del estudio demostraron que existían muchas preocupaciones de que los estudiantes no fueran capaces de programar debido a que los estudiantes esperaban aprender cómo programar en el primer semestre y utilizar el segundos semestre para el aprendizaje de los algoritmos, debido a que el segundo semestre era corto. Debido a esto, antes de iniciar cada año con la materia de “Construct of Programs”, la cual se imparte en los siguientes bachilleratos Computer Science, Information System y Applied Computing, se hacía una revisión de cómo se ha desarrollado el curso en el año anterior y si es necesario se daban cambios para las próximas sesiones del curso, aunque normalmente casi todos los años se realizaban cambios en la enseñanza, en el libro de texto y en el ambiente de programación que se utilizaba[2]. En el periodo 2002-2003, los estudiantes recibían 2 horas teóricas más 2 horas de laboratorio por semana. El equipo docente consistía de 7 académicos y 5 asistentes. Las lecturas de nuevo materiales eran impartidas por 2 docentes y se daban en una sola sesión a todos los estudiantes que matriculaban el curso. Los laboratorios eran responsabilidad de dos tutores, los estudiantes eran divididos en 9 grupos los cuales recibían 2 horas de laboratorios por semana. En este estudio se evaluaron docenas de textos, los cuales generalmente hablaban de cómo programar en Java más no así de cómo construir programas usando Java como lenguaje de programación e indicaban que la mayoría de los libros utilizan un enfoque de procedimientos estándar[2]. Nuevamente el libro de texto fue Horstmann, todo el material del curso estaba disponible en la página de la Intranet del Departamento de Sistemas de Información y Comunicación (DISC) de Brunel y el ambiente de programación utilizado fue JBuilder de Borland y la misma librería impresa. En [2] analizaron el curso en los años anteriores como se muestra a continuación: En el periodo 2000-2001, los estudiantes solo recibían 3 horas de laboratorios, en donde se les enseñaba todo los nuevos materiales dentro de las sesiones de laboratorio. En el periodo 2001-2002, los estudiantes recibían 2 horas teóricas más 2 horas de laboratorio, que eran impartidas por 9 docentes y 2 asistentes (estudiantes de doctorado) y cada grupo de estudiantes era asistido en la enseñanza por un docente diferente quien era libre de escoger cómo presentar el material y en qué tópicos enfatizar, de tal forma que cada grupo de estudiantes tuvo una experiencia única. Luego con el objetivo de proporcionar una experiencia común a los estudiantes se separaron las sesiones en La evaluación del curso consistió en 2 tareas de programación (50%) y un examen de opción múltiple (50%) dividido en 3 secciones y era evaluado usando scanning software, nuevamente los cursos que terminaban a tiempo eran enviados vía electrónica y los que terminaban de manera tardía se entregaban en discos flexibles. Una vez en [2] se evaluaron los años anteriores, se presenta en este estudio en el periodo 2003-2004, un nuevo enfoque al que denominaron WEBL, en el que se utilizó WebCT para facilitar el progreso constante de los estudiantes en el aprendizaje de los principios de la OO con BlueJ. WebCT como sistema de aprendizaje proporciona muchas facilidades a los estudiantes, como son[2]: Acceso a Internet desde cualquier lugar Autenticación a través del identificador de usuario y clave de acceso Permite subir archivos Presentación del trabajo del estudiante Comunicación en el curso a través de noticias y foro WebCT también proporciona muchas facilidades a los docentes, como son[2]: Crear páginas web para el curso Subir diferentes archivos y organizarlos dentro de directorios Crear pruebas y ejercicios cortos Crear presentaciones Crear la lista de la clase Proveer un correcto acceso a los estudiantes y a los asistentes de los docentes Ver y descargas los trabajos presentados por los estudiantes, etc. Como resultado de las evaluaciones hechas a los cursos anteriores, se hicieron los siguientes cambios para el periodo 2003-2004[2]: Un nuevo libro de texto: Barnes and Kolling Un nuevo ambiente de programación: Blue J Un soporte basado en web diferente: WebCT Diferente evaluación Algunas de las razones por las cuales se hicieron los cambios en [2] son: Los estudiantes usaban Java como un lenguaje de procedimientos porque no entendía lo que era OO, de forma que no resolvían problemas diseñando clases. Sólo utilizaban la clase main para escribir problemas monolíticos, debido a que no reconocían la diferencia entre cosas como una clase y la instancia de la clase o herencia y polimorfismo. La página web del curso era basada en la Intranet del DISC, lo cual dificultaba el acceso, especialmente cuando los estudiantes querían acceder a través de medios externos y entre sus debilidades estaba que no contaba con facilidades de interacción para consultas posteriores, subir el trabajo o la posibilidad de crear un foro de discusión, siendo el coreo electrónico su medio de comunicación principal consumía mucho tiempo y esfuerzo del docente al responderle a 400 estudiantes. En cuanto a las asignaciones y a la evaluación, se trabajaron 22 sesiones de laboratorio en el curso, las cuales incluían una prueba que se subía a WebCT por 2 semanas, los cuales fueron en total 16 y representaban un 25% de la nota global y una asignación del curso de programación también representaba un 25% de la nota global, y se le dio la libertad a los estudiantes de crear su propio programa sobre un juego de texto en lugar de asignarle un problema específico como en los años anteriores. El examen era una combinación de múltiples opciones de preguntas (máxima nota B), resolución de preguntas de un problema en donde los estudiantes debían dar sus propias respuestas (esta sección les permitía obtener A)[2]. Con respecto al equipo docente, consistía de 5 docentes, en donde uno de ellos era el líder del curso y 10 asistentes de docentes. El líder del curso era responsable de la organización del curso y su administración que involucraba lo siguiente[2]: La planificación del curso mucho antes de cada sesión académica Distribución clara de las funciones y la asignación de responsabilidades Sesión ordinaria semanal de todo el equipo docente de forma que se puede actuar ante cualquier problema y llegar a una solución con todos los miembros del equipo Coordinación de las actividades Se observa en este estudio que el DISC de Brunel, es un departamento formado por un grupo de docentes preocupados por buscar nuevos métodos de enseñanza, que permita que los estudiantes adquieran de una manera adecuada los conocimientos de la programación. En este estudio los estudiantes experimentaron nuevos cambios que fueron favorables en su aprendizaje de POO, gracias a la introducción del nuevo libro, al fácil y rápido acceso a WebCT, al ambiente de programación BlueJ. Los estudiantes estaban más animados, se mantenían al día en el curso, tenían menos problemas comprendiendo la diferencia entre clases y objetos y comparado con los años anteriores estaban más inclinados a resolver problemas diseñando clases. 3.2 OOP with BlueJ En [3] se presenta la POO como una muy buena herramienta para enseñar a los principiantes las metodologías de programación. De acuerdo a [3], en la Universidad de Macedonia se enseñó a los estudiantes los conceptos principales de programación el segundo semestre con la utilización del lenguaje de programación C y POO en el tercer semestre, que consistía en 2 horas teóricas por semana en donde el docente presentaba el material de la clase con la ayuda de diapositivas, y 2 horas de sesiones de laboratorio por semana en donde generalmente los estudiantes resolvían problemas con la ayuda del instructor o por ellos mismos. En toral 11 horas teóricas y 11 horas de sesiones de laboratorio se impartieron a un aproximado de 45 estudiantes. Todo el curso fue basado en el libro de texto y las sugerencias didácticas que presentaba. Se encontraron en [3] las siguientes dificultades: 1. 2. Dificultades atribuidas a las características especiales de la POO. a) Algunos estudiantes confundían clases con objetos, clases con métodos. b) Los estudiantes encontraron dificultad con las colecciones de tamaño flexibes como ArrayList. c) Un significativo número de estudiantes encontró dificultad para comprender como la herencia múltiple se aplica en Java. d) Algunos estudiantes creían que las clases abstractas, y no interfaces, sólo podían contener métodos abstractos. Un mayor número de estudiantes creía que tanto la clase abstracta y las interfaces sólo pueden contener métodos abstractos. e) Muchos estudiantes malinterpretan la información suministrada a partir de los diagramas de clases. f) Debilidad en la descripción de una función, rol de las clases, métodos y campos. g) Uno inadecuado de las llamadas a métodos y la notación de punto. Dificultades que pueden ser atribuidas a las características del ambiente de programación. a) En algunos casos las dificultades parecen tener su raíz en la importancia que le da el autor de BlueJ a las representaciones gráficas de las estructuras de un proyecto y sus elementos (clases, métodos, objetos) en relación con el código. b) En otros casos se observó que los estudiantes presentaban dificultades en extraer información del código del código del programa pero extraían información clara de los diagramas creados con BlueJ. c) En casos en los que los estudiantes tenían que desrrollar nuevo código se observó mayor cantidad de respuestas erróneas o simplemente no había respuesta, lo que podía atribuirse en parte a la falta de equilibrio entre las representaciones gráficas y el código textual. De acuerdo a estudios anteriores de [3]se presentan algunas dificultades encontradas en la enseñanza de la POO, como lo son: a. b. c. La falta de entornos de programación diseñados adecuadamente para la enseñanza de POO en general, y para los programadores novatos más específicamente. La transición del paradigma de la programación procedimental hacia el paradigma de la POO. La filosofía de la enseñanza que está basada en el enfoque seguido por la programación procedimental, lo que quiere decir que los conceptos de POO como las clases, objetos, herencia, y así sucesivamente son enseñados después de los elementos básicos de un lenguaje de programación, las estructuras de control y sus funciones. En [3] presentan los resultados obtenidos en la enseñanza de la POO durante un semestre de un curso de programación regular en el Departamento de Gestión de Tecnología de la Universidad de Macedonia, en donde presentan los logros, dificultades, errores y conceptos erróneos que los estudiantes encontraron. Este documento intentó estudiar hasta qué punto es efectiva la propuesta de enseñar POO con BlueJ presentada en el libro Objects First with Java: A practical introduction using BlueJ de Kolling and Barnes, el cual se utilizó como libro de texto. La enseñanza del curso de POO fue basado en lecciones del libro y en el ambiente de programación BlueJ. 3.3 Re-designing an OOP course base on BlueJ En [4] se presenta la evolución del rediseño de un curso de POO basado en BlueJ, cuyo estudio tuvo sus inicios en [3], durante un semestre en un curso de programación. El objetivo del curso era que los estudiantes comprendieran y fueran capaces de utilizar los conceptos básicos de POO, o sea la utilización de las librerías de clases básicas, diseño de aplicaciones simples usando la técnica de diseño de Orientación a Objetos (OO) y a la vez programar e implementar programas en Java. La organización del curso de POO se basó en los siguientes puntos[4]: a. b. c. Los lineamientos básicos para enseñar POO presentado por Kolling y Rosenberg en su publicación “Guidelines for Teaching Object Orientation with Java”. El ambiente de programación BlueJ. El libro “Objects First with Java: A practical introduction using BlueJ”de Kolling and Barnes, el cual tiene una muy buena propuesta de enseñanza para introducir a los estudiantes en la POO. El tercer semestre de este curso fue evaluado por primera vez en el periodo 2005-2006 en [3]. Nuevamente los conceptos principales de programación se impartieron a los estudiantes en el segundo semestre con la utilización del lenguaje de programación C y POO en el tercer semestre, que consistía en 2 horas teóricas por semana y 2 horas de sesiones de laboratorio por semana. En toral 11 horas teóricas y 11 horas de sesiones de laboratorio se impartieron a un aproximado de 45 estudiantes[4]. Los estudiantes debían presentar dos o más asignaciones por semana siguiendo los lineamientos presentados por Kolling and Rosenberg, basados principalmente en la segunda y tercera directriz que afirman que un estudiante debe empezar por hacer pequeños cambios en el código existente y el aprendizaje de la lectura del código respectivamente. Así que las asignaciones se basan en el trabajo con proyectos existentes que tienen que ser estudiados y entendidos para luego ser cambiado y/o ampliados, por lo general mejorando un método existente o agregando uno nuevo y con menos frecuencia adicionando estados (campos) o nuevas clases[4]. En la Tabla 2 se muestran los contenidos del curso de rediseño presentado en [4]: Tabla 2. Contenidos del curso de rediseño. Lección Contenido 1. Objetos y clases, parámetros, el ambiente BlueJ. 2. Comprendiendo definición de las clases: definición de las clases, campos, constructores, métodos. 3. Interacción con los objetos: objetos creando objetos, constructores múltiples. 4. Agrupando objetos en colecciones de tamaños flexibles (ArrayList), colecciones de tamaño fijo (Array). 5. Usando librerías de clases (la clase Random, HashMap, HashSet). 6. Pruebas y Depuración. 7. Diseñando clases: cohesión, duplicación de código, reutilización de código. 8. Improvisando estructuras con herencia. 9. Polimorfismo, overriding. 10. Clases abstractas e interfaces. 11. Métodos estáticos ejecutando sin BlueJ. el método principal, Este curso fue evaluado mediante el estudio a fondo de las respuestas dadas a los cuestionarios, las soluciones a los problemas resueltos tanto en el laboratorio como en el hogar y los resultados de los exámenes finales[4]. Los errores, malentendidos y dificultades que se registraron en [4] fueron clasificados en tres categorías, como se muestra a continuación: a. Dificultades encontradas en casi todos los cursos de iniciación a la programación, sin importar cuál sea el paradigma de programación. b. Dificultades atribuidas a las características especiales de la POO. c. Dificultades que puedan atribuirse a toda la organización del curso y sobre todo a las características del entorno de programación. En [4] las dos primeras categorías de las dificultades que se caracterizan como un aspecto intrínseco al aprendizaje de programación, mientras que la tercera categoría la relacionan estrechamente con el diseño del curso[4]. 3.4 Object Karel and BlueJ El curso presentado en [5] fue enseñado por primera vez en el periodo 2005-2006, estaba basado en el ambiente BlueJ, acompañado del libro de texto “Objects First with Java: A practical introduction using BlueJ”de Kolling and Barnes y de los lineamientos para la enseñanza de BlueJ, con una organización de 11 horas de sesiones teóricas y 11 horas de sesiones de laboratorio. En este estudio se hacen algunos cambios con respecto al estudio anterior y se utiliza el ambiente de programación BlueJ y se introduce a los estudiantes en los conceptos principales de POO con la ayuda del micromundo de programación ObjectKarel, el cual está basado en Karel++[5]. También se mencionan en [5] algunas dificultades que se presentaron en el estudio previo, las cuales se mencionan a continuación: Típicas: aquellas dificultades que fueron encontradas y que son independientes del paradigma de programación. Dificultades que fueron atribuidas a las características especiales del ambiente BlueJ, como: a. Constructores b. Instanciación de objetos c. Métodos “set” (mutadores) d. Métodos “get” (de acceso) e. Llamada al método f. Modificación de accesos g. Colección de objetos h. Herencia i. Clases abstractas e interfaces Luego, en el rediseño del curso presentado en [4] se presentaron dificultades como: Los estudiantes usaban la GUI de BlueJ para la creación de objetos y la llamada a sus métodos en las primeras tres lecciones y en la cuarta lección (en lugar de la onceava en el primer curso) iniciaron el uso del método principal. Los estudiantes fueron cuidadosos en la utilización de las características de BlueJ y después de la cuarta lección se les pidió lograr los resultados esperados y también proveer el código fuente. Los estudiantes comenzaron a desarrollar proyectos sencillos de cero mucho antes en el semestre. La sexta lección acerca de depuración fue omitida y en su lugar se dedicaron dos lecciones a la colección de objetos (arrayList) que fue uno de los conceptos más difíciles para los estudiantes. Situaciones especiales de didáctica y fueron diseñadas en base a los resultados obtenidos de la evaluación. De acuerdo a los resultados obtenidos en [4], la evaluación del rediseño del curso dio mejores resultados que la primera versión del curso, ya que algunas dificultades que se atribuyeron a las características de BlueJ y al uso tardío de la función main fueron eliminadas, al igual que algunas dificultades que fueron atribuidas a proyectos existentes se resolvieron de manera satisfactoria[5]. Se presentan en [5], cambios en la secuencia de actividades y en las asignaciones utilizadas para comprender ArrayList. Se introduce ObjectKarel con la finalidad de que los estudiantes adquirieran el conocimiento. De esta forma se presentan en la Tabla 3 y 4 los resultados comparativos de las tres versiones de este curso, basados en los exámenes escritos[5]. Tabla 3. Respuestas correctas. (2.1) Constructor (2.3) Método "set" (2.4) Método "get" (2.7) ArrayList (2.2, 2.5) Main 54 79 88 76 45 54 50 79 4 0 89 81 84 59 52 58 56 72 8 3 Correctas(%) 3ro:08-09 Respondidas(%) Correctas(%) 2do:06-07 Respondidas(%) Correctas(%) Respondidas(%) 1ero:05-06 72 73 87 14 9 94 95 97 47 76 Perdiendo argumentos en la llamada de métodos. 53 Perdiendo () en métodos sin 1 argumentos. 27 Llamando un método no nulo como 1 nulo. 33 Los parámetros en un constructor tienen los mismos nombres que los 2.1 campos pero “estos” no son usados. 8 Campos con valores asignados de identificadores no declarados y no de 2.1 los parámetros. 0 2.1 Mala iniciación de campos. 29 2.1 El cuerpo del constructor está vacío. 8 2.2 El tipo de variable objeto se pierde. 13 Los nombres de los campos que son actualizados son usados como 2.3 argumentos en métodos “set”. 0 Declarando como un tipo de retorno de un método “set” el parámetro (en 2.3 vez de vacío). 15 Método – Fusión de campo en 2.4 método “get”. 7 Acceso directo a campos privados 2.4, fuera de sus clases en lugar de usar el 2.6 método “get”. 32 Llamando un método sin su 2.5 instancia. 7 2.7 Manipulando un ArrayList. 1 4. UNA METODOLOGÍA DE APRENDIZAJE DE PROGRAMACIÓN ORIENTADO A OBJETOS (POO) BASADA EN EXTREME PROGRAMMING (XP) Con el objetivo principal de establecer una nueva forma de enseñanza en cuanto a la programación se refiere, se plantea el estudio comparativo de dos metodologías diferentes en la enseñanza de la POO, de tal forma que se propone como un método innovador y provechoso tanto para docentes como para los estudiantes, la integración de las Tics en la metodología didáctica de la enseñanza de la POO, utilizando dos herramientas tecnológicas muy importantes, las cuales serán de gran ayuda en el proceso de E-A y se muestran a continuación. 4.1 Tecnologías y Herramientas Tabla 4. Dificultades de los estudiantes (%). 1ero. con los estudiantes. Estos hallazgos permiten a los docentes el buscar nuevas metodologías de enseñanza que faciliten a los estudiantes el aprendizaje del paradigma de programación. 2do. 3ro. 33 45 6 0 6 30 0 2 7 33 0 0 7 23 0 0 6 0 12 5 0 0 3 0 12 0 Después de analizar el estudio presentado en [5], se observa que después de realizar una serie de estudios sobre cómo enseñar POO y qué herramientas utilizar en la enseñanza, se encontraron muchas dificultades, pero también se lograron grandes avances 4.1.1 Cmap Tools Los Mapas Conceptuales, tal y como se conocen actualmente fueron desarrollados en 1972 dentro de un proyecto de investigación a cargo del Dr. Joseph D. Novak, en la Universidad de Cornell. En 1984, Novak propuso la utilización de los mapas conceptuales para representar el conocimiento como una red consistente de nodos que representan los conceptos y los enlaces que representan las relaciones entre los conceptos[6]. En un mapa conceptual los conceptos son la generalización del conocimiento de las ideas transmitidas de alguna forma, por ejemplo, libros, documentos, lecturas, etc. Las proposiciones expresan como los conceptos están relacionados entre sí, de tal forma que un mapa conceptual está compuesto de conceptos, proposiciones y palabras de enlace, las cuales permiten darle sentido completo a la proposición[7]. Los mapas conceptuales son representaciones bidimensionales de las estructuras cognitivas, en donde se muestran las jerarquías y las interconexiones de los conceptos involucrados. Es una importante herramienta para desarrollar habilidades intuitivas, lo cual es importante para centrarse en lo que se conoce y en la nueva información, de tal forma que las habilidades intuitivas nos permiten establecer las relaciones, o sea organizar la información por grupos[7]. Los mapas conceptuales son representaciones gráficas de las relaciones entre conceptos, en donde sus interrelaciones representan una estructura de conocimiento (esquema mental) que el estudiante puede recordar en su memoria por un largo periodo de tiempo, debido a que en la construcción de mapas lo que se busca es enlazar conceptos relevantes al tema, que sean de gran importancia para el desarrollo y comprensión de los temas que se estén tratando[6-9]. En [7] se presentan las características de los mapas conceptuales: a. b. c. Un mapa conceptual jerárquico contiene el concepto más general en la parte superior y la más específica en la parte inferior. Los enlaces cruzados son utilizados para enlazar diferentes segmentos en el mapa. Los ejemplos ayudan a aclarar el significado de los conceptos. Lineamientos a la hora de hacer un buen mapa conceptual[7]: Tomar nota de los conceptos más importantes. Tomar nota de los conceptos más específicos para cada uno de los conceptos principales, para agrupar las ideas relacionadas. Articular entre las ideas principales Escribir palabras de enlace. Realizar el entrecruzamiento entre segmentos del mapa (punta de flecha hacia arriba para vincular). Etiquetar las líneas con la vinculación de las palabras o frases de enlace, para formar declaraciones significativas. Cmaps Tool es una herramienta que permite la construcción del conocimiento, de tal forma que los estudiantes adquieren nuevos conocimientos a través de la construcción de mapas conceptuales. Cmap Tools es un programa creado por el Instituto de Ciencia Cognitiva (IHMC) de la Universidad de West Florida, utilizado alrededor del mundo por millones de personas, desde niños que se encuentran recibiendo educación básica hasta científicos de la NASA para expresar y compartir su conocimiento en cualquier tema. Esta herramienta es de utilización libre y está disponible en más de quince idiomas. Está basado en una arquitectura clienteservidor[9]. Cmap Tools fue creado en Java, es multiplataforma, nos permite adentrarnos en el campo de la enseñanza significativa con recursos multimedia, permitiéndole a los estudiantes el trabajar de forma colaborativa con otros estudiantes a nivel local individual como en red, donde el estudiante tendrá la oportunidad de investigar sobre temas relacionados, resolver sus dudas, complementar sus trabajos, etc. Esta herramienta permite el intercambio y publicación de modelos de conocimiento representados como mapas conceptuales[9]. También permite al estudiante indexar diferentes tipos de recursos entre los cuales están: Imágenes PNG, GIF, JPEG, Páginas web, Películas de vídeo, Ficheros PDF de Adobe, Documentos de audio, Documentos de texto en formato TXT[9]. Otras de sus bondades es el poder exportar el proyecto completo a HTML, convirtiendo los mismos en páginas web de manera inmediata y permitiéndole ser publicados en Internet gracias a los servidores públicos con que cuenta la red de Cmap Tools[9]. Las principales características de este programa son: Entorno de trabajo sencillo, claro e intuitivo; ventana de estilos (Formato/Estilos) que facilita el trabajo; conceptos que se pueden ilustrar con símbolos, imágenes, colores, formas, sombras, fuentes y estilos; conceptos que se relacionan fácilmente mediante enlaces; relaciones que se explican con un texto en los enlaces, textos en los que se pueden cambiar de minúscula a mayúscula y viceversa; conceptos que pueden cambiarse de posición sin romper los enlaces, solo se necesita arrastrarlos, u organizarlos automáticamente[9]. 4.1.2 BlueJ BlueJ, es un ambiente de desarrollo integrado e interactivo, diseñado específicamente como un ambiente para enseñar la introducción a la POO en Java, siendo esta tecnología muy útil para la enseñanza del paradigma de la Orientación a Objetos (OO). Este ambiente de programación fue desarrollado por Deakin University, Melbourne, Australia y la Universidad de Kent, Kent, USA[10]. BlueJ consta de un editor, un compilador, una JVM y un depurador. Uno de sus principales atractivos es que incluye una ventana en la que despliega gráficamente la estructura de clases parecido a UML y soporta la generación de código a partir de los diagramas. Este sistema puede ser descargado de forma gratuita de la Internet. En la actualidad muchos libros usan BlueJ o hacen referencia de este entorno como un mecanismo para la ejecución de ejercicios de programación[10]. Las principales fortalezas de BlueJ son las siguientes[2, 10]: Se proporciona una visualización de la estructura de clases, muestra automáticamente en un diagrama UML las representaciones de las clases y sus relaciones en un proyecto. Los usuarios pueden crear directamente objetos de cualquier clase y luego interactuar con los métodos. Se puede probar un método inmediatamente después de que se ha escrito, sin la necesidad de escribir pruebas piloto, lo que convierte esta fortaleza en una ayuda muy valiosa en la comprensión de conceptos y detalles del lenguaje. Además de proporcionar un editor de texto especializado en Java en cierta medida, permite que el usuario compile el código resultante y cree instancias de objetos, con independencia de cualquier programa en particular, de tal forma que los objetos que son instanciados se ejecutan como parte del entorno BlueJ, pero para el usuario parecen existir de manera independiente. 4.1.3 Extreme Programming (XP) Las metodologías ágiles de desarrollo de software se centran en el factor humano, así como también en el producto de software, el cual se basa en pequeñas versiones, dándole más valor al individuo, al trabajo colaborativo y al desarrollo de software en conjunto con el cliente, quien puede monitorear constantemente el producto de software a través de su desarrollo[11]. La programación extrema como tal, es la metodología ágil de desarrollo de software más popular actualmente, ya que busca cambiar el concepto tradicional de desarrollo de software, en el que se centra la atención en establecer todos los requerimientos del software al inicio del proyecto de forma que el mismo no requiera de modificaciones posteriores, por un nuevo enfoque en el que se busca la flexibilidad del software a modificaciones cuando se consideren necesarias y que las mismas no afecten el proyecto. Se muestra a continuación la Tabla No. 5, que contiene las reglas en las cuales se basa la programación extrema[11] y cómo podrían ser aplicadas en nuestro proyecto. Consideramos que la utilización de las tecnologías y herramientas propuestas nos servirán de apoyo en la realización de nuestro proyecto de investigación gracias a las características de cada una de ellas. Tabla 5. Reglas de XP y su aplicación en la Propuesta: Se trabajará con la carga horaria establecida por el centro académico para el curso regular de Programación I, que consiste en 3 horas semanales de sesiones teóricas y dos horas semanales de sesiones de laboratorio, en donde se trabajará con grupos de aproximadamente 30 a 35 estudiantes, en aulas que cuentan con aproximadamente con 20 computadoras. Este estudio se aplicará en un periodo comprendido a dos bimestres de clases regulares. 1. Equipo completo: Se formarán equipos completos por salones de clases, incluyendo al docente, quien en este caso desempeña las funciones del cliente. 2. Planificación: En este caso el docente es quien planificará los requerimientos y en qué orden se trabajarán y revisará continuamente. 3. Test del cliente: En este caso el docente propone las pruebas para validar si las mini versiones están funcionando. 4. Versiones Pequeñas: Debido al área de aplicación de la propuesta, se trabajarán versiones pequeñas y útiles de software. 5. Diseño simple: Se les solicitará desarrollar las mini versiones de la forma más sencilla posible. 6. Pareja de programadores: Se formarán grupos de trabajo de dos estudiantes por estación de trabajo y se rotarán una vez por cada sesión de laboratorio, de tal forma que el código sea conocido por todos los integrantes del proyecto. 7. Desarrollo guiado por pruebas automáticas: BlueJ posee una función que permite realizarse pruebas a las mini versiones que se vayan creando. 8. Mejora del diseño: La rotación de pares por sesiones de clase, permite que se mejore el diseño del software. 9. Integración continua: Integrar continuamente las mini versiones al proyecto. 10. El código es de todos: Todos los pares serán rotados y trabajarán en las mini versiones de los demás grupos y el código será propiedad de todos los colaboradores del proyecto. 11. Normas de codificación: Mantener un estilo común de desarrollo (por definir). 12. Metáforas: Cada parte del programa será definida por nombres para que sean entendibles por todos los integrantes del equipo. 13. Ritmo sostenible: Se trabajará en todas las sesiones de clases, sin interrupciones. 4.2 Arquitectura del Ambiente a Utilizar La presente investigación tiene como principal objetivo el estudio comparativo de dos segmentos de la población estudiantil, del mismo nivel escolar, en este caso de 11°, los cuales, de forma paralela, se dedicarán al aprendizaje de Java, como un lenguaje de POO, utilizando diferentes metodologías de enseñanza en el proceso de Enseñanza-Aprendizaje (E-A). El primer grupo trabajará en el estudio de Java de manera tradicional, utilizando programación secuencial, la cual se basa en la creación de programas a partir de un conjunto de sentencias escritas de forma secuencial y cuya ejecución sigue dicha secuencia. En cuanto a la evaluación, la cual “es una actividad o proceso sistemático de identificación, recogida o tratamiento de datos sobre elementos o hechos educativos, con el objetivo de valorarlos primero y, sobre dicha valoración, tomar decisiones” (García Ramos, 1989). La evaluación formativa es el tipo de evaluación que se utiliza preferentemente como estrategia para mejorar y ajustar sobre la marcha los procesos educativos con la finalidad de conseguir las metas u objetivos planteados. Esta tipo de evaluación es considerada la más apropiada para la evaluación de procesos, ya que sus resultados se empleen para mejorar los mismos. La evaluación formativa es considerada como una evaluación continua. En cuanto a la evaluación formativa, el primer grupo de estudiantes, recibirá en el aula de clases las explicaciones necesarias sobre los temas relevantes del lenguaje Java, para que los mismos puedan comprender de una manera clara el contenido de la clase. Se les asignará la realización de una tarea semanal sobre los tópicos dados previamente en clase, lo que contribuirá con su formación de conocimientos con respecto a los temas tratados previamente en clase y de la misma forma permitirá al docente visualizar las deficiencias de los estudiantes, de tal forma de tomar los correctivos adecuados e ir mejorando progresivamente. Todo el material impartido en clase posteriormente se tratará en las horas de laboratorio. Para medir el rendimiento académico de los estudiantes en este proceso, la evaluación sumativa de los conocimientos adquiridos se dará a través de asignaciones semanales (tareas) relacionadas con los temas tratados en clases y una prueba o ejercicio cada dos semanas para medir tanto los conocimientos adquiridos como deficiencias que los estudiantes vayan presentando en el transcurso de la materia de Programación I. En la figura 1, se muestra el enfoque tradicional de enseñanza de la programación. Figura 2. Metodología propuesta para la enseñanza de la POO, utilizando Cmap Tools y BlueJ. Figura 1. Mapa Conceptual del enfoque tradicional de enseñanza de la programación, creado con Cmap Tools. De forma paralela, se trabajará con un segundo grupo de estudiantes del mismo nivel escolar, quienes estarán también orientados al estudio del mismo lenguaje de programación. Para este segundo grupo, la evaluación formativa se trabajará diferente, con la ayuda de Cmap Tools, la cual es una herramienta muy útil para organizar y representar el conocimiento a través de mapas conceptuales, la misma permitirá que los estudiantes comprendan claramente los conceptos generales de programación y el modelado del algoritmo, que no es más que el análisis del problema. Gracias a Cmap Tools, los estudiantes aprenderán los conceptos básicos del lenguaje de POO. Terminada la etapa de aprendizaje de conceptos, los estudiantes serán capaces de iniciar en la fase de implementación del algoritmo en un lenguaje de POO, en este caso Java, utilizando la herramienta BlueJ, la cual es una interfaz para el desarrollo de aplicaciones en Java a un nivel introductorio. También se les asignará la realización de una tarea semanal sobre los tópicos dados previamente en clase con el objetivo de reforzar los conocimientos adquiridos previamente. En la figura 2, se presenta un esquema de la propuesta, utilizando las tecnologías Cmap Tools y Blue J. Una vez que los estudiantes hayan adquirido los conocimientos necesarios sobre Java, como lenguaje de POO a través de los mapas conceptuales, se les introducirá en la programación en Java, utilizando la herramienta BlueJ, la cual es una interfaz para el desarrollo de aplicaciones en Java. BlueJ es un ambiente que permite que los principiantes aprendan POO de una manera fácil[3]. Al igual que en el primer caso se les aplicará a los estudiantes evaluaciones sumativas, que comprende una tarea por semana y una prueba o ejercicio cada dos semanas, con el objetivo de medir el rendimiento académico de los estudiantes. Los contenidos propuestos para este estudio (sujetos a modificación) se presentan en la Tabla 5, que se muestra a continuación: Tabla 5. Contenidos propuestos para el curso de Programación I. Lección Contenido de la lección 1. La POO como base de Java 2. Instrucciones Básicas (Declaración, Sintaxis) 3. Sentencias de Decisiones 4. Ciclos 5. Funciones y Métodos 6. Arreglos unidimensionales 7. Recursividad 8. Herencia 9. Polimorfismo 10. Técnicas de Ordenamiento 5. CONCLUSIONES Es necesario preparar adecuadamente a los jóvenes que egresan cada año de Bachilleratos en Informática o áreas afines, en los que el estudio de algún lenguaje de programación resulta imprescindible. Como docentes, debemos contribuir a que los estudiantes que cada año intentan ingresar a universidades que ofrecen carreras del área de Informática, tengan una mejor preparación académica a la hora de hacer las pruebas de admisión para ser admitidos en alguna carrera de su área de formación y evitarles en gran medida que su experiencia resulte frustrante. La enseñanza de la POO no es una tarea simple, sin embargo muchos docentes preocupados por el aprendizaje de sus estudiantes, buscan nuevas formas de enseñar este paradigma. Con la utilización de las Tics en esta propuesta, se pretende que los estudiantes puedan comprender más claramente los conceptos relacionados con la POO y su posterior implementación en comparación con los métodos tradicionales de enseñanza. 6. REFERENCIAS [1] [2] L. J. Aguilar and M. F. Azuela, Java2. Manual de Programación, 2001. J. Kuljis, "Orienting the Teaching of an Introductory Object-Oriented Programming to Meet the Learning [3] [4] [5] [6] [7] [8] [9] [10] [11] Objective," presented at the 26th Int. Conf. Information Techonlogy Interfaces ITI 2004, Cavtat, Croatia, June 7-10, 2004. S. Xinogalos, et al., "Teaching OOP with BlueJ: A Case Study," in Sixth International Conference on Advanced Learning Technologies (ICALT'06), 2006. S. Xinogalos, et al., "Re-designing an OOP course based on BlueJ," presented at the Seventh International Conference on Advanced Learning Technologies (ICALT'07), 2007. S. Xinogalos and M. Satratzemi, "A Long-Term Evaluation and Reformation of and Object Oriented Design and Programming Course," presented at the 2009 Ninth IEEE Conference on Advanced Learning Technologies, 2009. P.-C. Sue, et al., "A New Approach for Constructing the Concept Map," presented at the IEEE International Conference on Advanced Learning Technologies (ICALT'04), 2004. G. K. Saha, "Understanding Dependable Computing Concepts," November 6-12, 2007. S. L. Miertschin and C. L. Willis, "Using Concept Maps to Navigate Complex Learning Environment," 2007. IHMC. (2010, May 18). http://cmap.ihmc.us. M. Farrow and P. J. B. King, "Experiences With Online Programming Examinations," May 2008. P. L. Ph.D. and M. C. P. Ph.D., "Metodologías ágiles para el desarrollo de software: eXtreme Programming (XP)."