Sistemas de Programas (CI-3711).

Clase del día 11/02/99.
Tópico: Diagramas de estados anidados.

Integrantes
Pinto V., José, No. de carnet 96-28837
Ferreira M., Jhony, No. de carnet 96-28429
 

 
[Diagramas de estados anidados][Concurrencia ] [ Conceptos avanzados de modelado dinámico ] [Enlaces] [Bibliografía]
 

Diagramas de estados anidados.
        Los diagramas de estados se pueden estructurar para así realizar descripciones concisas de sistemas complejos. La forma de estructurar estos diagramas es muy similar a la de objetos: la generalización y la agregación. La generalización es el equivalente a expandir las actividades anidadas. Ésta permite describir una actividad a alto nivel, y expandirla después a uno más bajo añadiendo detalles, de forma similar a las llamadas a procedimientos anidados, además admite que los estados y los sucesos se dispongan en jerarquías de generalización con herencia de estructuras y comportamientos comunes, al igual que en la herencia de atributos y de operaciones en las clase. La agregación permite que el estado se descomponga en componentes ortogonales, con una interacción limitada entre ellos, de la misma manera que en una jerarquía de agregación de objetos. La agregación es el equivalente a la concurrencia de estados. Los estados concurrentes suelen corresponderse con agregaciones de objetos, posiblemente de todo un sistema, que tengan partes que interactúen.
 

 

Anidamiento de diagramas de estados

        Una actividad perteneciente a un estado se puede expandir en forma de diagrama de estados en donde cada uno representará un paso de la actividad. Las actividades anidadas son diagramas de estados de un solo uso, con transiciones de entrada y de salida, parecidas a subrutinas. El conjunto de diagramas de estados anidados forma una retícula (si expandimos las distintas copias del mismo diagrama anidado estaremos en presencia de un árbol).

        La Figura 1 muestra un modelo para una máquina dispensadora. Este diagrama contiene una actividad, Dispensar ítem, y un suceso, seleccionar (ítem), que se expanden con más detalle en diagramas de estados anidados. Nótese que el diagrama presenta una notación alternativa. Véase que el suceso monedas insertadas (cantidad) está dentro del estado Recoger dinero, lo que indica que la transición permanecerá dentro del mismo estado. Además, la transición desde el estado sin nombre que contiene "hacer: Dispensar objeto" hasta el estado Libre no tiene rótulo de suceso. La carencia de rótulo de suceso indica que la transición se dispara automáticamente cuando ha terminado la actividad del estado.

 
Figura 1 Modelo de una máquina dispensadora
 
        La Figura 2 muestra un subdiagrama para la actividad dispensar ítem de la Figura 1.Esta actividad corresponde a una secuencia de estados y sucesos de nivel inferior invisibles en el diagrama de estados original, que es de alto nivel.
 
 
Figura 2 La actividad dispensar ítem de la máquina expendedora.
 
 

        Los sucesos también se pueden expandir en diagramas de estados subordinados. La Figura 3 muestra el suceso seleccionar ítem de la Figura 1, que en realidad implica varios sucesos de nivel inferior. El cliente pulsa el número de un ítem, y puede volver a empezar pulsando cancelar; la selección se confirma pulsando aceptar. El rótulo de la diana o "¤ " indica el suceso generado en el diagrama de estados de nivel superior.
 
 

 
Figura 3 La transición seleccionar ítem de una máquina dispensadora.

 

Generalización de estados.

        Una diagrama de estados anidados es en realidad una forma de generalización de estados. Un objeto que se encuentre en un estado del diagrama de alto nivel tiene que estar precisamente en uno de los estados del diagrama anidado. Los estados de este diagrama son todos ellos refinamientos del estado del diagrama de alto nivel. En la sección anterior, los estados del diagrama anidado no son afectados por las transiciones del diagrama de alto nivel, pero en general los estados de un diagrama de estados anidados pueden interactuar con otros.

        Los estados pueden poseer subestados que hereden las transiciones de sus superestados, del mismo modo que las clases poseen subclases que heredan los atributos y operaciones de sus superclases. Toda transición o acción que sea aplicable a un estado es aplicable también a todos sus subestados, a no ser que sea invalidada por una transición equivalente del subestado.

        La Figura 4 muestra un diagrama de estados para una transición automática, que puede estar en marcha atrás, punto muerto o hacia adelante; si está en hacia adelante, puede estar en primera, segunda o tercera. Los estados Primera, Segunda y Tercera son subestados del estado Hacia adelante. La notación de generalización para estados es distinta de la que se utiliza para las clases, con objeto de evitar un gran número de líneas que se podrían confundir con transiciones. Los superestados se dibujan como un gran cuadro redondeado que encierra a todos sus subestados. Éstos, a su vez, pueden encerrar a otros subestados.

 
 
 
 
