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 laasignatura: PROGRAMACION AVANZADA 2
Código: 780026
Titulación en la que se
imparte: Grado en Ingeniería Informática
Departamento y Área de
Conocimiento: CIENCIAS DE LA COMPUTACION
Carácter: OBLIGATORIA
Créditos ECTS: 6
Curso: 3º
Profesorado: David de Castro
Juan José Sánchez
Horario de Tutoría: El establecido por cada profesor Idioma en el que se
imparte: 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
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
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.
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.
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ñanza-aprendizaje, 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: 24 horas Clases presenciales de Laboratorio: 24 horas Evaluación final: 3 horas Tutorías y trabajo del alumno: 99 horas
TOTAL: 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.
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
“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 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 2011, Packt Publishing Ltd.
“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