Ingeniería de Software I 1er. Cuatrimestre 2007 -1Cada vez que un avión desea despegar o aterrizar debe solicitar permiso a la torre de control, la cual, en función de las lecturas del radar, lo puede autorizar o no. La autorización se dará sólo en el caso de que no haya ningún otro avión volando en las cercanías del aeropuerto, ni aviones despegando o aterrizando. Mientras que la autorización no le sea concedida, el avión seguirá pidiendo permiso hasta que lo consiga. Hint: piense en los estados intermedios de un avión desde que está en tierra hasta que termina de despegar y desde que empieza a aterrizar hasta que está nuevamente en tierra. En el momento de que un avión es autorizado para despegar o aterrizar, la torre de control envía una señal a todos los aviones ordenándoles no ingresar en el espacio aéreo del aeropuerto, a fines de evitar accidentes. De manera similar, al finalizar el despegue o aterrizaje en cuestión, la torre levanta la prohibición para volar sobre el espacio aéreo del aeropuerto enviándole a los aviones la señal correspondiente. Modele el enunciado anterior utilizando FSM. PidiendoAutorizacionParaAterrizar _1 ? ... PidiendoAutorizacionParaAterrizar _n ? [cantAviones = 0 and not avionDespegando and not avionAterrizando] { avionAterrizando = true } FSM TORRE POSITIVO prohibidoAcercarse = false avionDespegando = false avionAterrizando = false Sin pedidos PidiendoAutorizacionParaDespegar_1 ? ... PidiendoAutorizacionParaDespegar_n ? [cantAviones = 0 and not avionDespegando and not avionAterrizando] { avionDespegando = true } Puede aterrizar FinAterrizaje _1 ! ... FinAterrizaje _n ! { prohibidoAcercarse = false, avionAterrizando = false } PuedeAterrizar _1 ! ... PuedeAterrizar _n ! { prohibidoAcercarse = true} Con avion aterrizando FinDespegue _1 ! ... FinDespegue _n ! { prohibidoAcercarse = false, avionDespegando = false } Puede despegar PuedeDespegar _1 ! ... PuedeDespegar _n ! { prohibidoAcercarse = true} Con avion despegando Ingeniería de Software I 1er. Cuatrimestre 2007 -2- FSM TORRE NEGATIVO Sin pedidos PidiendoAutorizacionParaDespegar_1 ? ... PidiendoAutorizacionParaDespegar_n ? [cantAviones > 0 or avionDespegando or avionAterrizando] AutorizacionParaDespegarNegada_1 ? ... AutorizacionParaDespegarNegada_n ? AutorizacionParaAterrizarNegada _1 ? ... AutorizacionParaAterrizarNegada _n ? PidiendoAutorizacionParaAterrizar _1 ? ... PidiendoAutorizacionParaAterrizar _n ? [cantAviones > 0 or avionDespegando or avionAterrizando] Con pedidos y aviones cerca Ingeniería de Software I 1er. Cuatrimestre 2007 -3- SeAcerca_1 ? ... SeAcerca_n ? { cantAviones++ } FSM RADAR cantAviones = 0 Sin aviones SeAcerca_1 ? ... SeAcerca_n ? { cantAviones++ } Con aviones SeAleja_1 ? ... SeAleja_n ? [ cantAviones = 1] { cantAviones-- } SeAleja_1 ? ... SeAleja_n ? [ cantAviones > 1] { cantAviones-- } Ingeniería de Software I 1er. Cuatrimestre 2007 -4- FSM AVION_i PidiendoAutorizacionParaDespegar_i ! PuedeDespegar_i ? FinDespegue_i ! En tierra Esperando autorización despegue Despegando PidiendoAutorizacionParaAterrizar_i ! AutorizacionParaDespegarNegada_i ? Volando, cerca de aeropuerto AutorizacionParaAterrizarNegada_i ? FinAterrizaje_i ! Aterrizando Esperando autorización aterrizaje SeAleja_i ! SeAcerca_i ! [ not prohibidoAcercarse] PuedeAterrizar_i ? Volando, lejos de aeropuerto