Figura 4 Diagrama de estados de la transmisión de un coche con generalización.
 
 

        Las transiciones de un superestado son heredadas por todos sus subestados. Al seleccionar "N" en cualquier marcha hacia delante, esto es, primera, segunda o tercera, se produce una transición al punto muerto. La transición de Marcha adelante a Punto Muerto implica tres transiciones heredadas, uno por cada marcha adelante hacia punto muerto. Al seleccionar "F" en punto muerto se da lugar a una transición a las marchas hacia adelante. Dentro del estado Marcha adelante, el subestado Primera es el estado inicial por omisión, lo cual se muestra mediante la transición sin rótulo que parte del circulo negro o "l " dentro del contorno Marcha adelante. Este último es solo un estado abstracto; el control debe encontrarse en un estado real tal como Primera.

        La transición producida por el suceso parada desde Marcha adelante hasta el estado Primera representa una transición que hereda los tres subestados. En cualquier marcha hacia adelante, la detención del coche o automóvil da lugar a una transición a Primera.

        Es posible representar situaciones más complicadas, tales como una transición explícita de un subestado a un estado que esté fuera del contorno, o bien una transición explícita que entre en el contorno. En tal caso, todos los estados deben de aparecer en un diagrama empleando la notación de contornos. En los casos más sencillos, en los cuales no hay interacción salvo por la iniciación y la terminación, los estados anidados se pueden dibujar simplemente como un diagrama por separado y se alude a ellos por su nombre en una sentencia "hacer", tal como en el ejemplo de la máquina dispensadora de la Figura 1.

 

Concurrencia.

 

Concurrencia de agregación.

        Un modelo dinámico describe un conjunto de objetos concurrentes, cada cual con su propio estado y con su propio diagrama de estados. Los objetos de todo sistema pueden cambiar de estado independientemente. El estado de todo el sistema no se puede representar mediante un solo estado de un único objeto; es el producto de los estados de todos los objetos que lo componen. En muchos sistemas, además, el número de objetos puede cambiar dinámicamente.

        Un diagrama de estados para un subsistema es una colección de estados, uno por cada componente. La agregación implica concurrencia. En los casos más interesantes, los estados componentes interactúan. Las transiciones protegidas para un objeto pueden depender de que otro objeto se encuentre en un cierto estado. Esto permite la interacción entre diagramas de estados, manteniendo al mismo tiempo la modularidad.

        La Figura 5 muestra el estado de un vehículo o coche como una agregación de estados componentes: el Encendido, la Transmisión, el Acelerador y los Frenos (además de otros objetos que no se han mencionado). Todo estado componente tiene también subestados. El estado del vehículo incluye un subestado de cada componente. Cada uno de ellos experimenta transiciones en paralelo con todos los demás. Los diagramas de estados de los componentes son casi, pero no del todo, independientes. El vehículo no arranca a no ser que la transmisión esté en punto muerto. Esto lo muestra la expresión de protección Transmisión en Punto muerto que se encuentra en la transición desde Encendido-Cortado hasta Encendido-Arrancando.

 

 
 
 
 
Figura 5 Un agregado y sus diagramas de estados concurrentes.

Concurrencia dentro de un objeto.

        La concurrencia dentro del estado de un objeto surge cuando se puede descomponer en subconjuntos de atributos o de enlaces, cada uno de los cuales posee su propio subdiagrama. La concurrencia dentro de un estado compuesto se muestra partiéndolo en subdiagramas mediante líneas discontinuas. El nombre del estado compuesto global se puede escribir en otra parte del cuadro, separado de los subdiagramas concurrentes mediante una línea continua. La Figura 6 muestra el diagrama de estados para jugar una mano de bridge. Cuando una pareja gana un juego, se vuelve "vulnerable"; la primera pareja que gane dos juegos gana la mano. Cuando se entre en el estado compuesto Jugando una mano, los dos subdiagramas se encuentran, inicialmente. en sus respectivos estados por omisión: No vulnerable. Cada subdiagrama puede avanzar independientemente hasta el estado Vulnerable cuando sus jugadores ganan un juego. Cuando una de las partes gana un segundo juego, se produce una transición al correspondiente estado Gana la mano. Esta transición hace que concluyan los dos subdiagramas concurrentes, porque forman parte de un mismo estado compuesto Jugando una mano y solamente están activados cuando el diagrama de estados de más alto nivel se encuentra en ese estado.

 

 

 
Figura 6 Un juego de bridge con estados concurrentes.

 

Conceptos avanzados de modelado dinámico.

 

Acciones de entrada y de salida

        Como alternativa para mostrar acciones en las transiciones, éstas se pueden asociar a la entrada o salida en un estado. No hay diferencia de poder expresivo entre las dos notaciones, pero es frecuente que todas las transiciones que lleguen a un estado efectúen la misma acción, en cuyo caso resulta más conciso asociar acción al estado.

        Por Ejemplo. la Figura 7 muestra el contorno de un abridor de puertas de garaje. El usuario genera sucesos del tipo pulsar con un botón, para abrir y cerrar la puerta. Cada suceso invierte la dirección de la puerta, pero por seguridad la puerta debe estar completamente abierta antes de que sea posible cerrarla. El control genera acciones motor arriba y motor abajo. El motor genera los eventos puerta abierta y puerta cerrada cuando ha concluido su actividad. Ambas transiciones, cuando se pasa al estado Abriéndose, hacen que se abra la puerta.

 
 
 
