- 1 - Cada vez que un avión desea despegar o aterrizar debe

Anuncio
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
Descargar