Concurrencia Prácticas 1 y 2

Documentos relacionados
Prueba objetiva 2 - Clave a Concurrencia Primer semestre Grado en Ingeniería Informática. Universidad Politécnica de Madrid

Programación Concurrente Prácticas 1, 2 y 3

Apellidos: Nombre: Matrícula:

Especificando interacción con recursos compartidos

Prueba objetiva 2 - Clave b

Ejercicio del Mecánico

Apellidos: Nombre: Matrícula: UNIVERSIDAD POLITÉCNICA DE MADRID

Prueba final, parte 2 - Clave a Concurrencia Segundo semestre Universidad Politécnica de Madrid

Concurrencia Monitores. Guillermo Román Díez

Prueba objetiva 2 (4F1M) - Clave a

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

Prácticas de Programación Práctica 1

TEORÍA DE AUTÓMATAS Y LENGUAJES

1. Corrección de un programa TEMA 2: ESPECIFICACIÓN Y CORRECCIÓN DE ALGORITMOS. 1. Corrección de un programa. 1. Corrección de un programa

Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Exámenes

Prácticas POO Curso 08/09

GUÍA DOCENTE ABREVIADA DE LA ASIGNATURA

Programación de Sistemas Concurrentes y Distribuidos 1 a Convocatoria curso 12/13

SEGUNDA PRÁCTICA. Programación Curso Ingeniería en Informática Universidad Carlos III de Madrid

La implementación se realizará en Java, a partir de un diseño orientado a objetos del problema descrito.

Sistemas Informáticos Industriales

Programación Concurrente Trabajo de asignatura Un juego de dominó distribuido

Contenido. Prefacio Orígenes de la programación orientada a objetos... 1

Bloque II. Elementos del lenguaje de programación Java

PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ

Examen de prácticas de Programación 1

APELLIDOS, Nombre: // Resto de s e r v i c i o s p ú b l i c o s e n t r e l o s que s e e n c u e n t r a n i n s e r t a r y // b o r r a r //...

Especificando interacción con recursos compartidos (EN CONSTRUCCIÓN: NO IMPRIMIR)

Problema a resolver Implementación Algoritmos. Algoritmos y Estructuras de Datos II Elección de Estructuras II 6 de Mayo de

Examen práctico de Programación 2

Laboratorio A.E.D. Viernes 13:00-15:00 y 15:00-17:00

ANX-PR/CL/ GUÍA DE APRENDIZAJE. ASIGNATURA Concurrencia. CURSO ACADÉMICO - SEMESTRE Segundo semestre

Práctica 4 Concurrencia en Java

PRÁCTICA. Estructura de Computadores Grado en Ingeniería Informática Estudios de Informática, Multimedia y Telecomunicación

Análisis arquitectural y funcional de la maquina virtual en la plataforma J2ME ÍNDICE

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Tema 3 Concepto y Especificación de Tipos Abstractos de Datos

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

ANX-PR/CL/ GUÍA DE APRENDIZAJE

Teoría de los Lenguajes de Programación Práctica curso Enunciado. Fernando López Ostenero y Ana García Serrano

Programación imperativa. Algoritmos y Estructuras de Datos I. Lenguaje C. Segundo cuatrimestre de 2014

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1

Examen Teórico. Convocatoria de Febrero de 2015

ANX-PR/CL/ GUÍA DE APRENDIZAJE

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Grado en Ingeniería de Tecnologías y Servicios de Telecomunicación Programación II. PRÁCTICA 1: Utilización del concepto de Tipo Abstracto de Dato

PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

GUÍA DE ESTILO EN JAVA

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE CIENCIAS Y SISTEMAS

Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Cursos

GUÍA DE APRENDIZAJE PROGRAMACION CONCURRENTE

DISEÑO DE UNA METODOLOGÍA DOCENTE

Pra cticas de Algoritmia para problemas difı ciles Especialidad en Computacio n, grado en Ingenierı a Informa tica.

Examen Teórico Convocatoria de Junio de 2012

Requerimientos de Software

RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2017/2018

1. Preparar al estudiante para desarrollar aplicaciones de software utilizando un enfoque orientado a objetos.

Práctica 2 de la Asignatura Programación y Estructuras de Datos Avanzadas Versión 1.0

8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL.

Lenguajes de Programación Soluciones a pruebas de nivel

Algorítmica y Programación por Objetos 1 Ejercicio Nivel 5 Criaturas Mágicas

NOMBRE DEL CURSO: Introducción a la Programación y computación 1

Prácticas POO Curso 10/11

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Sílabo de Programación II

Práctica 1 de la Asignatura Programación y Estructuras de Datos Avanzadas Versión 1.1

