Download programación avanzada ii
Document related concepts
Transcript
PROGRAMACIÓN AVANZADA II Grado en Ingeniero en Informática Universidad de Alcalá Curso Académico 2011/12 Curso 3º – 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: Profesorado: Horario de Tutoría: Idioma en el que se imparte: PROGRAMACION AVANZADA 2 780026 Grado en Ingeniería Informática CIENCIAS DE LA COMPUTACION OBLIGATORIA 6 3º David de Castro Juan José Sánchez El establecido por cada profesor Español 1. PRESENTACIÓN La asignatura Programación Avanzada 2 desarrolla contenidos de programación orientados a alcanzar un perfeccionamiento en las técnicas de programación conocidas por los alumnos mediante la utilización de las tecnologías más novedosas. Prerrequisitos y Recomendaciones Es obligatorio haber cursado la asignatura Programación Avanzada. 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. Interpretar, representar y medir elementos del mundo real mediante el concepto de dato. 2. Aplicar la estructura física y lógica de datos que representan números, caracteres, registros y ficheros, para mejorar el modelado de problemas 3. Aplicar los conceptos de clase, tipo abstracto de datos y objeto, en programas. 4. Identificar las diferencias entre la representación basada en objetos y los modelos de flujo de datos. 5. Diseñar soluciones algorítmicas a problemas y representarlas como programas u objetos. 6. Aplicar la estrategia de implementación descendente (topdown). 7. Aplicar el diseño modular y los conceptos cohesión y acoplamiento. 8. Alcanzar una visión de sistema de la verificación y validación. 9. Ser capaz de utilizar entornos de programación, herramientas de desarrollo y entornos gráficos de desarrollo, variados 10. Aplicar los conceptos y técnicas de la manipulación de ficheros. 11. Diseñar programas y aplicaciones que utilicen estructuras abstractas de datos. 12. Diseñar soluciones a problemas que impliquen uso de ficheros y bases de datos. 13. Aplicar técnicas de desarrollo, diseño, prueba y depuración a la resolución de problemas. 14. Evaluar cómo afectan las capacidades y limitaciones de los lenguajes de programación más comunes a la creación de sistemas informáticos. 15. Analizar críticamente la evolución de los lenguajes de programación los diferentes paradigmas disponibles hoy día y sus principales características y aplicar esta información al diseño y resolución de problemas. 16. 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. 17. 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. 18. Ser capaz de 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 19. Aplicar 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. 20. Evaluar los conceptos de tipos, ámbito y su comprobación (compatibilidad), en el procesamiento de lenguajes de programación 21. Valorar el concepto de tipo de dato y ser capaz de identificar las características principales de un sistema de tipos. 22. Analizar críticamente los fundamentos de la programación funcional y lógica identificando las ventajas e inconvenientes de cada paradigma. 23. Aplicar la programación distribuida, concurrente y paralela, conociendo sus algoritmos fundamentales y las ventajas e inconvenientes de cada paradigma, para diseñar sistemas más eficaces o eficientes desde el punto de vista de rendimiento, usuario u otros. Competencias genéricas: Desarrollar aptitudes para la comunicación oral y escrita Desarrollar capacidad de análisis y síntesis Desarrollar capacidad para la toma de decisiones Desarrollar métodos para la autoorganización y planificación del trabajo individual. Desarrollar métodos para el trabajo en equipo. Motivación por la calidad Competencias específicas: Evaluar cómo afectan las capacidades y limitaciones de los lenguajes de programación más comunes a la creación de sistemas informáticos. Analizar críticamente la evolución de los lenguajes de programación, los diferentes paradigmas disponibles hoy día y sus principales características a las decisiones de diseño de sistemas de información. 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. Aplicar la programación distribuida, concurrente y paralela, conociendo sus algoritmos fundamentales y las ventajas e inconvenientes de cada paradigma, para diseñar sistemas más eficaces o eficientes desde el punto de vista de rendimiento, usuario u otros Analizar críticamente los fundamentos de la programación funcional y lógica identificando las ventajas e inconvenientes de cada paradigma. 3. CONTENIDOS 1. Programación declarativa y Funcional: Características de este tipo de programación. Influencia sobre los lenguajes actuales. Lenguajes funcionales modernos y tencendias. 2. Programación paralela: Modelos de sistemas paralelos y programación. Evaluación del rendimiento. Metodología y notaciones. Programación de hardware gráfico paralelo. 3. Programación en la nube: Nuevo paradigmas. SW como servicio, Plataforma como servicio e Infraestructura como servicio. Tipos de nubes. 4. Máquinas virtuales. Tipos de máquinas. Máquinas de sistema y proceso. Técnicas para máquinas virtuales. Máquinas virtuales más comunes. Programación de los contenidos Unidades temáticas Temas Total horas, clases, créditos o tiempo de dedicación (*) Programación funcional Programación funcional 12 horas Programación paralela Programación paralela 12 horas Computación en la Nube Computación en la nube 12 horas Máquinas virtuales Máquinas Virtuales 12 horas (*) 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: 1. 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. 2. 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: 1. 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. 2. 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: Clases presenciales de Laboratorio: Evaluación final: Tutorías y trabajo del alumno: TOTAL: 24 horas 24 horas 3 horas 99 horas 150 horas Materiales y recursos 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á a la “NORMATIVA REGULADORA DE LOS PROCESOS DE EVALUACIÓN DE LOS APRENDIZAJES“ aprobada en Consejo de Gobierno de la Universidad de Alcalá de 24 de marzo de 2011. La dimensión y cuestiones que serán valoradas en el aprendizaje se corresponden a la adquisición de competencias presentadas en la guía. Se considerará también a estos efectos la actitud, asistencia, participación e intereses del alumno. La evaluación de la adquisición de competencias tendrá en cuenta la actitud y el interés del alumno. 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 a la evaluación continua, podrán optar a una Evaluación Final si lo solicitan en tiempo y forma. La evaluación continua servirá en cualquier caso como evaluación formativa durante el proceso de enseñanza-aprendizaje. El sistema de evaluación continua que se propone se compone de: Entregas periódicas de ejercicios de laboratorio, un ejercicio final de laboratorio y pruebas escritas de carácter teórico/ practico, pudiendo ser de carácter eliminatorio y relativas a los conocimientos impartidos que se podrán realizar en el aula/laboratorio o a través de la Plataforma de Aula Virtual. En cuanto a los detalles sobre la evaluación continua son los siguientes: Valoración de las Pruebas de Evaluación Continua (PEC) sobre la nota total Cada una de las cuatro secciones de la asignatura tendrá una PEC de teoría y una de práctica. El peso de cada una de las cuatro secciones será del 25% sobre la nota final. ◦ La nota de cada sección se calculará aplicando un 60% sobre la nota de la PEC de teoría y un 40% sobre la nota de la PEC de laboratorio. Porcentaje asignado a cada elemento de la evaluación continua: Información sobre valoración de entregas parciales. ◦ ◦ En cada PEC será necesario obtener una calificación mínima de 3,5 para promediar con las otras. En el caso de entregas de PEC perdidas por causa justificada según valoración del profesor, se establecerá algún mecanismo de entrega tardía siempre que el retraso no sea excesivo ni afecte a un número importante de PEC. 6. BIBLIOGRAFÍA Programación Paralela “Introducción a la Programación Paralela”. F. Almeida, D. Gimenez, Jose Miguel Mantas, A.M. Vidal. Paraninfo Cengage Learning, 2008. “Introduction to Parallel Computing”. Kumar, V., Grama, A., Gupta, A., Karypis G. Benjamin/Cummings Publishing Company, 2003. “Parallel Programming. Techniques and applications using networked workstations and parallel computers”. Vol II. Wilkinson, B., Allen, M. Prentice-Hall. 2005. “Parallel Programming in C with MPI and OpenMP”. Michael J. Quinn. McGraw-Hill, 2003. “The Art of Concurrency: A Thread Monkey's Guide to Writing Parallel Applications”. Clay Breshears. O'Reilly Media, 2009. Página Oficial de Open MPI: http://www.open-mpi.org/ Página Oficial de OpenMP: http://www.openmp.org Programación Declarativa Funcional "Razonando con Haskell". Blas C. Ruiz, Francisco Gutiérrez y otros. 2004. Thomson "Introducción a la programación funcional con Haskell". Richard Bird. 2001. Prentice Hall “Manual de F#”. http://msdn.microsoft.com/es-es/fsharp “COMMERCIAL USERS OF FUNCTIONAL PROGRAMMING“ . http://cufp.org/ Computación en la nube “Cloud Computing: First International Conference, CloudComp 2009 Munich, Germany, October 19-21, 2009” Dimiter Avresky, Michel Diaz, Arndt Bode, and Claudio Bruno 2010, Springer “Cloud Computing: Principles, Systems and Applications (Computer Communications and Networks) “ Nick Antonopoulos and Lee Gillam 2010, Springer “Programming Windows Azure: Programming the Microsoft Cloud “ Sriram Krishnan 2010, OREILLY “Management Strategies for the Cloud Revolution: How Cloud Computing Is Transforming Business and Why You Can't Afford to Be Left Behind” Charles Babcock 2010, Mc Graw Hill “Cloud Computing: Technologies and Strategies of the Ubiquitous Data Center“. Brian J. S. Chee and Curtis Franklin Jr. 2010, Ed. CRC Press Máquinas Virtuales “Virtual Machines” Iain D. Craig editorial 2006, Springer “Virtual Manufacturing (Springer Series in Advanced Manufacturing)” Wasim Ahmed Khan, Abdul Raouf, and Kai Cheng (Mar 1, 2011) not released yet, Editorial Springer “Getting Started with Microsoft Application Virtualization 4.6 “ Augusto Alvarez Packt Publishing Ltd. 2011, “Virtualization and Forensics: A Digital Forensic Investigator's Guide to Virtual Environments” Diane Barrett and Greg Kipper 2010, ed Syngress “Programming Scala. Tackle Multi-Core Complexity on the Java Virtual Machine” Venkat Subramaniam 2009, Ed. Pragmatic Bookshelf “Virtual Machine: History, Application and Future “ Ziyaad Mohammad Twaheer Ramdianee 2009, Lambert Academic Publishing