Guia docente
DATOS IDENTIFICATIVOS 2011_12
Asignatura PROGRAMACION AVANZADA Código 00702050
Enseñanza
INGENIERO EN INFORMATICA
Descriptores Cr.totales Tipo Curso Semestre
6 Optativa Cuarto Segundo
Idioma
Prerrequisitos
Departamento ING.MECANICA,INFORMAT.AEROESP.
Responsable
RODRÍGUEZ DE SOTO , ADOLFO
Correo-e arods@unileon.es
cferll@unileon.es
Profesores/as
FERNÁNDEZ LLAMAS , CAMINO
RODRÍGUEZ DE SOTO , ADOLFO
Web http://agora.unileon.es
Descripción general

Comprender el concepto abstracto de concurrencia.

Conocer los problemas básicos de la programación concurrente: exclusión mutua, sincronización, comunicación.
Conocer y comprender varios modelos teóricos para posibilitar la concurrencia.
Programación concurrente en Java.
Estudiar varios métodos de modelización de procesos concurrentes: UML, Redes de Petri y Pi-Calculus
Apreciar los retos que supone la programación distribuida.
Comprender los distintos modelos de sistemas distribuidos.
Estudiar los algoritmos distribuidos básicos.
Utilizar varias herramientas de programación para la construcción de sistemas distribuidos.
Comprender y valorar el concepto de componente software y de Middleware.

Tribunales de Revisión
Tribunal titular
Cargo Departamento Profesor
Tribunal suplente
Cargo Departamento Profesor

Objetivos

Comprender el concepto abstracto de concurrencia.

Conocer los problemas básicos de la programación concurrente: exclusión mutua, sincronización, comunicación.
Conocer y comprender varios modelos teóricos para posibilitar la concurrencia.
Programación concurrente en Java.
Estudiar varios métodos de modelización de procesos concurrentes: UML, Redes de Petri y Pi-Calculus
Apreciar los retos que supone la programación distribuida.
Comprender los distintos modelos de sistemas distribuidos.
Estudiar los algoritmos distribuidos básicos.
Utilizar varias herramientas de programación para la construcción de sistemas distribuidos.
Comprender y valorar el concepto de componente software y de Middleware.


Metodologías
La teoría se impartirá en clases magistrales a razón de dos horas semanales y la práctica mediante trabajo en laboratorio del alumno también durante dos horas semanales. El trabajo de laboratorio estará dirigido a que el alumno desarrolle programas tanto individualmente como en grupo. Seguirá una metodología de desarrollo no estricta pero actual. Se utilizarán herramientas de colaboración para el desarrollo de aplicaciones en grupo. Los lenguajes de programación serán ADA y Java. "

Contenidos
Bloque Tema
"1. Introducción a la programación paralela. Concepto de paralelismo. Procesos paralelos. Comunicación y sincronización entre procesos. Tipos de paralelismo: programación concurrente. Programación distribuida. Lenguajes. Sistemas Informáticos Paralelos. 2. Modelos teóricos concurrencia. Redes de Petri. Algebras de Procesos. Pi-calculus 3. Programación concurrente. Variables compartidas. Exclusión mutua. Algoritmo de Dekker. Semáforos. Monitores. Lenguajes de programación concurrente. Programación concurrente en Ada, Rendez-vous. Programación concurrente en Java 4. Introducción a la Programación distribuida. Intercambio de mensajes. Comunicación síncrona y asíncrona. Intercomunicación entre procesos. Algoritmos distribuidos. Programación Sockets Java. 5. Modelos de Programación distribuida. Paso de Mensajes. Programación Cliente-Servidor. Modelo punto a punto. Multidifusión. Llamadas a procedimientos remotos. RMI. 6. Aplicaciones Web. El protocolo http. El lenguaje html. Programación del lado del cliente: applets, javascript. Programación del lado del servidor: cgi, servlets, jsp. 7. Middleware y Componentes Software. Middleware y programación distribuida. Patrones arquitectónicos y de diseño. Desarrollo de software basado en componentes. Arquitecturas por componentes: CORBA, COM, Enterprise JavaBeans. 8. Modelos avanzados de computación distribuida. Cola de mensajes. Agentes Móviles. Servicios Web. Espacios de objetos. "

Otras actividades
"

Evaluación
  descripción calificación
 
Otros comentarios y segunda convocatoria

La asignatura se divide en una parte teórica y una parte práctica. Para superar la asignatura habrá que superar ambas partes. Una vez superadas, la valoración de la nota del alumno se realizará mediante una media ponderada de la puntuación obtenida en las pruebas correspondientes a la parte teórica (40%), de las puntuaciones obtenida en la parte práctica (40%) y de la puntuación obtenida por la valoración del profesor de la participación del alumno en las actividades de la asignatura (20%).

Parte teórica: La evaluación de la parte teórica se realizará mediante trabajos escritos. Los trabajos consistirán en una ampliación de las técnicas de programación de entre las vistas en las clases teóricas.  Se valorará la redacción, estructuración y contenidos del trabajo, así como la corrección del programa entregado.

Parte práctica Para superar la parte práctica se deberán entregar todas las prácticas que se vayan realizando durante el curso. La entrega deberá ser regular y no una única entrega final. El profesor podrá solicitar tanto la repetición de una práctica como su ampliación. Se valorará la calidad de los programas entregados.

Valoración del Profesor En la nota del profesor se tendrá en cuenta varios parámetros. En primer lugar el profesor considerará la calidad del trabajo realizado por el alumno en el conjunto de la asignatura. En segundo lugar la participación del alumno en las actividades de la asignatura especialmente su motivación y participación mediante cuestiones y propuestas, tanto en las clases teóricas como prácticas.


Fuentes de información
Acceso a la Lista de lecturas de la asignatura

Básica

"Orfali, R.; Harkey, D.; Edwards, J. ""Client/Server Survival Guide"" John Wiley & Sons, 1999. (Existe versión en castellano)
Ben-Ari, M. ""Principles of concurrent and Distributed Programming"". Prentice-Hall, 1990.
Coulouris, G.; Dollimore, J.; Kindberg, T. ""Sistemas Distribuidos. Conceptos y Diseño"" 3ºEd. Addison Wesley, 2001.
Liu, M.L. ""Computación Distribuida. Fundamentos y Aplicaciones."" Pearson-Addison Wesley, 2004." "

Complementaria

Kart Wall et al. "Programación en Linux" 2ª Edición. Prentice Hall, 2001.
Pérez Martínez, J. "Programación Concurrente" 2ª Edición. Ed. Rueda, 1990.
Stevens, W.R. "Advanced Programming in the Unix Environment". Addison Wesley, 1993.
Szyperski, C. "Component Software". Addison Wesley, 2002.