You are on page 1of 6

Diagrama de estados

Por Ivn Alvarado Espejo

1. Introduccin Los diagramas de estados son una tcnica conocida para describir el comportamiento de un sistema. Describen todos los estados posibles en los que puede entrar un objeto particular y la manera en que cambia el estado del objeto, como resultado de los eventos que llegan a l. En la mayor parte de las tcnicas OO, los diagramas de estados se dibujan para una sola clase, mostrando el comportamiento de un solo objeto durante todo su ciclo de vida. Existen muchas formas de diagramas de estados, cada una con semntica ligeramente diferente. La ms popular que se emplea en las tcnicas de OO se basa en la tabla de estados de David Harel (Vol. 8). OMT fue quien la us por primera vez para los mtodos de OO y fue adoptada por Grady Booch en su segunda edicin (1994). La Figura 1-1 muestra un diagrama de estados de UML para un pedido del sistema de proceso de pedidos que present antes. El diagrama indica los diversos estados de un pedido. Comenzamos en el punto de partida y mostramos una transicin inicial al estado de Comprobacin. Esta transicin est etiquetada como "/obtener el primer artculo". La sintaxis de una etiqueta de transicin tiene tres partes, las cuales son optativas: Evento {Guard Guardia} / Accin. En este caso, slo tenemos la accin "obtiene primer artculo." Una vez realizada tal accin, entramos al estado de Comprobacin. Este estado tiene una actividad asociada con l, la cual se indica mediante una etiqueta con la sintaxis hace/actividad. En este caso, la actividad se llama" comprueba artculo".

Figura 1-1: Diagrama de estados Ntese que utilizo los trminos "accin" para indicar la transicin, y "actividad" para indicar el estado. Aunque ambos son procesos, implementados caractersticamente mediante algn mtodo sobre Pedido, se tratan de manera diferente. Las acciones se asocian con las transiciones y se consideran como procesos que suceden con rapidez y no se pueden interrumpir. Las actividades se asocian con los estados y pueden tardar ms. Una actividad puede ser interrumpida por algn evento. Advirtase que la definicin de "rpidamente" depende del tipo de sistema que se est produciendo. En un sistema de tiempo real, "Rpidamente" puede significar unas pocas instrucciones de cdigo mquina; en los sistemas de informacin normales, "rpidamente" puede significar menos de unos cuantos segundos. Cuando una transicin no tiene evento alguno en su etiqueta, significa que la transicin se da tan pronto como se completa cualquier actividad asociada con el estado dado. En este caso, ello significa tan pronto se termine la Comprobacin. Del estado Comprobacin se derivan tres transiciones. Las tres slo tienen guardias en su etiqueta. Un guardia es una condicin lgica que slo devuelve "verdadero" o "falso." Una transicin de guardia ocurre slo si el guardia se resuelve como "verdadero". Slo se puede tomar una transicin de un estado dado, por lo que tratamos de que los guardias sean mutuamente excluyentes para cualquier evento. En la Figura 1-1 abarcamos tres condiciones: 1. Si no hemos comprobado todos los artculos, tomamos el siguiente artculo y regresamos al estado de Comprobacin para comprobado. 2. Si hemos comprobado todos los artculos y todos estn en existencia, hacemos la transicin al estado de Despachando. 3. Si hemos comprobado todos los artculos pero no todos estn en existencia, hacemos la transicin al estado Espera.

Veamos, en primer lugar, el estado Espera. Como no hay actividades para este estado, el pedido se detiene en l esperando un evento. Ambas transiciones del estado Espera se etiquetan con el evento Artculo recibido. Esto significa que el pedido espera hasta que detecta este evento. Llegado ese momento, evala los guardias de las transiciones y hace la transicin apropiada (ya sea a Despachando o de vuelta a Espera). Dentro del estado Despachando, tenemos actividad que inicia una entrega. Tambin hay una transicin simple no guardada, disparada por el evento Entregado. Esto indica que la transicin ocurrir siempre que tenga lugar el evento. Sin embargo, ntese que la transicin no sucede cuando termina la actividad; por el contrario, una vez terminada la actividad "iniciar entrega", el pedido se mantiene en el estado Despachando, hasta que ocurre el evento Entregado. La ltima cuestin a considerar es la transicin denominada" cancelado". Queremos tener la posibilidad de cancelar un pedido en cualquier momento, antes de que sea entregado. Podramos hacerlo dibujando transiciones separadas desde cada uno de los estados, Comprobacin, Espera y Despacho. Una alternativa til es crear un superestado con los tres estados, y despus dibujar una transicin simple, a partir de l. Los subestados simplemente heredan todas las transiciones sobre el superestado. Las Figura 1-2 y 1-3 muestran cmo estos enfoques reflejan el mismo comportamiento del sistema. La Figura 1-2 aparece ms bien cargada, a pesar de que slo tiene tres transiciones duplicadas. La Figura 1-3, en cambio, da un cuadro ms claro y, si se necesitan posteriormente los cambios, ser ms difcil olvidar el evento cancelado.

