Diagramas de Máquinas de Estado - UML y Patrones 3ra Ed en español Diseño de Sistemas Versión: 1.01 [16/07/05] Cátedra de Diseño de Sistemas Autor: Milton Buzey - Enrique Porta Capítulo 29. Diagramas de Máquinas de Estado UML Aplicando UML y patrones: Una Introducción al Análisis y Diseño Orientado a Objetos y el Desarrollo Iterativo, Tercera Edición Por Craig Larman Objetivos Introducir la notación UML de los diagramas de máquinas de estado, con ejemplos, y varias aplicaciones de modelado. Introducción Cómo con los diagramas de actividad, los diagramas de estado UML muestran una vista dinámica. UML incluye notación que ilustra los eventos y estados de objetos, casos de uso, personas, etcétera. Son mostradas las más importantes características de la notación, pero hay muchos elementos poco frecuentes que no se tratan en esta introducción. 29.1. Ejemplo Un diagrama de máquina de estado UML, como el mostrado en la Figura 29.1, ilustra los eventos y estados de un objeto, y el comportamiento de un objeto al reaccionar a un evento. Las transiciones son representadas con flechas, etiquetadas con sus eventos. Los estados se representan con rectángulos con esquinas redondeadas. Es común incluir un seudo estado inicial, el cuál tendrá una transición automática a otro estado cuando se crea la instancia. Figure 29.1. Diagrama de máquina de estado de un teléfono. 1/7 Diagramas de Máquinas de Estado - UML y Patrones 3ra Ed en español Diseño de Sistemas Versión: 1.01 [16/07/05] Cátedra de Diseño de Sistemas Autor: Milton Buzey - Enrique Porta Un diagrama de máquina de estado muestra el ciclo de vida de un objeto: que evento experimenta, sus transiciones, y los estados en los que se encuentra entre estos eventos. No es necesario ilustrar todos los posibles eventos; si surge un evento que no esta representado en el diagrama, el evento es ignorado en lo que al diagrama de máquina de estado se refiere. Por tanto, podemos crear un diagrama de máquina de estado que describa el ciclo de vida de un objeto con niveles de detalles arbitrariamente simples o complejos, dependiendo de nuestras necesidades. 29.2. Definiciones: Eventos, Estados, y Transiciones Un evento es una ocurrencia significativa o relevante . Por ejemplo: Un receptor de teléfono se descuelga. Un estado es la condición de un objeto en un instante del tiempo, el tiempo entre eventos. Por ejemplo: Un teléfono está en el estado "inactivo o en espera" después de colgarlo y antes de descolgarlo. Una transición es una relación entre dos estados que indica que cuando un evento ocurre, el objeto pasa del estado previo al estado siguiente. Por ejemplo: Cuando el evento "descolgar" ocurre, hay una transición del teléfono del estado “inactivo” a “activo”. 29.3. ¿Cómo aplicar diagramas de máquina de estado? Objetos dependientes o independientes del estado Si un objeto siempre responde de la misma forma ante un evento, entonces se considera independiente del estado con respecto a ese evento. Por ejemplo, si un objeto recibe un mensaje, y el método de respuesta siempre hace la misma cosa. El objeto es independiente del estado con respecto a ese mensaje. Si, para todos los eventos de interés, un objeto siempre reacciona de la misma forma, es un objeto independiente del estado. En contraste, un objeto dependiente del estado reacciona diferente a los eventos dependiendo de su estado. Pautas Cree una máquina de estado para los objetos dependientes del estado con comportamiento complejo, no para objetos independientes del estado. Por ejemplo, un teléfono es muy dependiente del estado. La reacción del teléfono al apretar un botón en particular (generando un evento) depende del estado actual del teléfono, de si está descolgado, de si hay tono, de la configuración, etcétera. Es para esta clase de problemas complejos dependiente del estado que los diagramas de máquinas de estado le pueden agregar valor para entender o documentar algunas cosas. 2/7 Diagramas de Máquinas de Estado - UML y Patrones 3ra Ed en español Diseño de Sistemas Versión: 1.01 [16/07/05] Cátedra de Diseño de Sistemas Autor: Milton Buzey - Enrique Porta Pautas En general, los sistemas de información de gestión tienen pocas clases complejas y dependientes del estado. No es frecuente aplicar máquina de estado. En cambio los dominios de control de procesos, control de dispositivos, manipuladores de protocolo, y dominios de telecomunicaciones a menudo tiene muchos objetos dependientes del estado. Si usted trabaja sobre estos dominios, definitivamente debe conocer y crear modelos de máquinas de estado. Modelando objetos dependientes del estado En términos generales, las máquinas de estados son aplicadas de dos formas: 1. Para modelar el comportamiento reactivo de un objeto complejo en respuesta a un evento. 2. Para modelar secuencias lícitas de protocolo de operación o especificaciones de lenguajes. o Este acercamiento puede ser considerado una especialización del punto 1, si el objeto es un lenguaje, protocolo, o proceso. Una gramática formal para un lenguaje libre de contexto es una clase de máquina de estado. La siguiente es una lista de objetos comunes los cuales a menudo son dependientes del estado, y para los cuales puede ser útil crear una máquina de estado: Objetos complejos reactivos Dispositivos físicos controlados por software o Objeto de transacciones y relacionado con negocios o Teléfono, auto, horno microondas: Estos tiene reacciones complejas y abundantes ante eventos, la forma en que reaccione depende de su estado actual. ¿Cómo hacer que un objeto de negocio (una venta, orden, pago) reaccione a un evento? Por ejemplo, ¿qué le pasaría a una orden si ocurre un evento de cancelación? Y entendiendo todos los eventos y estados que un paquete puede ir atravesando en el negocio de correo marítimo puede ayudar con el diseño, validación, y perfeccionamiento de procesos. Mutadores de rol: Estos son objetos que cambian su rol. o Una persona cambia el rol de ser un civil a ser un excombatiente. Cada rol es representado por un estado. Protocolos y Secuencias lícitas Protocolos de comunicación o TCP, y nuevos protocolos, pueden ser fáciles y claramente entendidos con un diagrama de máquina de estado. El diagrama ilustra cuando las operaciones 3/7 Diagramas de Máquinas de Estado - UML y Patrones 3ra Ed en español Diseño de Sistemas Versión: 1.01 [16/07/05] Cátedra de Diseño de Sistemas Autor: Milton Buzey - Enrique Porta son lícitas. Por ejemplo, una solicitud de “cierre” de TCP sería ignorado si el manipulador del protocolo ya está en el estado “cerrado”. Navegación de interfaz de usuario (UI) Web o Windows: Cuando se hace un modelo UI, puede ser útil para entender la secuencia correcta entre paginas web o windows; esto es a menudo complejo. Una máquina de estado es una gran herramienta para modelar la navegación de UI. Controladores de Flujo de UI o Sesiones: Esto está relacionado a modelar la navegación de UI, pero específicamente enfocado sobre objetos del lado del servidor que controlan el flujo de páginas. Estos son usualmente objetos del lado del servidor que representan una sesión de salida o conversación con cliente. Por ejemplo, una aplicación Web que recuerda el estado de la sesión con el cliente Web y controlar las transiciones a una nueva página Web, o la modificación de lo que muestra la actual página Web, basándose en el estado de la sesión y la próxima operación que se reciba. Operaciones del Sistema en Casos de Uso. o ¿Hacer re llamada de las operaciones del sistema para Procesar Venta: hacerNuevaVenta, introducirItem, etcétera? Estos arribarían en un orden determinado; por ejemplo, finalizarVenta solo arribaría luego de una o más operaciones introducirItem. Usualmente, el orden es obvio, pero si fuera complejo, una máquina de estado puede modelarlo, permitiendo al caso de uso ser un objeto en si mismo. Manejo de eventos en UI o Entendiendo los eventos y las secuencias válidas para una ventana o formulario. Por ejemplo la acción editar-pegar solo es válida si hay algo en el portapapeles para pegar. Más notación UML de Diagrama de Máquina de Estado Acciones y condiciones de guarda de la transición Una transición podría provocar que se dispare una acción. En una implementación de software, esto podría representar la invocación de un método de la clase del diagrama de máquina de estado. Una transición podría tener también una condición de guarda (o condición booleana). La transición solo ocurre si se cumple la condición. Ver la Figura 29.2. 4/7 Diagramas de Máquinas de Estado - UML y Patrones 3ra Ed en español Diseño de Sistemas Versión: 1.01 [16/07/05] Cátedra de Diseño de Sistemas Autor: Milton Buzey - Enrique Porta Figure 29.2. Notación para una acción y condición de guarda de una transición. Estados anidados Un estado permite el anidamiento para contener sub-estados; un sub-estado hereda la transición de su superestado (el estado que lo incluye). Ver la Figura 29.3. Esta fue una contribución clave de la notación de los diagramas de estados Harel en la que se basa UML, lo que nos lleva a diagramas de máquinas de estados concisos. Los sub-estados se podrían mostrar gráficamente anidándonos en una caja que representa el supertestado. Figure 29.3. Estados anidados. Por ejemplo, cuando ocurre una transición al estado Activo, ocurre la creación y transición al sub-estado ObtenerTonoDeMarcado. No importa en que sub-estado está el objeto, si ocurre el evento colgar relacionado al superestado Activo, ocurre una transición al estado Inactivo. 29.5. Ejemplo: Modelando La Navegación de UI (Interfaz de Usuario) con Maquinas de Estado Algunas aplicaciones de UI, especialmente aplicaciones Web de UI, tienen flujo de página complejos. Las máquinas de estado son una gran forma de documentar esto, para entenderlo, y una gran forma para modelar flujo de página, durante el diseño. 5/7 Diagramas de Máquinas de Estado - UML y Patrones 3ra Ed en español Diseño de Sistemas Versión: 1.01 [16/07/05] Cátedra de Diseño de Sistemas Autor: Milton Buzey - Enrique Porta Una técnica común en modelado ágil UI y prototipación UI es modelar una UI con grandes hojas de papel en una pared. Cada hoja representa una página web. Notas adhesivas sobre las hojas para representar elementos; quizás amarillas si es información y rosa si es un control, tales como un botón. Cada hoja es etiquetada, por ejemplo, "Página de ayuda," "Página de Productos," etcétera. Resumiendo, modelar el contenido de la página con el método "baja tecnología, alto detalle", esto es útil para modelar el flujo entre estas páginas. Además, sobre una pizarra adyacente a la pared de las páginas web, bosquejar un diagrama de Máquina de Estado. Los estados representan las páginas y los eventos representan los eventos que causan transferencia desde una página a otra, tales como hacer clic en un botón. Ver la Figura 29.4 para ver un ejemplo de este modelo de navegación UI. Por supuesto que este modelo es pequeño y no hace justicia con la real utilidad de la práctica; su valor se hace evidente cuando es grande y tiene estructura de páginas complejas. Figura 29.4. Aplicando máquina de estado al modelo de navegación de páginas Web. 29.6. Ejemplo: Diagrama de Máquina de Estado del caso de uso NextGen No hay objetos reactivos complejos realmente interesantes el caso de estudio, así que ilustraré un diagrama de máquina de estado para mostrar la secuencia correcta de operación del caso de uso. Ver la Figura 29.5 para su aplicación al caso de uso Procesar Venta. 6/7 Diagramas de Máquinas de Estado - UML y Patrones 3ra Ed en español Diseño de Sistemas Versión: 1.01 [16/07/05] Cátedra de Diseño de Sistemas Autor: Milton Buzey - Enrique Porta Figura 29.5. Un ejemplo de máquina de estado para la secuencia correcta del caso de uso. 29.7. Proceso: Diagrama de máquina de estado en el UP No existe en el UP ningún modelo que se llame "modelo de estado". Mas bien, cualquier elemento de cualquier modelo (Modelo de diseño, Modelo de Dominio, Modelo de Objeto de Negocios, y mas) podría tener una máquina de estado para entenderlo mejor o para comunicar su comportamiento dinámico como respuesta a los eventos. Por ejemplo, una máquina de estado asociada a la clase de diseño Venta del Modelo de Diseño, también forma parte del Modelo de Diseño. 29.8. Recursos recomendados La aplicación del modelo de estados al A/DOO está bien abarcada en Designing Object Systems por Cook y Daniels. Real Time UML por Douglass también provee una excelente discusión para modelar estados; el contenido enfatiza sistemas de tiempo real, pero es ampliamente aplicable. 7/7