Download PROGRAMACIÓN AVANZADA Grado en Ingeniería de

Document related concepts

Oz (lenguaje de programación) wikipedia , lookup

Clojure wikipedia , lookup

Programación funcional wikipedia , lookup

Alice (lenguaje de programación) wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

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