Download programación avanzada ii

Document related concepts

Alice (lenguaje de programación) wikipedia , lookup

Programación funcional wikipedia , lookup

Wolfram (lenguaje de programación) wikipedia , lookup

Ocaml wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

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