Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Maquina de Estado PDF
Maquina de Estado PDF
-1-
Introduccin
Las mquinas de estado finito son una herramienta muy til para especificar aspectos
relacionados con tiempo real, dominios reactivos o autnomos, computacin reactiva,
protocolos, circuitos, arquitecturas de software, etc.
El modelo de FSM (Finite State Machine) es un modelo que posee sintaxis y semntica
formales y que sirve para representar aspectos dinmicos que no se expresan en otros
diagramas.
Sintaxis
Ejemplo
2
1
b b
3
a
S = {1, 2,3}
,
= {a, b}
,
A = {(1, a, 2 ) , ( 2, b,3) , ( 3, a,1) , (1, b,3)}
,
sk = 1
Semntica
Los nodos representan los posibles estados de aquello que se desea modelar. Las etiquetas
representan eventos que provocan un cambio. Las aristas determinan de qu manera cada
estado, dado un evento, deriva en otro estado.
Ejemplo
abrir puerta
cerrada abierta
cerrar puerta
Mquinas de Estado Finito Ingeniera de Software I
-4-
Trazas
El conjunto de posibles trazas correspondientes a una mquina de estado finitos, se puede
definir en trmino de grafos, cmo el conjunto de todos los caminos (de ejes) alcanzables
desde el estado inicial.
Ejemplo
2
1
b b
3
a
{a, b, a} correspondiente a 1, 2, 3, 1
{b, a} correspondiente a 1, 3, 1
{a, b, a, b, a} correspondiente a 1, 2, 3, 1, 3, 1
{b, a, a, b, a} correspondiente a 1, 3, 1, 2, 3, 1
{b, a, b, a, ... , b, a} 1, 3, 1, 3, , 1, 3
Etc
Mquinas de Estado Finito Ingeniera de Software I
-5-
Deadlock
Ejemplo
2
1
b
3
a
rbitro pita comienzo del partido rbitro pita fin del partido
Composicin de FSM
Supongamos que se quiere modelar el siguiente comportamiento de un horno microondas:
El horno microondas posee una puerta. Si la puerta est cerrada, entonces puede estar o no
en funcionamiento (segn se prenda o apague). Estando prendido no es posible abrir la
puerta del horno sin antes apagarlo.
Puerta cerrada y
horno prendido
modo de
coccin
No es obligatorio etiquetar los nodos, sin embargo puede resultar muy til hacerlo: sobre
todo aquellos nodos que representan los estados principales de que se est modelando.
Sintaxis de la composicin
S S A SB
( ( s , s ) , e, ( s , s ) ) A slo si se cumple alguna de estas condiciones:
a b c d
o ( sa , e, sc ) AA e B sb = sd
o ( sb , e, sd ) AB e A sa = sc
o ( sa , e, sc ) AA ( sb , e, sd ) AB e A B
Ejemplo
A B
a
A1 B1
a b b
B2
A2 B3
d
c A||B
a
A1,B1 d
c
A2,B2
A2,B3
b
Mquinas de Estado Finito Ingeniera de Software I
-8-
Sobre la composicin
A B
A1 B1
a a a b
b
A2 B2
A||B
a
A1,B1
A2,B2
Segn nuestras reglas de composicin, A||B quedara con el estado inicial (A1,B1) y la
nica transicin posible sera a, dejando a la mquina en el estado (A2, B2) y en deadlock.
Las mquinas A y B no posean deadlock, pero su composicin s. Tambin podra pasar al
revs. Componer dos FSM no es simplemente poner el smbolo || entre sus nombres: se
debe analizar el posible resultado para comprobar que se est modelando lo que uno
realmente desea modelar.
Mquinas de Estado Finito Ingeniera de Software I
-9-
Ejemplo
modo de
coccin
modo de cerrar puerta
coccin
Puerta cerrada y
horno apagado
Puerta abierta y
encendido
deshabilitado
prender horno apagar horno
abrir puerta
Puerta cerrada y
horno prendido
modo de
coccin
Podemos descomponer este problema en tres partes: por un lado modelaremos una puerta
que se abre y se cierra, y por otro un horno que se prende y apaga y trataremos el modo de
coccin de manera independiente.
Puerta Horno
Puerta Encendido
abierta deshabilitado
cerrar abrir
puerta! puerta!
cerrar abrir
puerta? puerta?
Puerta
cerrada Horno
apagado
prender apagar
Modo horno horno
Horno
prendido
modo de
coccin
Cuando se hagan composiciones de FSMs, en las transiciones que posean etiquetas con el
mismo nombre en dos o ms maquinas de estado diferentes (es decir las transiciones que
componen) se utilizar el smbolo de exclamacin y de interrogacin para diferenciar entre
el arco que realmente dispara la transicin, del que recibe el impulso. Al nombre de
etiqueta del primero se le concatenar un signo de exclamacin, mientras que al segundo
uno de exclamacin. La semntica es tan simple como que la transicin con el signo de
exclamacin es la que realmente emite y dispara el evento, y las que poseen el de
interrogacin son las que lo reciben.
Extensiones
Para aumentar el poder expresivo, existen extensiones al lenguaje de FSM visto
anteriormente.
Condiciones
Son expresiones booleanas que determinan si una transicin entre estados puede realizarse.
Se escriben entre corchetes.
[expresin booleana]
Acciones
{accin; accin}
Variables
Sus valores posibles deben pertenecer a un dominio finito. Pueden utilizarse estructuras
como arreglos o tipos abstractos de datos en general (cmo por ejemplo conjuntos o pilas).
Los variables pueden usarse dentro de las expresiones booleanas de las condiciones y su
valor puede cambiarse utilizando acciones, generalmente asignaciones. A su vez, salvo
explicitado lo contrario, las variables son compartidas por todas las FSMs de la
composicin (es decir pueden verse como globales a todas las mquinas de estado).
Mquinas de Estado Finito Ingeniera de Software I
- 11 -
Ejemplo
Un local de ropa puede estar vaco o lleno segn la cantidad de personas que hay en su
interior. Inicialmente est vaco, pero luego de ingresar la primer persona esta lleno. A
partir de ah, la gente puede ingresar o salir. Cuando sale el ltimo, vuelve a estar vaco.
contador : [0, 99999999] (por simplicidad, permitiremos decir . Sin embargo, debemos
resaltar que esto no es del todo correcto: el dominio debe tener un nmero finito de
valores).
Local
{contador = 0}
vaco
egresa persona
[contador = 1]
ingresa persona
{contador--}
{contador++}
lleno
ingresa persona
{contador++} egresa persona
[contador > 1]
{contador--}
Supongamos que al ejemplo anterior del local de ropa se le agrega la condicin de que si
hay ms de 1000 personas dentro debe sonar una alarma. Una forma de representar dicha
situacin es componiendo la siguiente FSM a la ya hecha:
Mquinas de Estado Finito Ingeniera de Software I
- 12 -
Ejemplo
Alarma [contador > 1000]
encender alarma
alarma alarma
apagada encendida
[contador [contador >
<= 1000] 1000]
[contador = 1000]
apagar alarma
FSMs Temporizadas
Muchas veces los disparadores de los eventos que provocan los cambios de estado de las
mquinas son iniciados por el paso del tiempo. Por ej. el cambio de luz de los semforos,
un rociador automtico de csped que se enciende y riega cada 2 horas por 10 minutos, o un
sistema de dosificacin de qumicos en una caera que cada determinada cantidad de
tiempo inyecta distintas sustancias en un orden especial. En todos estos casos la decisin de
que ocurran los eventos es disparada por el tiempo. Para poder representar este
funcionamiento utilizando FSMs se hace necesario extenderlas agregando un componente
extra denominado timer.
Este ser declarado junto con el resto de las variables de la siguiente manera:
Las nicas operaciones permitidas por el timer es resetearlo (es decir colocar su cuenta en
0) y chequear su valor (es decir, ver el tiempo transcurrido desde su ltimo reset). Una
vez que el timer es reseteado empieza a contar el tiempo transcurrido hacia adelante, y
eso es todo lo que sabe hacer (no se lo puede setear en un valor determinado por ej.).
Podremos chequear el tiempo transcurrido a travs del uso de condiciones y podremos
resetearlo utilizando acciones.
La sintaxis para resetear el timer es colocando al nombre del mismo dentro de llaves.
Plasmemos el ejemplo del rociador automtico en una FSM para ver como se puede utilizar
esta extensin para representar dicha situacin:
Mquinas de Estado Finito Ingeniera de Software I
- 13 -
Ejemplo
t : timer. En minutos.
u: timer. En minutos.
Rociador
[t = 120]
abrir grifo
{t}
{u}
rociador rociador
apagado encendido
[t < 120] [u < 10]
[u = 10]
cerrar grifo
{t}
No Determinismo
Si dado un estado y dado un evento, existe ms de una transicin vlida (cuya condicin, si
existe, se satisface), hacia distintos estados, se asumir un comportamiento no
determinstico: es decir, cualquiera de los estados posibles podr ser alcanzado, sin orden
alguno.
Ejemplo
A
a
a
b
b
B C
Mquinas de Estado Finito Ingeniera de Software I
- 14 -
Abusos de Notacin
Supongamos que se quiere modelar lo siguiente: un operador telefnico puede llamar a tres
personas diferentes, pero slo a una de estas a la vez.
Llama a 3
Sin Hablando
hablar
Cuelga 3
Cuelga 2
Cuelga 1
Persona 2 Llama a 2
Persona 1 Llama a 1
Cuelga 2
Cuelga 1
Persona 3 Llama a 3
Cuelga 3
Si en lugar de tres personas, las mismas son 100, o 1000, o 10000, rapidamente nos
encontraremos con un problema.
Mquinas de Estado Finito Ingeniera de Software I
- 15 -
Para modelar lo anterior, aclarando que la cantidad de personas es finita, se podr utilizar la
siguiente notacin:
Llama a 1
Operador
...
Llama a N
Sin Hablando
hablar
Cuelga 1
...
Cuelga N
Persona i Llama a i
Cuelga i
En el caso del operador, a pesar de que responde a muchos Llama a i posee slo dos
estados: Sin hablar o Hablando.
Por simplicidad, no se recomienda indizar los estados. Es decir, hablar de por ejemplo del
estado Hablando i. La razn de esto es que facilmente se pierde control de lo que se est
queriendo modelar.
Llama a 1
Operador
...
Llama a N
Sin Hablando i
hablar
Cuelga 1
...
Cuelga N
Persona i Llama a i
Cuelga i
Es decir, identificar en el operador, no slo si est hablando o no, sino que tambin con
quien lo est haciendo (en el otro ejemplo, esta informacin es deducible).
Llama a 2
Sin
hablar
Cuelga 2
Hablando 2
Llama a 3
Cuelga 3 Hablando 3
Puede verse cmo, al explotar los estados, se forma una especie de abanico. Imaginense
ahora que desde el estado Hablando i, sale otra flecha cuyo evento tambin se encuentra
indizado y que llega a otro estado tambin indizado. Este tipo de abuso, oculta mucha
informacin que hace a la interpretacin de la mquina de estados.
Mquinas de Estado Finito Ingeniera de Software I
- 17 -
destinatario: [1, N]
Llama a 1
{destinatario=1}
Operador
...
Llama a N
{destinatario=N}
Sin Hablando
hablar
[destinatario=1]
Cuelga 1
...
[destinatario=N]
Cuelga N
Es decir se reemplazan las N FSMs Persona i por una variable destinatario que
almacena al receptor de la llamada del operador y restringe la salida del estado Hablando
por la nica transicin correcta.
Modelo Conceptual
Las mquinas de estado finito, puede utilizarse para especificar aspectos dinmicos de
problemas. Dichos problemas, probablemente tambin posean aspectos estticos:
estructuras de datos necesarias, entidades relacionadas entre s, invariantes, etc. Muchos de
estos aspectos pueden modelarse a travs de un modelo conceptual. A veces, puede ser til
especificar el comportamiento de las entidades identificadas en el modelo conceptual: sus
posibles cambios de estados. En estos casos, es interesante combinar distintas tcnicas:
modelo conceptual, OCL y FSM.
Ejemplo
Mquinas de Estado Finito Ingeniera de Software I
- 18 -
// El importe de la factura debe ser igual a la suma de los precios de los electrodomsticos.
Context OrdenDeCompra
Inv: self.estaFacturada? implies (self.factura.importe = self.electrodomesticos.precio->sum())
Mquinas de Estado Finito Ingeniera de Software I
- 19 -
OrdenDeCompra
registrarAutorizacin emitirFactura
Cuando una FSM describa el comportamiento de una sola entidad, podremos fijar el
contexto de la misma y podremos delegar las acciones correspondientes a algunos eventos,
en responsabilidades de la entidad contexto.
OrdenDeCompra
registrarAutorizacin emitirFactura
R: autorizar() R: facturar()
Aclaraciones
Una vez establecido el contexto de una FSM, es posible utilizar expresiones OCL en
las condiciones y acciones: se cuenta con los valores de los atributos (accediendo
mediante el operador self) y con toda la informacin disponible mediante la
navegacin del modelo conceptual.
Mquinas de Estado Finito Ingeniera de Software I
- 21 -
Ejercicio Resuelto
Cierta estancia cuenta con tres parcelas en las cuales realiza sus cultivos. Con el fin de
optimizar su productividad, se ha definido una poltica con respecto a cmo trabajar la
tierra.
La primer etapa consiste en preparar la tierra en todas las parcelas. Para ello se utiliza un
tractor. La estancia posee un nico tractor, el cual puede ser usado de a una parcela a la vez
(y luego liberado). No hay un orden predeterminado para estas actividades, es ms, todas
las parcelas se pelean entre s para el uso del tractor. De esta manera, mientras que en una
parcela se est realizando el preparado de la tierra, las dems parcelas deben esperar a que
termine.
Recin cuando la tierra de todas las parcelas ha sido preparada se da inicio a la segunda
etapa.
Durante la segunda etapa se siembran simultneamente todas las parcelas (no se utiliza el
tractor para tal tarea). La manera de hacer el sembrado no es relevante (por lo general se
utilizan aviones especialmente equipados).
Respuesta sugerida
Modelamos con una mquina la secuencia de operaciones que se realizarn en las parcelas:
FSM Siembra
Preparar
preparando
Cosechar Sembrar
sembrando
FSM Tractor
intentoReservarTractor_i
intentoReservarTractor_i
liberarTractor_i
FSM Parcela_i
liberarTractor_i
Cosechar reservarTractor_i
reservarTractor_i
finSiembra_i
prep_i
Sembrar
sembrando_i
intentoReservarTractor_i
En este caso no modelamos al uso del tractor con una mquina, sino que utilizamos una
variable que nos dice si ya esta reservado o no.
Parcela_i
tractorLibre : boolean
{tractorLibre = true}
preparar
finCosecha_i inicioPreparacion_i
{tractorLibre = true} [tractorLibre = true]
{tractorLibre = false}
cosechar
sembrar
fin_siembra_i finPreparacion_i
inicioCosecha_i
{tractorLibre = true}
[tractorLibre = true]
{tractorLibre = false}