Figura 7 Acciones en las transiciones

        La Figura 8 muestra el mismo modelo utilizando acciones en las entradas de los estados. Estas se exponen dentro del cuadro de estado, después de la palabra reservada entrada y de una carácter "/". Siempre que se entra en ese estado, por cualquier transición, se lleva a cabo la acción de entrada que es equivalente a asociar este evento a todas las transiciones entrantes. Si una transición de entrada ya tiene una acción, ésta se lleva a cabo en primer lugar.

            Las acciones de salida son menos comunes que las de entrada, pero en algunas ocasiones resultan útiles. Éstas se muestran dentro del cuadro de estado, después de la palabra reservada salida y del carácter "/". Siempre que se sale del estado, mediante cualquier transición, se efectúa primero la acción de salida.

 
 

 

Figura 8 Acciones de entrada en los distintos estados
 
 

        Si se especifican múltiples operaciones en un estado, se efectúan en el orden siguiente: acciones de la transición entrante, eventos de entrada, actividades hacer, acciones de salida y acciones de la transición saliente.

Las actividades hacer pueden ser interrumpidas por sucesos que den lugar a transiciones que salgan del estado, pero las acciones de entrada y salida se completan siempre, puesto que se consideran instantáneas. Si se interrumpe una actividad hacer, entonces la acción de salida sigue ejecutándose.

Las acciones de entrada y de salida son especialmente útiles en diagramas de estados anidados, porque permiten que un estado (y posiblemente todo un subdiagrama) sea expresado en términos de acciones acopladas entrada-salida, sin tener en cuenta lo que suceda antes o después de que ese estado esté activado. Dentro de un diagrama es posible utilizar acciones asociadas a transiciones, así como acciones de entrada y salida.

Las transiciones que entran o salen de un subestado en un diagrama anidado pueden dar lugar a la ejecución de varias acciones de entrada o de salida, si la transición se extiende a varios niveles de generalización. Las acciones de entrada se van ejecutando desde fuera hacia dentro, y las de salida se ejecutan desde dentro hacia fuera. Esto permite un comportamiento similar al de llamadas anidadas a subrutinas.

 

Acciones internas.

        Un suceso puede dar lugar a que se lleve a cabo una acción sin producir un cambio de estado. El nombre del suceso se escribe dentro del cuadro de estado, y va seguido por una "/" y el nombre de la acción. (entrada, salida y hacer son palabras reservadas dentro del cuadro de estado). Cuando se produce uno de estos sucesos, su acción se ejecuta, pero no se realizan las acciones de entrada o salida para el estado. Por tanto, existe una diferencia entre una acción interna y una autotransición, la cual da lugar a que se ejecuten las acciones de entrada y salida para el estado. La Figura 1 muestra una acción interna dentro del estado Recogiendo dinero.La Figura 9 resume la notación adicional para acciones de entrada, de salida e internas.

 

 

 
Figura 9 Resumen de la notación extendida para diagramas de estados

 

Transición automática.

        Con frecuencia, el único propósito de un estado es llevar a cabo una actividad secuencial. Cuando finaliza esa actividad, se dispara una transición a otro estado. Una flecha sin nombre de suceso indica una transición automática que se dispara cuando ha concluido la actividad asociada con el estado original. Si no hay actividad la transición sin rótulo se dispara en cuanto se entra en el estado (ya que las acciones de entrada y de salida siempre se ejecutan). La Figura 1 muestra cuatro transiciones sin rótulo que salen del estado que contiene la actividad "comprobar ítem y calcular cambio". Todas las transiciones tienen una condición de protección. Cuando ha terminado la actividad, se dispara la transición que tenga una condición de protección válida.

        Si un estado tiene una o más transiciones automáticas, pero no se satisface ninguna de las condiciones de protección, entonces sigue activo hasta que se satisfaga una de las condiciones, o bien hasta que haya un suceso que de lugar a que se dispare otra. El cambio de valor de una condición es un suceso implícito (al que en hardware digital se alude con el nombre de "activación por borde"). Por ejemplo, "la temperatura está por debajo de cero" es una condición. "La temperatura baja por debajo de cero" es el suceso activado por borde que está asociado a la condición.

 
Enlaces.

Roger S. Pressman Web Site

Cetus: El Repositorio de Información sobre Orientación a Objetos

Object Management Group

Página del Taller de Sistemas de Programas (CI3791)

Documentación sobre UML (Local)

Documentación sobre UML (Rational)

 

 Bibliografía.