Proyecto 4 Simulador de un Aeropuerto basado en Eventos Dpto. de Ingeniería de Sistemas Telemáticos http://www.lab.dit.upm.es/~lprg/ Abril 2008
Proyecto 4
1
Objetivos z Se cubren los siguientes aspectos:
Pruebas funcionales con JUnit
Trazas de ejecución
Entrada/salida de ficheros
Elementos de programación en Java
Estilo de codificación
Documentación de programas con javadoc
Abril 2008
Proyecto 4
2
Simulación basada en eventos z Evento = suceso que ocurre en un instante en el tiempo z Ejemplos de eventos:
Un avión solicita permiso para aterrizar
Un avión “toca tierra” tras una maniobra de aterrizaje
Un avión solicita permiso para despegar
Un avión finaliza una maniobra de despegue
z Simulador basado en eventos = aquel que se “mueve” con eventos (es
decir, “a saltos”) z En el proyecto p4 desarrollaremos un simulador basado en eventos para un
aeropuerto. Podremos medir resultados estadísticos resultantes para distintas combinaciones de parámetros de entrada. Abril 2008
Proyecto 4
3
Lógica del simulador Llegada de aeronave
Asistencia en tierra
Intento de aterrizaje
Intento de despegue
Actividad Evento
Decisión Reintento de aterrizaje
Reintento de despegue
Pista libre? No
Sí
Sí Utilización de pista
Utilización de pista
Demora aleatoria
No Demora aleatoria
Fin de aterrizaje
Fin de despegue
Si intento/reintento de aterrizaje: 4Si hay pista libre, se ocupa una, y se genera un nuevo evento de fin de aterrizaje 4Si todas las pistas ocupadas, se genera un nuevo evento de reintento de aterrizaje Si fin de aterrizaje: 4Se libera una pista y se genera un nuevo evento de intento de despegue
Abril 2008
Pista libre?
Si intento/reintento de despegue: 4Si hay pista libre, se ocupa una, y se genera un nuevo evento de fin de despegue 4Si todas las pistas ocupadas, se genera un nuevo evento de reintento de despegue Si fin de aterrizaje: 4Se libera una pista
Proyecto 4
4
Interface Evento
Abril 2008
Proyecto 4
5
Class EventoAeroportuario z EventoAeroportuario implementa la interfaz Evento z + atributos específicos: TipoOperacion: ATERRIZAJE, DESPEGUE EstadoOperacion: INTENTO, REINTENTO, FIN z + factorías para nuevos eventos (relacionados con uno):
Fin de aterrizaje
Fin de despegue
Intento de aterrizaje
Reintento de aterrizaje
Reintento de despegue
Intento de despegue
Abril 2008
Proyecto 4
6
Class Generador z Usado por las factorías de EventoAeroportuario z Permite simular la duración aleatoria de las actividades del aeropuerto
(entre eventos relacionados): Intento de aterrizaje
Abril 2008
demoraReintento()
Reintento aterrizaje/ despegue
Fin de aterrizaje
duracionEnTierra()
Intento de despegue
Intento de aterrizaje
entreLlegadas()
Pista libre?
No
Intento de aterrizaje
Proyecto 4
7
Class Parametros z Permite modificar en tiempo de ejecución las características de
la simulacion. z Debe leer un fichero de configuración “parametros.ini”: ################################################### # parámetros del aeropuerto ####################### ################################################### # numero total de pistas numero.pistas = 2 # duracion del slot aeroportuario (en segundos) duracion.slot = 120 ################################################### # parámetros de generador de números aleatorios ### ################################################### # generacion de números aleatorios semilla = 1 # frecuencia de llegada de aeronaves (llegadas por minuto) frecuencia.llegadas= 0.5 # duración de asistencia en tierra en segundos duracion.media= 600 duracion.desviacion = 200 duracion.minima= 100 # demora para reintentar solicitud de pista en segundos demora.media= 60 demora.desviacion = 10 Abril 2008
Proyecto 4
8
Class Controlador z Controla la asignación y liberación de pistas
en el aeropuerto:
Abril 2008
Proyecto 4
9
Class Estadistica z Se utiliza desde el Controlador z Registra la ocurrencia de los eventos y calcula
resultados estadísticos:
… Abril 2008
Proyecto 4
10
Class Simulador z Implementa el bucle de simulación y la lógica:
Abril 2008
Proyecto 4
11
Simulador.simulaBucle() z Implementa el bucle de simulación y la lógica: Crea una ColaEventos vacía miEvento = nuevo evento aeroportuario de intento de aterrizaje [Bucle de iteración] MIENTRAS miEvento.getCuando()