Figura 1-2: Diagrama de estados sin superestados

En los ejemplos actuales, he mostrado una actividad dentro de un estado, indicndola con texto en la forma de hace/actividad. Tambin se pueden indicar otras cosas en un estado. Si un estado responde a un evento con una accin que no produzca una transicin, dicha condicin se puede mostrar poniendo un texto de la forma nombreEvento/nombreAccin en el cuadro de estado.

Figura 1-3: Diagrama de estados con superestados

Existen tambin dos eventos especiales, entrada y salida. Cualquier accin que est marcada como vinculada al evento entrada se ejecuta siempre que se entre al estado dado a travs de una transicin. La accin asociada con el evento salida se ejecuta siempre que se sale del estado por medio de una transicin. Si se tiene una transicin que vuelve al mismo estado (a esto se le llama autotransicin ) por medio de una accin, se ejecuta primero la accin de salida, luego la accin de transicin y, por ltimo, la accin de entrada. Si el estado tiene tambin una actividad asociada, sta se ejecuta tras la accin de entrada.

2. Diagramas de estados concurrentes Adems de los estados de un pedido que se basan en la disponibilidad de los artculos, tambin existen estados que se basan en la autorizacin de pagos. Si vemos estos estados, podramos ver un diagrama de estados como el de la figura 8-4.

Figura 1-4: Autorizacin de pagos

Aqu comenzamos efectuando una autorizacin. La actividad de "comprobacin de pago" termina sealando que el pago fue aprobado. Si el pago est bien, el pedido espera en el estado Autorizado hasta que sucede el evento de "entrega". De otro modo, el pedido entra al estado de Rechazado. El objeto Orden presenta una combinacin de los comportamientos que se muestran en las Figura 1-1 y 1-2. Los estados asociados y el estado Cancelado mencionados anteriormente pueden combinarse en un diagrama de estados concurrentes Ntese que en la figura 1-5 he dejado fuera los detalles de los estados internos. Las secciones concurrentes del diagrama de estados son lugares en los que, en cualquier punto, el pedido est en dos estados diferentes, uno por cada diagrama. Cuando el pedido deja los estados concurrentes, se encuentra en un solo estado. Se puede ver que un pedido se inicia tanto en el estado Comprobando como en el estado Autorizando. Si la actividad de "comprobacin de pago" del estado Autorizando se completa inicialmente de modo exitoso, entonces el pedido estar en los estados Comprobando y Autorizado. Si sucede el evento" cancelar", entonces el pedido slo estar en el estado Cancelado.

Figura 1-5:Diagrama de estados concurrentes

Los diagramas de estados concurrentes son tiles cuando un objeto dado tiene conjuntos de comportamientos independientes. Ntese, sin embargo, que no se debe permitir que sucedan demasiados conjuntos de comportamientos concurrentes en un solo objeto. Si se tienen varios diagramas de estados concurrentes complicados para un solo objeto, se deber considerar la divisin del objeto en varios. 3. Cundo utilizar los diagramas de estados Los diagramas de estados son buenos para describir el comportamiento de un objeto a travs de varios casos de uso. No son tan buenos para describir un comportamiento que involucra cierto nmero de objetos que colaboran entre ellos. As pues, es til combinar los diagramas de estados con otras tcnicas. Por ejemplo, los diagramas de interaccin (vase el captulo 6) son buenos para la descripcin del comportamiento de varios objetos en un mismo caso de uso. Por su parte, los diagramas de actividades son buenos para mostrar la secuencia general de las acciones de varios objetos y casos de uso. Hay quienes consideran que los diagramas de estado son naturales, pero muchos no los consideran as. Preste atencin al modo en que los emplean quienes trabajan con ellos; podra ocurrir que su equipo no considere tiles los diagramas de estados, debido a su modo de trabajar. Esto no sera un gran problema; como siempre, deben combinarse las tcnicas que sean de utilidad. Si decide utilizar diagramas de estados, no trate de dibujar uno por cada clase del sistema. Aunque ste es el enfoque que emplean los detallistas ceremoniosos, casi siempre es un esfuerzo intil. Utilice los diagramas de estados slo para aquellas clases que presenten un comportamiento interesante, cuando la construccin de tales diagramas le ayude a comprender lo que sucede. Muchos consideran que los objetos de interfaz de usuario (IU) y de control tienen el tipo de comportamiento que es til describir mediante diagramas de estados.