Está en la página 1de 20

Mquinas de Estado Finito -1-

Ingeniera de Software I

Mquinas de Estado Finito


INTRODUCCIN ................................................................................................................2 SINTAXIS..............................................................................................................................2 SEMNTICA ........................................................................................................................3 EJEMPLO ..............................................................................................................................3 TRAZAS ................................................................................................................................4 EJEMPLO ..............................................................................................................................4 DEADLOCK .........................................................................................................................5 EJEMPLO ..............................................................................................................................5 SEMNTICA DEL DEADLOCK ................................................................................................5 COMPOSICIN DE FSM ...................................................................................................6 SINTAXIS DE LA COMPOSICIN .............................................................................................7 Ejemplo ...........................................................................................................................7 Sobre la composicin......................................................................................................8 EJEMPLO ..............................................................................................................................9 EXTENSIONES ..................................................................................................................10 CONDICIONES ....................................................................................................................10 ACCIONES ..........................................................................................................................10 VARIABLES ........................................................................................................................10 Ejemplo .........................................................................................................................11 CONDICIONES DE SALIDA DE UN ESTADO ...........................................................................11 Ejemplo .........................................................................................................................12 FSMS TEMPORIZADAS .......................................................................................................12 Ejemplo .........................................................................................................................13 NO DETERMINISMO.......................................................................................................13 EJEMPLO ............................................................................................................................13 MODELO CONCEPTUAL ...............................................................................................17 EJEMPLO ............................................................................................................................17 ACLARACIONES .................................................................................................................20

Mquinas de Estado Finito -2-

Ingeniera de Software I

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
Las mquinas de estado finito se definen como una tupla S , , A S S , sk , donde:

S = {s1 , s2 ,..., sm } : es un conjunto finito de nodos.


: es un alfabeto finito de etiquetas. A : es un conjunto finito de aristas etiquetadas que unen nodos. sk S : es el estado inicial.

Ejemplo
a 2 1 b 3 a b

S = {1, 2,3}
= {a, b}

, A = {(1, a, 2 ) , ( 2, b,3) , ( 3, a,1) , (1, b,3)}

sk = 1

Vale la pena destacar que formalmente la mquina de estado es la tupla anterior y no el dibujo. Este es tan slo una representacin grfica de la mquina de estado para tener una ms sencilla y rpida visualizacin de su contenido.

Mquinas de Estado Finito -3-

Ingeniera de Software I

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
Supongamos que se quiere modelar el comportamiento de una puerta. La puerta, inicialmente cerrada, puede pasar a estar abierta tras el evento abrir puerta. Una vez abierta, puede pasar al estado cerrada, tras el evento cerrar puerta.

abrir puerta cerrada cerrar puerta abierta

Mquinas de Estado Finito -4-

