Download PROGRAMACIÓN AVANZADA Grado en Ingeniería de
Document related concepts
Transcript
PROGRAMACIÓN AVANZADA Grado en Ingeniería de Computadores Universidad de Alcalá Curso Académico 2010/11 Curso 2º – Cuatrimestre 2º GUÍA DOCENTE Nombre de la asignatura: Código: Titulación en la que se imparte: Departamento y Área de Conocimiento: Carácter: Créditos ECTS: Curso: PROGRAMACION AVANZADA 780014 IC CIENCIAS DE LA COMPUTACION OBLIGATORIA 6 2º Profesorado: Horario de Tutoría: Idioma en el que se imparte: Español 1. PRESENTACIÓN La asignatura Programación Avanzada pretende profundizar en conceptos de programación que perfeccionan las técnicas de programación conocidas por los alumnos y que presentan herramientas nuevas a la hora de enfrentarse a la resolución de problemas mediante programas. Prerrequisitos y Recomendaciones Es obligatorio haber cursado la asignatura Programación. 2. COMPETENCIAS Esta asignatura, y de forma más amplia la materia de la que forma parte, desarrolla en el alumno las siguientes competencias: Competencias de la materia 1. Conocer el concepto de dato como representación y medida de elementos del mundo real. 2. Conocer y exponer la estructura física y lógica de datos que representan números, caracteres, registros, ficheros. 3. Conocer los conceptos de clase, tipo abstracto de datos y objeto. 4. Conocer los fundamentos de la orientación a objetos y ser capaz identificar las diferencias entre la representación basada en objetos y los modelos de flujo de datos. 5. Desarrollar la habilidad de crear soluciones algorítmicas a problemas y ser capaz de representarla como programa u objetos. 6. Conocer la estrategia de implementación descendente (topdown). 7. Ser capaz de realizar una implementación mediante objetos 8. Conocer el diseño modular y los conceptos cohesión y acoplamiento. 9. Alcanzar una visión de sistema de la verificación y validación. 10. Conocer entornos de programación, herramientas de desarrollo y entornos gráficos de desarrollo, variados 11. Conocer los conceptos y técnicas de la manipulación de ficheros mediante ejemplos simples. 12. Conocer los conceptos de las estructuras abstractas de datos y su uso en programas y aplicaciones. 13. Conocer la resolución de problemas que impliquen uso de ficheros y bases de datos. 14. Conocer técnicas de desarrollo, diseño, prueba y depuración aplicadas a problemas. 15. Conocer las capacidades y limitaciones de los lenguajes de programación más comunes. 16. Describir la evolución de los lenguajes de programación los diferentes paradigmas disponibles hoy día y sus principales características 17. Comparar y contrastar entornos de ejecución interpretados y compilados, con sus ventajas y desventajas, así como la importancia de la abstracción en el contexto de las máquinas virtuales y comprender distintas realizaciones prácticas de dicho concepto. 18. Reconocer los modelos formales que sostienen la teoría del procesamiento de lenguajes, i.e., expresiones regulares, teoría de autómatas, y gramáticas. 19. Describir las distintas fases y algoritmos utilizados en la traducción y generación de código desde el programa fuente al ejecutable, incluidas las consideración en la traducción de código dependiente e independiente de la máquina 20. Introducir los conceptos de optimización de código, incluyendo las distintas posibilidades en la elección de código intermedio y fases de optimización. 21. Introducir los conceptos de tipos, ámbito y su comprobación (compatibilidad), en el procesamiento de lenguajes de programación 22. Comprender el concepto de tipo de dato y ser capaz de identificar las características principales de un sistema de tipos. 23. Conocer los fundamentos de la programación funcional y lógica identificando las ventajas e inconvenientes de cada paradigma. 24. Conocer los fundamentos de la programación distribuida, concurrente y paralela, sus algoritmos fundamentales y las ventajas e inconvenientes de cada paradigma. Competencias genéricas: 1. Desarrollar aptitudes para la comunicación oral y escrita 2. Desarrollar capacidad de análisis y síntesis 3. Desarrollar capacidad para la toma de decisiones 4. Desarrollar métodos para la autoorganización y planificación del trabajo individual. 5. Desarrollar métodos para el trabajo en equipo. 6. Motivación por la calidad Competencias específicas: 7. Conocer las capacidades y limitaciones de los lenguajes de programación más comunes. 8. Describir la evolución de los lenguajes de programación los diferentes paradigmas disponibles hoy día y sus principales características 9. Comparar y contrastar entornos de ejecución interpretados y compilados, con sus ventajas y desventajas, así como la importancia de la abstracción en el contexto de las máquinas virtuales y comprender distintas realizaciones prácticas de dicho concepto. 10. Conocer los fundamentos de la programación distribuida, concurrente y paralela, sus algoritmos fundamentales y las ventajas e inconvenientes de cada paradigma. 3. CONTENIDOS Introducción a los paradigmas de programación: Historia de los lenguajes de programación, breve presentación de los distintos paradigmas. Comparación entre paradigmas, su utilidad y su influencia sobre los lenguajes de programación. Introducción a la programación concurrente y conceptos relacionados. Presentación de lo tipos de hardware concurrente y los tipos de programación concurrente posibles. Lenguajes para programación concurrente. Programación concurrente de memoria común. Evolución, mecanismos y programación actual. Programación concurrente distribuida. Evolución hasta sistemas actuales. Cliente servidor y sistemas en capas. Programación de los contenidos Unidades temáticas Temas Total horas, clases, créditos o tiempo de dedicación (*) Paradigmas de programación Paradigmas 8 horas Programación Concurrente Programación Concurrente 8 horas Concurrencia de Memoria Común Conceptos, evolución y mecanismos 8 horas Programación actual 12 horas Mecanismos de Bajo nivel 8 horas Cliente/servidor y sistemas por capas 12 horas Concurrencia Distribuida (*) Incluyen PECs 4. METODOLOGÍAS DE ENSEÑANZA-APRENDIZAJE. ACTIVIDADES FORMATIVAS La asignatura Fundamentos de la programación se organiza como una asignatura cuatrimestral de 6 ECTS (150 horas). En el proceso de enseñanza-aprendizaje de los contenidos anteriormente reseñados se emplearán las siguientes actividades formativas: Clases Teóricas presenciales. Clases Prácticas: resolución de problemas presenciales. Prácticas en Laboratorio presenciales. Tutorías: individuales y/o grupales. Además, en función de la naturaleza de las distintas partes de la materia objeto de estudio, se podrán utilizar, entre otras, las siguientes actividades formativas: Elaboración de trabajos con responsabilidad individual pero con gestión de la información como equipo. Puesta en común de la información, problemas y dudas que aparezcan en la realización de los trabajos. Organización y realización de jornadas públicas con presentaciones orales y discusión de resultados. Utilización de Plataforma de Aula Virtual. Actividades presenciales: En el aula: exposición y discusión de los conocimientos básicos de la asignatura. Planteamiento y resolución teórica de ejercicios y supuestos relacionados. Orientadas a la enseñanza de las competencias específicas de la asignatura, especialmente las relacionadas con los conocimientos básicos y las técnicas de programación imperativa. En el laboratorio: planteamiento y desarrollo de ejercicios prácticos que permitan solventar problemas y analizar hipótesis y contribuyan al desarrollo de la capacidad de análisis de resultados, razonamiento crítico y comprensión de los métodos de resolución planteados. Servirán como base para la adquisición de las competencias genéricas descritas en el apartado 2. Actividades no presenciales: Análisis y asimilación de los contenidos de la materia, resolución de problemas, consulta bibliográfica, preparación de trabajos individuales y grupales, realización de exámenes presenciales y autoevaluaciones. Orientadas especialmente al desarrollo de métodos para la autoorganización y planificación del trabajo individual y en equipo. Tutorías: asesoramiento individual y en grupos durante el proceso de enseñanzaaprendizaje, bien en forma presencial o a distancia. Número de horas totales: La asignación de horas a las distintas actividades formativas, incluyendo los exámenes es la siguiente: Clases presenciales de Teoría y problemas:28 Número de horas presenciales:59 Clases presenciales de Laboratorio: 28 Evaluación final:3 Número de horas del trabajo propio del estudiante: 91 Totales Tutorías y Trabajo del alumno 150 horas Materiales y recursos 1. 2. 3. 4. 5. 6. Bibliografía de referencia sobre la asignatura. Ordenadores personales. Entornos de desarrollo y manuales de uso de los mismos. Conexión a Internet. Plataforma de Aula Virtual y manuales de uso de las mismas. Proyectores. 5. EVALUACIÓN El sistema de calificación se ajustará al RD 1125/2003 por el cual se regula el sistema de créditos ECTS. Los estudiantes tendrán la opción de evaluación continua mediante las Pruebas de Evaluación Continua (PEC) distribuidas a lo largo del cuatrimestre. Además, los estudiantes que no se acojan o superen la evaluación continua, podrán optar a una Evaluación Final. La evaluación continua servirá en cualquier caso como evaluación formativa durante el proceso de enseñanza-aprendizaje. La evaluación de la adquisición de competencias tendrá en cuenta los siguientes criterios de evaluación: - Dominio de los contenidos básicos - Resolución de problemas - Aplicación y transferencia de los contenidos - Interés y motivación en la realización de las tareas y prácticas El sistema de evaluación continua que se propone se compone de: Pruebas escritas de carácter teórico/ practico, pudiendo ser de carácter eliminatorio, relativas a los conocimientos impartidos que se podrán realizar en el aula/laboratorio o a través de la Plataforma e-Learning puesta a disposición del alumno. El primer día de clase se expondrán los criterios de calificación particulares de la asignatura. 6. BIBLIOGRAFÍA Bibliografía Básica Paradigmas de programación "Una explicación de la Programación Extrema". Beck, Kent. 2002. Adison Wesley "La programación extrema en la práctica". Newkirk, James / C. Martin, Robert. 2002. Adison Wesley Programación Concurrente "Programación concurrente". Palma Martínez, José Tomás / Garrido Carrera, Mª del Carmen / Sánchez Figueroa, Fernando / Quesada Arencibia, Alexis. 2003. Thomson "Java Concurrency in practice". Goetz, Brian / Peierls, Tim / Bloch, Joshua / Bowbeer, Josheph / Holmes, David / Lea, Doug. 2007. Adison Wesley "Programación concurrente en Java". Lea, Doug. 2000. Adison Wesley "Multithread programming whith Java technology". Lewis, B. / Berg, D.J. 2000. Sun Microsystems Press "Concurrent Programming: The Java Programming Language". Hartley, S.J. 1998. Oxford University Press "Synchronization Algorithms and Concurrent Programming". Taubenfeld, Gadi. 2006. Pearson / Prentice Hall Programación Distribuida "Sistemas Distribuidos. Conceptos y diseño". Coulouris, George / Dollimore, Jean / Kindberg, Tim. 2001. Adison Welsey "Java in Distributed Systems". Boger, Marko. 2001. Wiley "Aplicaciones Distribuidas en Java con RMI". Caballé, Santi / Xhafa, Fatos. 2008. Delta Publicaciones "Principles of Concurrent & Distributed Programming". Ben-Ari, M. 1990 . Prentice Hall International Series in Computer Science. Bibliografía Complementaria "Introduccion a la Programacion Paralela". Almeida, F. / Gimenez, D. / Mantas, Jose Miguel / Vidal, A.M. Paraninfo Cengage Learning. 2008. "Concurrent Systems. Operating Systems, Database and Distributed Systems". Bacon, J. 1998. Addison Wesley "Object-oriented Reuse, Concurrency and Distribution". Atkinson, Colin. 1991. Addison Wesley "Parallel Program Design". Chandy, Mani / Misra, Jayedev. 1996. Addison Wesley "The Java Programming Language". Arnold, Ken / Gosling, James / Holmes, David. 2005. Addison Wesley "Concurrent and Real-Time Programming in Java". Wellings, Andrew. 2004. John Wiley & Sons "Concurrent Programming Concepts". Brinch-Hansen, P. 1973. ACM Computing Survey "Concurrent Programing". Burns, A. / Davies, G. 1993. Addison Wesley "Java Distributed Computing". Farley, J. 1998. O'Reilly & Associates, Sebastopol "Programación Concurrente". Rérez.MArtínez, J. E. 1990. Editorial Rueda