1. Preparar al estudiante para desarrollar aplicaciones de software utilizando un enfoque orientado a objetos.

Práctica 8. Diseño de tipos: clase PolinomioEntero. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos. Versión 1.0.

PEC1. Formato y fecha de entrega. Presentación. Competencias

FUNCIONES JAVASCRIPT. CONCEPTO. PARÁMETROS O ARGUMENTOS Y TIPOS. PASO POR VALOR. RETURN. EJEMPLOS. (CU01122E)

Ejercicios de tratamiento de errores

Programación Orientada a Objetos. Conceptos Básicos

HOJA DE EJERCICIOS 4 INTERFACES Y CLASES ABSTRACTAS EN JAVA Y C++

Prueba objetiva 2 - Clave a

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Tema 6: Clases. Índice

Sesión 2 Laboratorio

Bloque práctico 2: Java

Pruebas en PL/SQL 13/12/2013. Pruebas en PL/SQL. Grupo de Ingeniería del Software y Bases de Datos. Universidad de Sevilla diciembre 2013

EJERCICIOS DE MODELADO DE INTERACCIÓN

SEMINARIO DE ESPECIFICACIONES ALGEBRAICAS

PROGRAMACION ORIENTADA A OBJETOS PROPÓSITO DEL CURSO

Concurrencia. Guía de Aprendizaje Información al estudiante. Datos Descriptivos. Lenguajes, Sistemas Informáticos e Ingeniería de Software

Driver Tabla 1: Ejemplo de contenido del fichero CrossingIP.txt Véase Anexo.

1. Enunciado. 2. Trabajo del alumno

CAPITULO 6: FUNCIONES

UNIVERSIDAD DE GUADALAJARA

Concurrencia. Guía de Aprendizaje Información al estudiante. Datos Descriptivos. Departamento responsable

C++ me gusta++ Dr. Arno Formella. formella Universidad de Vigo Departamento de Informática E Ourense

SEMINARIO DE ESPECIFICACIONES ALGEBRAICAS

Cuerpo de Profesores Técnicos de Formación Profesional

APLICATECA. didimo Marketing. Manual de usuario. By DIDIMO Servicios Móviles.

Capítulo 3. Introducción a la programación. Continuar

Introducción a la Programación

Curso de Java POO: Programación orientada a objetos

Transcripción:

Concurrencia Prácticas 1 y 2 Grado en Ingeniería Informática/ Grado en Matemáticas e Informática/ 2ble. grado en Ing. Informática y ADE Convocatoria de Semestre feb jun 2017 2018 Normas La fecha límite de la entrega preliminar (no obligatoria) de la práctica 1 es el 27 de mayo de 2018 a las 23:59:59. Los resultados de someter a más pruebas y revisión las entregas anteriores a dicha fecha se publicarán el día 31 de mayo. La fecha límite de la entrega preliminar (no obligatoria) de la práctica 2 es el 3 de junio de 2018 a las 23:59:59 y los resultados se publicarán el día 7 de junio. Después de estas entregas preliminares revisaremos los sistemas de entrega y publicaremos nuevas pruebas en el sistema de entrega para ambas prácticas. Todas prácticas, incluso aquellas en las que no se han detectado problemas, deben ser entregadas de nuevo antes de la fecha límite que será el 15 de junio de 2018 a las 23:59:59. La práctica se realiza en grupos de dos alumnos. Los ficheros entregados (QuePasaMonitor.java y QuePasaCSP.java) deberán tener un comentario // Grupo: Nombre Alumno 1 ( Matrícula Alumno 1), Nombre Alumno 2 ( Matrícula Alumno 2) al principio de los ficheros, como definición del grupo. Nota: sólo entrega un miembro por grupo, no deben entregar ambos alumnos de un grupo. Deberá mencionarse explícitamente el uso de recursos (código, algoritmos específicos, esquemas de implementación, etc.) que no hayan sido desarrollados por el alumno o proporcionados como parte de asignaturas de la carrera. Os recordamos que todas las prácticas entregadas pasan por un proceso automático de detección de copias. 1. QuéPasa? Después de haber gastado demasiado tiempo usando WhatsApp, hemos decidido que es un momento oportuno para desarrollar una aplicación parecida, pero con un nombre infinitamente mejor: QuéPasa?. Al igual que WhatsApp, la aplicación QuéPasa? permite formar grupos de usuarios y mandar mensajes a los miembros de un grupo. 1.1. Diseño El sistema de gestión de QuéPasa? se ha diseñado como un único recurso compartido con operaciones para: crear un grupo nuevo,