Ingeniera de Software I

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
Dada la FSM de ejemplo: a 2 1 b 3 a Las trazas de esta FSM son: {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 b

Mquinas de Estado Finito -5-

Ingeniera de Software I

Deadlock
Formalmente hablando, una FSM S , , A S S , sk , tiene deadlock, si existe algn nodo s S , tal que no existen un evento e y un nodo t S tal que ( s, e, t ) A . En otras palabras, si existe algn nodo que no posea salida para ningn evento.

Ejemplo
El estado 2 no posee salida alguna. a 2 1 b 3 a

Semntica del deadlock


La existencia de deadlock no necesariamente habla de un mal modelado. Ms adelante veremos que puede ser un efecto no deseado de la composicin de FSMs. Un ejemplo en donde el deadlock no necesariamente est mal, podra ser el siguiente: Queremos modelar un partido de ftbol. Un partido de ftbol, en particular, se organiza, se juega y finaliza. Y una vez finalizado, ese partido no se juega ni organiza nunca ms. Entonces podramos modelarlo de la siguiente manera:
rbitro pita comienzo del partido rbitro pita fin del partido

Esperando inicio

Partido en curso

Partido finalizado

Mquinas de Estado Finito -6-

Ingeniera de Software I

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. Tambin asumamos lo siguiente: en cualquier momento es posible establecer el modo de coccin.
modo de coccin modo de coccin cerrar puerta

Puerta abierta y encendido deshabilitado abrir puerta

Puerta cerrada y horno apagado

prender horno

apagar horno

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. Muchas veces es posible descomponer un complicado problema en problemas ms pequeos y ms fciles de tratar. Esto tambin es aplicable a las FSMs: una FSM puede descomponerse en varias FSMs ms simples. Sin embargo (como vern resolviendo los ejercicios de la prctica) no es trivial hacerlo, y hay que tener mucho cuidado de que la composicin de las maquinas sencillas represente exactamente a la FSM descompuesta y no a una parecida.

Mquinas de Estado Finito -7-

Ingeniera de Software I

Sintaxis de la composicin
La composicin de FSMs se realiza a travs de la sincronizacin de etiquetas. Sean A = S A , A , AA S A A S A , sk A y B = S B , B , AB S B B S B , sk B La composicin paralela A || B se define como S , A B , A ( S A S B ) ( A B ) ( S A S B ) , ( sk A , sk B ) donde:

dos FSM.

S S A SB

( ( s , s ) , e, ( s , s ) ) A slo si se cumple alguna de estas condiciones:


a b c d

o o o

( sa , e, sc ) AA e B sb = sd ( sb , e, sd ) AB e A sa = sc ( sa , e, sc ) AA ( sb , e, sd ) AB e A B

Ejemplo
A
A1

B a
B1

a
A2

b
B3

B2

d c A||B a
A1,B1

c
A2,B3

A2,B2

Mquinas de Estado Finito -8-

Ingeniera de Software I

Sobre la composicin
Analicemos el siguiente ejemplo: A
A1

B
B1

a b
A2

a
B2

Qu sucede con A||B? 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 -9-

Ingeniera de Software I

Ejemplo
Volviendo a nuestro ejemplo:
modo de coccin modo de coccin cerrar puerta

Puerta abierta y encendido deshabilitado abrir puerta

Puerta cerrada y horno apagado

prender horno

apagar horno

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
Puerta abierta cerrar puerta! abrir puerta! Puerta cerrada cerrar puerta? Horno apagado prender horno Horno prendido modo de coccin apagar horno

Horno

Encendido deshabilitado abrir puerta?

Modo

HornoMicroondas = Puerta || Horno || Modo

Mquinas de Estado Finito - 10 -

Ingeniera de Software I

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
Inmediatamente despus de ejecutar una transicin y antes de arribar al siguiente estado, la mquina de estado ejecuta una accin. Bsicamente, para nosotros, las acciones sern asignaciones de valores a variables. En algunos contextos, dentro de las acciones, tambin se lanzan eventos (para luego sincronizar otras mquinas). Se escriben entre corchetes.
{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 - 11 -

Ingeniera de Software I

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. Todas las variables se deben definir de antemano: 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 ingresa persona {contador++} lleno ingresa persona {contador++}

egresa persona [contador = 1] {contador--}

egresa persona [contador > 1] {contador--}

Condiciones de salida de un estado


Es posible colocar condiciones booleanas dentro de los estados (utilizando [expresin booleana] dentro de los nodos) para obligar a que se salga del mismo. Mientras la condicin agregada a un estado sea verdadera es posible mantenerse en dicho estado o salir del mismo a travs de una transicin cualquiera. Sin embargo apenas dicha condicin se haga falsa la maquina estar obligada a dejar dicho estado por alguna de las transiciones de salida. Si hay muchas posibles se saldr por cualquiera de estas de forma no determinstica. Si en cambio no hay ninguna transicin posible, se caer indefectiblemente en un deadlock. 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 - 12 -

Ingeniera de Software I

Ejemplo
Alarma
[contador > 1000] encender alarma alarma apagada [contador <= 1000] [contador = 1000] apagar alarma alarma encendida [contador > 1000]

LocalSeguro = Local || 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: nombreTimer: timer. En -unidad de tiempo-. (por ej. segundos). 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 - 13 -

Ingeniera de Software I

Ejemplo
t : timer. En minutos. u: timer. En minutos. Rociador
[t = 120] abrir grifo {t} {u} rociador apagado [t < 120] rociador encendido [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 - 14 -

Ingeniera de Software I

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.

Operador

Llama a 1

Llama a 2

Llama a 3
Sin hablar Hablando

Cuelga 3 Cuelga 2 Cuelga 1

Persona 1

Llama a 1

Persona 2

Llama a 2

Cuelga 2 Cuelga 1

Persona 3

Llama a 3

Cuelga 3

Operador || Persona 1 || Persona 2 || Persona 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 - 15 -

Ingeniera de Software I

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 hablar

Hablando

Cuelga 1 ... Cuelga N

Persona i

Llama a i

Cuelga i

Operador || Persona 1 || ... || Persona N Es importante aclarar que al decir Persona i o Llama a i, la letra i no es una variable. Debe pensarse como una macro que se reemplaza por el nmero correspondiente. Persona i es el nombre de la mquina. Llama a i es una etiqueta, su nombre no puede ser dinmico. 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. El problema anterior se podra pensar de la siguiente manera:

Mquinas de Estado Finito - 16 -

Ingeniera de Software I

Llama a 1

Operador

...
Llama a N

Sin hablar

Hablando i

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).

Operador

Llama a 1

Cuelga 1

Hablando 1

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 - 17 -

Ingeniera de Software I

Otra forma de hacerlo (probablemente no la ms bonita desde el punto de vista de la claridad expositiva pero sintcticamente correcta) es la siguiente, ahora utilizando una nica maquina de estados pero agregando variables y condiciones: destinatario: [1, N]
Llama a 1 {destinatario=1}

Operador

...
Llama a N {destinatario=N}

Sin hablar

Hablando

[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. El objetivo ser explicar la semntica de las transiciones de la FSM, identificando responsabilidades en las entidades, las cuales podrn ser especificadas formalmente utilizando OCL.

Ejemplo

Mquinas de Estado Finito - 18 -

Ingeniera de Software I

Supongamos el siguiente dominio de problema: al ingresar una orden de compra, se determinan cules son los electrodomsticos que se vendern. Luego, cuando la orden es autorizada, los electrodomsticos son reservados. Slo despus de que la orden se encuentra autorizada, sta puede ser facturada. El importe de la factura debe ser igual a la suma de los precios de los electrodomsticos.
// Los electrodomsticos no deben estar reservados si la orden an no fue autorizada. Context: OrdenDeCompra Inv: self.estaAutorizada? = False implies (self.electrodomesticos->forAll( e | e.reservado = false)) // Una orden est autorizada, si posee una autorizacin asociada. Context: OrdenDeCompra :: estaAutorizada? : boolean Derive: self.autorizacin->size() > 0 // Una orden est facturada, si posee una factura asociada. Context: OrdenDeCompra :: estaFacturada? : boolean Derive: self.factura->size() > 0 // Una orden no puede ser facturada sino fue autorizada previamente. Context: OrdenDeCompra Inv: self.estaAutorizada? = False implies (self.estaFacturada? = False) // 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 - 19 -

Ingeniera de Software I

El ciclo de vida de una orden de compra, es el siguiente: OrdenDeCompra


registrarAutorizacin emitirFactura

Ingresada

Autorizada

Facturada

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. Context: Orden de Compra OrdenDeCompra
Ingresada

Autorizada

Facturada

registrarAutorizacin R: autorizar()

emitirFactura R: facturar()

Y luego se deber refinar el modelo conceptual:

Mquinas de Estado Finito - 20 -

Ingeniera de Software I

Y con OCL especificar las responsabilidades:


Context: OrdenDeCompra:: autorizar // No debe estar autorizada Pre: self.estaAutorizada = False // Luego de ejecutar esta responsabilidad, se crea una autorizacin asociada a la orden. Y se reservan todos los electrodomesticos de la orden. Post: self.autorizacin->size() = 1 and self.autorizacion.oclIsNew() and self.electrodomesticos->forAll( e | e.reservado = true) Context: OrdenDeCompra:: facturar // Debe estar autorizada y no debe estar facturada Pre: self.estaAutorizada = True and self.estaFacturada = False // Luego de ejecutar esta responsabilidad, se crea una factura asociada a la orden. Post: self.factura->size() = 1 and self.factura.oclIsNew() and self.factura.importe = self.electrodomesticos.precio->sum()

Aclaraciones
La incorporacin de estas extensiones, no condiciona ni cambia el comportamiento de la FSM ni su posible composicin. El objetivo slo es adicionar informacin semntica sobre qu significa, con respecto al modelo conceptual, que cierta entidad cambie de estado. 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.

También podría gustarte