GRADO EN INGENIERÍA INFORMÁTICA GRADO EN MATEMÁTICA COMPUTACIONAL EI1008 - MT1008 Programación II Curso 2010-2011 Departamento de Lenguajes y Sistemas Informáticos
1. Datos de la asignatura Carácter: Formación básica Curso: Primero Semestre: Segundo Créditos ECTS: 6 Idioma: Lenguas oficiales de la Universitat Jaume I 2. Contextualización En contra de lo que podría pensar un estudiante al principio de su formación académica, los buenos programadores no son aquellos que conocen muchos lenguajes de programación o que conocen con detalle la sintaxis del lenguaje de moda. Los buenos programadores son aquellos que son capaces de escribir buenos programas. Y los buenos programas, entre otras características deseables, deben hacer un uso eficiente de los recursos computacionales (principalmente, tiempo de CPU y memoria), deben estar libres de errores y deben estar bien estructurados para ser fáciles de depurar y mantener. Por ello, escribir buenos programas a menudo requiere saber elegir los algoritmos y estructuras de datos más adecuados para cada problema a resolver, conocer los principales esquemas algorítmicos y saber reconocer instancias de los mismos, saber comparar el coste computacional de diferentes soluciones para elegir la más eficiente, conocer técnicas de programación orientada a objetos y saber aplicarlas adecuadamente, conocer técnicas de prueba de software, etc. En los planes de estudios actuales, la mayor parte de estos temas se introducen en la asignatura Programación II y se desarrollan en profundidad en diferentes asignaturas de cursos posteriores. 3. Conocimientos previos requeridos Para el seguimiento de esta asignatura es imprescindible haber cursado previamente la asignatura Programación I u otra de carácter equivalente. 4. Contenidos 4.1. Contenidos de las clases de teoría Módulo 0. Revisión de conceptos básicos de programación. - Tipos simples, expresiones y variables. - Estructuras de control de flujo. Selección e iteración. - Tipos estructurados. Vectores y cadenas. - Uso de clases y objetos. - Métodos y parámetros.
Módulo 1. Algoritmos y complejidad computacional. - Recursión. - Introducción a la complejidad algorítmica. - Algoritmos de búsqueda y ordenación. - Esquemas algorítmicos básicos. Módulo 2. Programación orientada a objetos. - Implementación de clases. - Excepciones. - Diseño y uso de bibliotecas. Módulo 3. Estructuras de datos básicas con memoria dinámica. - Listas enlazadas. - Pilas. - Colas. - Diccionarios. 4.2. Contenidos de las prácticas de laboratorio Módulo1. Introducción a la programación en Java. - Entornos integrados de desarrollo: Eclipse para Java. - Tipos simples, expresiones y variables. - Estructuras de control de flujo. Selección e iteración. - Tipos estructurados. Vectores y cadenas. - Uso de clases y objetos. - Métodos y parámetros. - Entrada/salida. Archivos y flujos de datos. - Recursión. - Algoritmos de búsqueda y ordenación. Módulo 2. Programación orientada a objetos en Java. - Implementación de clases y objetos. - Excepciones. - Diseño y uso de bibliotecas. Módulo 3. Diseño e implementación de estructuras de datos en Java. - Listas enlazadas. - Pilas. - Colas. - Diccionarios. 4.3. Competencias Al finalizar el curso el estudiante será capaz de: - usar efectivamente un entorno integrado de desarrollo, - modelar objetos sencillos con clases a partir de una especificación, - usar bibliotecas existentes en el desarrollo de programas, - implementar bibliotecas que permitan reutilización de código en problemas sencillos,
- utilizar implementaciones estándar de las siguientes estructuras de datos: pila, cola, lista enlazada, diccionario, - implementar las siguientes estructuras de datos cumpliendo ciertas especificaciones: pila, cola, lista enlazada, diccionario, - implementar programas que usen flujos de datos, - explicar el funcionamiento de una función recursiva sencilla, - dadas unas especificaciones, diseñar e implementar un programa de tamaño pequeño acompañado de baterías sencillas de prueba, - calcular cotas asintóticas para los costes espacial y temporal de algoritmos sencillos. Además, las prácticas de la asignatura pretenden que el estudiante refuerce los conocimientos teóricos estudiados y mejore su experiencia en la resolución de problemas de programación. 5. Bibliografía Bibliografía básica - H.M. Deitel, P.J. Deitel. Java: cómo programar, 7ª ed., Pearson Educación, 2008. ISBN: 9789702611905. - M.A. Weiss. Estructuras de datos en Java, 1ª ed., Pearson Addison-Wesley, 2000. ISBN: 9788478290352. Bibliografía complementaria - F.J. Ceballos. Java 2: lenguaje y aplicaciones, 2ª ed., Ra-Ma, 2006. ISBN: 9788478977451. - B. Eckel. Piensa en Java, Pearson, 4ª ed., 2007. ISBN: 9788489660342. - P.J. Deitel, H.M. Deitel. Java How to Program: Late Objects Version, 8th ed., Prentice Hall, 2009. ISBN: 9780136123712. - M.A. Weiss. Data structures and algorithm analysis in Java, 2nd ed., Addison-Wesley, 2007. ISBN: 9788478290352. 6. Evaluación La evaluación de la asignatura constará de: - Evaluación continua de teoría (25%) Durante el curso, el estudiante tendrá que realizar una serie de pruebas individuales y escritas en las clases de teoría. Las pruebas se realizarán tras finalizar cada uno de los cuatro módulos teóricos, aunque podría considerarse la posibilidad de realizar un mayor número de pruebas. De entre todas las pruebas realizadas, se descartará para cada estudiante aquella en la que haya obtenido la peor puntuación.
- Evaluación continua de prácticas (25%) Las prácticas se realizarán por parejas. No obstante, se permitirá realizarlas individualmente a quien quiera asumir la sobrecarga de trabajo que esto supone. La evaluación de la parte práctica sigue el mismo esquema que la evaluación continua de las clases de teoría. Es decir, el estudiante tendrá que realizar una serie de pruebas individuales y escritas en las clases de laboratorio. Las pruebas se realizarán tras finalizar cada uno de los módulos prácticos, aunque podría considerarse la posibilidad de realizar un mayor número de pruebas. De entre todas las pruebas realizadas, se descartará para cada estudiante aquella en la que haya obtenido la peor puntuación. - Examen final (50%) Al finalizar la asignatura se realizará una prueba escrita que será la misma para los dos grupos de teoría. Para aprobar la asignatura es necesario obtener 5 o más puntos sobre 10 en el promedio ponderado de todas las pruebas de evaluación (teoría, prácticas y examen). 7. Planificación Horas Presenciales Horas No Semana Teoría Prácticas Presenciales 1 M0: Revisión de conceptos básicos 2 de programación (5h) 3 M1: Introducción a la programación M1: Algoritmos y complejidad 4 en Java (9h) computacional (7,5h) 5 6 M2: Programación orientada a 7 objetos (7,5h) 8 M2: Programación orientada a 9 M3: Estructuras de datos básicas objetos en Java (7,5h) 10 con memoria dinámica (7,5h) 11 12 Repaso (3,5h) M3: Diseño e implementación de 13 5h estructuras de datos en Java (6h) 14 5h Magdalena 8h Semana Santa 8h Evaluación (6h)