2 Concurrencia, prácticas 1 y 2 QuePasa mandarmensaje(remitente uid, nombre grupo,mensaje) escritor uid creargrupo(creador uid, nombre grupo) anadirmiembro(creador uid, nombre grupo, nuevomiembro uid ) salirgrupo(uid, nombre grupo) lector uid leer(uid) remitente uid, grupo, mensaje Figura 1: Grafo de procesos/recursos. añadir un miembro nuevo a un grupo, salir de un grupo, mandar un mensaje a un grupo y leer mensajes. Existen algunas diferencias no muy importantes entre WhatsApp y QuéPasa?: No se permiten diferentes grupos con el mismo nombre. El creador de un grupo es el único usuario que puede añadir más usuarios. El creador de un grupo siempre será miembro del grupo, es decir, nunca podrá salir del grupo. La aplicación QuéPasa? consta de un recurso compartido que debéis implementar y, por cada usario hay dos procesos (o hilos de ejecución): un lector que intenta leer mensajes y un escritor que maneja el resto de la funcionalidad de QuéPasa?: crear grupos, añadir un miembro a un grupo, mandar mensajes, etc. La arquitectura de QuéPasa? queda reflejada en el grafo de procesos y recursos de la figura 1. 1.2. Especificación formal del recurso La especificación formal del recurso QuePasa? se muestra en la figura 2. 1.2.1. Explicaciones Los identificadores de usuarios se representan con números naturales: UID = N. Los nombres de los grupos son cadenas de caracteres (Grupo = String), al igual que el contenido de los mensajes. El dominio del recurso compartido se ha representado con una tupla de tres componentes: miembros, creador y mensajes.

