You are on page 1of 8

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: PROGRAMACION AVANZADA
Código: 780014
Titulación en la que se
IC
imparte:
Departamento y Área de
CIENCIAS DE LA COMPUTACION
Conocimiento:
Carácter: OBLIGATORIA
Créditos ECTS: 6
Curso: 2º

Profesorado:

Horario de Tutoría:

Idioma en el que se
Español
imparte:

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

Total horas,
clases,
Unidades temáticas Temas créditos o
tiempo de
dedicación (*)
Paradigmas de Paradigmas 8 horas
programación

Programación
Programación Concurrente 8 horas
Concurrente

Concurrencia de Memoria Conceptos,


Común evolución y 8 horas
mecanismos

Programación
12 horas
actual

Mecanismos de
Concurrencia Distribuida 8 horas
Bajo nivel

Cliente/servidor y
12 horas
sistemas por capas
(*) 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ñ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:28
Número de horas presenciales:59 Clases presenciales de
Laboratorio: 28

Evaluación final:3
Número de horas del trabajo
Tutorías y Trabajo del alumno
propio del estudiante: 91
Totales 150 horas

Materiales y recursos

1. Bibliografía de referencia sobre la asignatura.


2. Ordenadores personales.
3. Entornos de desarrollo y manuales de uso de los mismos.
4. Conexión a Internet.
5. Plataforma de Aula Virtual y manuales de uso de las mismas.
6. 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

You might also like