Download Estimado amigo - Universidad de Alcalá

Document related concepts

Caml wikipedia , lookup

Ocaml wikipedia , lookup

Programación funcional wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Clojure wikipedia , lookup

Transcript
ING.TÉCNICO EN INFORMATICA DE GESTIÓN
LABORATORIO DE PROGRAMACIÓN AVANZADA
30398
OBLIGATORIA
SEGUNDO
SEGUNDO
3
CIENCIAS DE LA COMPUTACIÓN
Ciencia de la computación e Inteligencia Artificial.
Lenguajes y Sistemas Informáticos
Año: 2009-10
Profesorado:
Titulación:
Asignatura:
Código:
Carácter:
Curso:
Periodo:
Nº de Créditos:
Departamento:
Área de Conocimiento(*):
UNIVERSIDAD DE ALCALÁ, PATRIMONIO DE LA HUMANIDAD
(*) Si la asignatura se imparte desde más de un Área de Conocimiento de manera compartida, indíquese
posteriormente el porcentaje de créditos de cada tipo impartidos desde cada Área.
OPERATIVIDAD
Después de superar esta asignatura, el alumno deberá ser capaz de realizar aplicaciones
de complejidad media o elevada, utilizando los paradigmas de programación: funcional,
concurrente y distribuida.
REQUISITOS Y RECOMENDACIONES
Para cursar con garantías de éxito esta asignatura, se recomienda haber superado antes
las asignaturas de Tecnología de la Programación y Laboratorio de Tecnología de la
Programación, ya que para realizar los programas de los módulos de P. Concurrente y P.
Distribuida se requiere un conocimiento elevado de programación con Java.
INCOMPATIBILIDADES
NO TIENE
TEMPORALIZACIÓN
Se trata de una asignatura práctica semestral de 2 horas semanales (3 créditos)
impartidas en un laboratorio. Por tanto el número total de horas disponibles es de 30 (15
semanas). Los contenidos están organizados en 12 sesiones que se corresponden con las
semanas naturales, aunque algunas sesiones de mayor dificultad podrán desarrollarse
durante dos semanas.
La distribución temporal del programa en sesiones es la siguiente:
Programación Funcional
Sesión 0: Introducción a la P.Funcional y al lenguaje de programación CAML
Sesión 1: Expresiones y funciones elementales en CAML.
Sesión 2: Funciones recursivas en CAML.
Sesión 3: Funciones sobre listas en CAML.
Sesión 4: Funciones avanzadas con listas y strings en CAML.
Sesión 5: Utilización de ficheros externos en CAML y creación de ejecutables.
Programación Concurrente
Sesión 6: Introducción a la Programación Concurrente usando JAVA.
Sesión 7: Sincronización de procesos y exclusión mutua.
Sesión 8: Conceptos avanzados de sincronización de procesos.
Sesión 9: Sincronización de procesos utilizando semáforos.
Programación Distribuida
Sesión 10: Programación Distribuida con RMI: Conceptos básicos.
Sesión 11: Programación Distribuida con RMI: Conceptos avanzados.
UNIVERSIDAD DE ALCALÁ, PATRIMONIO DE LA HUMANIDAD
OBJETIVOS
Alcanzar un grado de destreza que permita desarrollar programas complejos, utilizando
lenguajes específicos, en programación funcional, programación concurrente y
programación distribuida. Los objetivos específicos en cada módulo son:
Módulo de Programación Funcional:
Familiarizarse con un lenguaje de programación funcional – Caml – y su entorno de
ejecución para poder escribir funciones que tengan el comportamiento esperado. Se hará
especial hincapié en la definición de funciones recursivas y en funciones sobre listas. Al
finalizar el curso, los estudiantes deberán ser capaces de resolver un problema de
programación complejo utilizando funciones definidas con Caml.
Módulo de Programación Concurrente:
Conocer y saber utilizar los recursos de programación que proporciona Java, para
construir programas concurrentes que resuelvan los problemas clásicos del paradigma
concurrente – exclusión mutua, productores-consumidores, lectores-escritores, etc.- así
como entender el problema del interbloqueo y saber cómo tratarlo.
Módulo de Programación Distribuida:
Conocer las técnicas de Java para comunicar programas distribuidos, mediante RMI y
saber aplicarlo a un caso concreto de aplicación cliente/servidor. Al finalizar esta parte
del curso, los estudiantes deben estar en condiciones de escribir un programa Java
complejo en el que intervengan varios de los elementos estudiados, así como redactar
una memoria en la que justifiquen el trabajo realizado.
CONTENIDOS
CRÉDITOS TEÓRICOS: NO TIENE
PRACTICAS
Sesión 0: Introducción a la P.Funcional y al lenguaje de programación CAML
La primera sesión del Laboratorio se dedicará a presentar la asignatura – objetivos,
metodología, evaluación, material y programas a emplear, bibliografía, etc. – y a
introducir la programación funcional y el lenguaje de programación CAML.
Sesión 1: Expresiones y funciones elementales en CAML.
La segunda sesión del Laboratorio se dedicará a hacer ejercicios sobre expresiones en
CAML y a construir y aplicar las primeras funciones.
Sesión 2: Funciones recursivas en CAML.
En esta sesión del Laboratorio se introduce la noción recursividad como un potente
mecanismo para definir funciones más complejas, en cuya definición se usa la misma
función a definir. Se ven en clase varias funciones recursivas sobre enteros y se
proponen otras como ejercicios a realizar. También se introducen las funciones de orden
superior, que toman funciones como argumentos.
Sesión 3: Funciones sobre listas en CAML.
Las listas son las estructuras de datos más versátiles para representar conjuntos
estructurados. En esta sesión del Laboratorio se introduce el constructor de listas como
una forma idónea para representar los patrones que definen el comportamiento de las
funciones. La recursividad aparece como una forma natural de definir funciones sobre
listas, recorriéndolas hasta que quedan vacías.
UNIVERSIDAD DE ALCALÁ, PATRIMONIO DE LA HUMANIDAD
Sesión 4: Funciones avanzadas con listas y strings en CAML.
Se continúan definiendo funciones recursivas sobre listas y se ven algunos ejemplos de
tratamiento de textos, convirtiéndolos en listas de caracteres y listas de palabras. Se
tratan ejemplos de recursividad con acumulador.
Sesión 5: Utilización de ficheros externos en CAML y creación de ejecutables.
En esta sesión se muestran ejemplos de funciones que leen datos de ficheros externos y
se aprende a compilar programas CAML para crear ejecutables que pueden ser lanzados
desde el sistema operativo, sin necesidad de tener instalado CAML.
Sesión 6: Introducción a la Programación Concurrente usando JAVA.
Con esta sesión comienza el segundo módulo – Programación Concurrente y
Distribuida - del Laboratorio de Programación Avanzada. Se introduce el concepto de
“thread” o “hilo de ejecución” y se crean heredando de la clase Thread e implementando
la interfaz Runnable. Se estudian métodos de sincronización y se introduce el problema
del “interbloqueo”.
Sesión 7: Sincronización de procesos y exclusión mutua.
En esta segunda sesión de programación concurrente se estudia la sincronización de
procesos en Java, donde dos o más procesos compiten por la obtención de un recurso.
Se introduce la noción de región crítica para garantizar la exclusión muta.
Sesión 8: Conceptos avanzados de sincronización de procesos.
Esta sesión de programación concurrente está dedicada a conceptos avanzados de
programación concurrente, como Productor/Consumidor, Buffer de Mensajes y formas
de detener y reanudar un los hilos.
Sesión 9: Sincronización de procesos utilizando semáforos.
En esta sesión de programación concurrente se estudia la implementación de semáforos
con Java. Se verán distintos tipos de Semáforos y se realizarán una serie de ejemplos
utilizando este tipo de mecanismo de sincronización.
Sesión 10: Programación Distribuida con RMI: Conceptos básicos.
En esta primera sesión de programación distribuida se tratan conceptos básicos de
programación cliente – servidor con métodos declarados en una interfaz remota.
Sesión 11: Programación Distribuida con RMI: Conceptos avanzados.
En esta sesión de programación distribuida, el módulo servidor publicará en el
RMIREGISTRY varios objetos. El módulo cliente obtendrá la lista de objetos remotos
para utilizarlos en el programa.
UNIVERSIDAD DE ALCALÁ, PATRIMONIO DE LA HUMANIDAD
METODOLOGÍA
La asignatura se impartirá en el laboratorio. Cada alumno tendrá a su disposición un
ordenador con el software necesario instalado. Las prácticas de cada módulo serán
impartidas por el profesor de forma interactiva con los alumnos, atendiendo las dudas
de éstos en su aprendizaje del entorno de desarrollo y del lenguaje. Durante las sesiones
el profesor realizará un estrecho seguimiento de la evolución de los programas.
EVALUACIÓN
Los alumnos de esta asignatura deberán realizar tres prácticas cuyo contenido será
propuesto durante el curso:
- Desarrollo de una aplicación haciendo uso del paradigma de programación Funcional
con lenguaje CAML.
- Desarrollo de una aplicación haciendo uso del paradigma de programación
Concurrente y lenguaje Java.
- Desarrollo de una aplicación haciendo uso del paradigma de programación Distribuida
con RMI de Java. (Será un añadido a la aplicación concurrente).
Los equipos de diseño estarán formados por una o dos personas. En el caso de dos
integrantes, ambos deberán conocer todos los detalles del diseño y el funcionamiento de
los programas. Con el objetivo de verificar la autoría de la práctica, el profesor podrá
solicitar a los diseñadores, la implementación de código no recogido en el presente
enunciado o la modificación de algún aspecto de la aplicación. Los alumnos que no
sepan introducir adecuadamente las modificaciones solicitadas serán evaluados como
SUSPENSO, independientemente del contenido y calidad de la práctica entregada.
Se debe entregar un disco por grupo conteniendo el código fuente de la práctica así
como una documentación con el análisis y el diseño del sistema de información
realizado para cada una de las tres prácticas. Posteriormente se deberá superar una
entrevista en la que se presentarán las prácticas y se responderá a las preguntas
planteadas por el profesor.
Cada una de las prácticas presentadas será evaluada con un máximo de 10 puntos, y la
nota final se obtendrá como la suma ponderada de las tres notas, con los siguientes
pesos: 40% para la parte de funcional, 40% para la de concurrente y 20% para la de
distribuida. No se aprobará la asignatura sin haber alcanzado una calificación mínima de
5 puntos en cada una de las tres partes.
Si se aprueba solamente alguna de las prácticas, se guardará la nota hasta Septiembre,
momento en el que se tendrá que aprobar el resto de las prácticas para poder aprobar la
asignatura completa. En ningún caso se guardarán las notas de alguna de las partes de
un curso para otro.
BIBLIOGRAFÍA
* Bibliografía para el módulo de Programación Funcional
- José María Gutierrez; José Ramón Hilera: Paradigmas de Programación. Textos
Universitarios. Servicio de Publicaciones. Universidad de Alcalá. 2005.
- Fernández, L.; Arroyo, F.; Yela A. Programación Funcional. Programación en CAML.
UNIVERSIDAD DE ALCALÁ, PATRIMONIO DE LA HUMANIDAD
Dpto. Publicaciones de la E.U.I. Universidad Politécnica de Madrid, 1996.
- Leroy, X. The CAML Light system, release 0.74. Documentation and user's guide.
Institut National de Recherche en Informatique et en Automatique (INRIA), 1997.
- Mauny M. Functional programming using Caml Light. Institut National de Recherche
en Informatique et en Automatique (INRIA), 1995.
- Apuntes proporcionados por el profesor
* Bibliografía para los módulos de Programación Concurrente y Distribuida
- José María Gutierrez; José Ramón Hilera: Paradigmas de Programación. Textos
Universitarios. Servicio de Publicaciones. Universidad de Alcalá. 2005.
- Bruce Eckel. Piensa en Java. Pearson Educación. Madrid. 2007
- Hartley S. J. Concurrent Programming. The Java Programming Languaje. Ed. Oxford
University Press, 1998.
- Holub A. Taming Java Threads. Ed. Apress, 2000.
- Lea D. Programación Concurrente en Java. Principios y patrones de Diseño. Ed.
Addison-Wesley, 1997-2001.
- Lewis, B.; Berg D.J. Multithreaded Programming with Java Technology. Ed. PrenticeHall, 2000.
- Otón, S.; Martínez, J.J.; Hilera, J.R. Programación orientada a objetos con Java.
Servicio de Publicaciones. Universidad de Alcalá, 2000.
- Apuntes proporcionados por el profesor