Curso 2017 2018 Convocatoria de Semestre feb jun 3 C-TAD QuePasa OPERACIONES ACCIÓN creargrupo: UID[e] Grupo[e] ACCIÓN anadirmiembro: UID[e] Grupo[e] UID[e] ACCIÓN salirgrupo: UID[e] Grupo[e] ACCIÓN mandarmensaje: UID[e] Grupo[e] Contenido[e] ACCIÓN leer: UID[e] (UID Grupo Contenido)[s] SEMÁNTICA DOMINIO: TIPO: QuePasa = ( creador : Grupo UID miembros : Grupo Conjunto(UID) mensajes : UID Secuencia(UID Grupo Contenido) ) DONDE: UID = N Grupo = String INICIAL: self.creador = {} self.miembros = {} self.mensajes = {} INVARIANTE: dom(self.creador) = dom(self.miembros) PRE: grupo dom(self.creador) creargrupo(uid, grupo) (uid dom(s) s = s) (uid dom(s) s = s {uid }) self = (c {grupo uid},m {grupo {uid}},s ) PRE: self.creador(grupo) = creadoruid uid self.miembros(grupo) anadirmiembro(creadoruid, grupo, uid) (uid dom(s) s = s) (uid dom(s) s = s {uid }) self = (c,m {grupo m(grupo) {uid}},s }) PRE: uid self.miembros(grupo) uid self.creador(grupo) salirgrupo(uid, grupo) borrados = {(u,g,x) s(uid) g = grupo} self = (c,m {grupo m(grupo) \ {uid}},s {uid s(uid) borrados}) PRE: uid self.miembros(grupo) mandarmensaje(uid, grupo, contenido) self = (c,m,s ) u UID u m(grupo) s (u) = s(u) u m(grupo) s (u) = s(u) + (uid,grupo,contenido) ) CPRE: uid dom(self.mensajes) self.mensajes(uid) leer(uid, msg) pendientes = s(uid) msg = pendientes(1) self = (c,m,s {uid s(2..longitud(pendientes))} Figura 2: Especificación formal del recurso.

4 Concurrencia, prácticas 1 y 2 El componente miembros : Grupo Conjunto(UID) es una funcion parcial (map) de nombres de grupos en conjuntos de identificadores usuario. Al ser una función parcial, no asocia necesariamente todos los posibles nombres de grupos a un conjunto de UID. Informalmente, miembros devuelve los miembros de un grupo. Como funcion parcial, necesitamos comprobar si está definida para un grupo usando la sintaxis grupo dom(miembros) (véase por ejemplo la precondición de la operación creargrupo). El componente creador : Grupo UID asocia un grupo con el usuario que lo ha creado. El componente mensajes : UID Secuencia(UID Grupo Contenido) declara una funcion parcial que asocia un identificador de usuario con una sequencia de tuplas compuesta por otro identificador de usuario (quién envió el mensaje), un grupo (dónde se publicó el mensaje) y el contenido del mensaje. Existen algunas operaciones con precondiciones (PRE) que consideran tanto los parámetros como el estado del recurso. Si vuestra implementación detecta que no se cumple una precondición, el recurso debe lanzar la excepción PreconditionFailedExcepcion. Dicha excepción se encuentra disponible en el código auxiliar de la práctica. Las postcondiciones son similares. Por ejemplo, en la postcondición para la operación creargrupo se define que la función creador(grupo) debería devolver uid despues de la operación, y que miembros(grupo) devuelve el conjunto {uid}, y mensajes no cambia. Todas las operaciones del recurso deberían respetar la invariante, es decir, si se cumple antes de la invocación, debería cumplirse después de la ejecución. Notad que no es obligatorio implementar la invariante en vuestra implementación del recurso, pero puede ser útil para comprobar que el programa es correcto. Notad que la operación de recibir mensajes (leer) tiene un parámetro de entrada UID[e] y un parámetro de salida que resulta ser una tupla UID Grupo Contenido. En la implementación en Java se representa dicha operación como un método Mensaje leer(int uid) que dado un uid devuelve un objeto de tipo Mensaje, que contiene los tres datos de salida. En la POST de salirgrupo usamos la sintaxis S R, donde S es una sequencia y R un conjunto, para construir una nueva sequencia derivada de S donde los elementos que están en el conjunto R han sido borrados. En la práctica significa que salirgrupo(uid,grupo) borra los mensajes con origen en el grupo grupo para el usario uid. 2. Prácticas 2.1. Primera práctica La entrega consistirá en una implementación del recurso compartido en Java usando la clase Monitor de la librería cclib. La implementación a realizar debe estar contenida en un fichero llamado QuePasaMonitor.java que implementará la interfaz QuePasa. (ver sec. 3). Nótese que la clase QuePasaMonitor debe estar en el paquete cc.qp, es decir, el fichero QuePasaMonitor debe empezar con la declaración package cc.qp;. 2.2. Segunda práctica La entrega consistirá en una implementación del recurso compartido en Java mediante paso de mensajes síncrono, usando la librería JCSP. La implementación deberá estar contenida en un fichero llamado QuePasaCSP.java que implementará la interfaz QuePasa. (ver sec. 3). Notad que la clase QuePasaCSP

Curso 2017 2018 Convocatoria de Semestre feb jun 5 deberia estar en el paquete cc.qp, es decir el fichero QuePasaCSP deberia empezar con la declaración package cc.qp;. 3. Información general La entrega de las prácticas se realizará vía WWW en la dirección http://lml.ls.fi.upm.es/ entrega. El código que finalmente entreguéis (tanto para memoria compartida como para paso de mensajes) no debe realizar ninguna operación de entrada/salida. Para facilitar la realización de la práctica están disponibles en http://babel.upm.es/teaching/ concurrencia varias unidades de compilación: QuePasa.java: define la interfaz común a las distintas implementaciones del recurso compartido. Mensaje.java: define los mensajes creados en el metodo mandarmensaje en vuestra implementación del recurso, y devuelto por el metodo leer. PreconditionFailedException.java: representa una excepcion que vuestra implementacion del recurso deberia lanzar cuando no se cumple una precondition. Para poder simular vuestra implementación está disponible los ficheros: SimulateQuePasa.java para ejecutar una simulacro con un numero de usarios simulados SimulatedLector.java implementa un proceso usario que lee mensajes SimulatedEscritor.java implementa un proceso usario que manda mensajes, y tambien crea grupos, sale grupos, y anadé miembros a grupos. QuePasaCSP.java: esqueleto para la práctica 2, que incluirá la mayor parte del código vernacular de JCSP. Por supuesto durante el desarrollo podéis cambiar el código que os entreguemos para hacer diferentes pruebas, depuración, etc., pero el código que entreguéis debe poder compilarse y ejecutar sin errores junto con el resto de los paquetes entregados sin modificar estos últimos. Podéis utilizar las librerías estandar de Java y las librerias auxiliares que estén disponibles para asignaturas previas (p.ej. la librería aedlib.jar de Algoritmos y Estructuras de Datos disponible en http://lml.ls.fi. upm.es/~entrega/aed/aedlib), para la definición de estructuras de datos. El programa de recepción de prácticas podrá rechazar entregas que: Tengan errores de compilación. Utilicen otras librerías o aparte de las estándar de Java y las que se han mencionado anteriormente. No estén suficientemente comentadas. Alrededor de un tercio de las líneas deben ser comentarios significativos. No se tomarán en consideración para su evaluación prácticas que tengan comentarios ficticios con el único propósito de rellenar espacio. No superen unas pruebas mínimas de ejecución, integradas en el sistema de entrega.