Diagramas de Estado Tópicos Abordados • Diagramas de Estado – – – – Introdução Conceitos Estados Aninhados Estados Concorrentes e Sincronização Introdução • Diagramas de Estado de David Harel (statecharts) – avanço às máquinas de estado tradicionais planas – Proporcionam uma definição formal explícita de comportamento, permitindo uma verificação dos eventos e transições de estados aos quais um sistema está sujeito. Diagramas de Estado • Mostra os estados que os objetos de uma classe podem assumir • Mostra as transições permitidas entre pares de estados • Ideal para objetos que possuem poucos estados Diagramas de Estado • Estado em objeto a ordem na qual as operações são executadas é importante (idéia de objetos como máquinas independentes). • Quando a ordem das operações no tempo é importante, pode-se formalizar o comportamento de um objeto em termos de uma máquina de estado finito equivalente. Diagramas de Estado • Desvantagem é necessário definir todos os possíveis estados de um sistema, o que pode levar a uma “explosão” no número de estado para sistemas complexos. • Na UML contorna-se o problema empregando -se um diagrama de estado individualizado, para cada classe. Exemplo Classe Pedido Ciclo de vida para um objeto pedido: é gerado, e pode passar por uma série de estados: em análise, pendente, alterado, aprovado, atendido (e daí gera-se faturas), rejeitado ou cancelado (deixando de existir) Operações subjacentes: • registrar pedido • alterar pedido Exemplo Classe Pedido - operações subjacentes: a) Registrar pedido h) Colocar pedido em pendência b) alterar pedido i) Tirar pedido de pendência c) Cancelar pedido j) Colocar pedido para atendimento d) colocar pedido em análise k) Atender pedido e) Analisa pedido f) Colocar pedido para aprovação g) Aprovar pedido Diagrama de Estado para a classe Pedido Alteração de pedido solicitada Pedido enviado Registrando pedido Alterando pedido Pedido para análise requisitado Analisando pedido Pedido não pode ser atendido no momento Colocando pedido em pendência Pedido para aprovação Cancelamento de pedido solicitado Cancelando pedido Pedido será cancelado Pedido cancelado Aprovando pedido Pedido será atendido Pedido já pode ser atendido Pedido atendido Atendendo pedido Estados Aninhados • Alguns diagramas requerem estados internos a outros estados • Exemplo: Máquina de uma fábrica Classe Máquina atributo statusDeOperação // estado de operação atual atributo statusDeManutenção // estado de manutenção Notações do diagrama de estado UML Notação definidas por Harel (Statecharts) Nome-do-estado Entrar: ação de entrada fazer: atividade-A no evento 1: ação-1 ... Sair: saída-da-ação Estado inicial Estado final Assinatura-de-evento[condição de guarda]/ expressão-de-ação ^ cláusula-de-envio Estados aninhados Subestado 1 Subestado 2 Subestado 3 superestado Indicador de história Interrompe A B A1 Retorna H A2 Obs: O indicador de história pode ser H*, que indica história recursiva. Subestado concorrente Itens selecionados selecionando itens de carga montando carga Romaneio emitido Emitindo romaneio Preparando despacho de mercadoria Carga montada Subestado seqüêncial Fechamento de negócio Crédito OK Analisando itens Analisando crédito de compra do associado Itens analisados Negócio fechado Negociando condição de compra Transição complexa A1 B1 A4 B2 Exemplo -Diagrama de Estado para o objeto MáquinaAgrícola Exemplo - Diagrama de Estado para o objeto Máquina Exemplo -Diagrama de Estado Aninhado Exemplo - Símbolo de História (Máquina de lavar) Exemplo - Estados Concorrentes e Sincronização Exemplo - Diagrama de estados para objeto OfertaCurso Inicialização Do/ Inicialize dados oferta de curso Adicinar estudante/faça cont =0 ^TarefaCurso.create Aberta Entrada/ Registrar estudante saída/ ^TarefaCurso.Adicione_ Estudante(estudante) Fechada Do/ Finalize curso cancelar cancelar Cancelado TarefaCurso.remove Adicionar estudante[cont < 10] Considerações finais • Os diagramas de estado são usados para modelar o comportamento interno de um objeto, mostrando os seus estados. • São usados apenas para modelar o comportamento de classes com comportamento dinâmico “significativo” • Os diagramas de interação podem ser estudados para determinar os objetos dinâmicos do sistema (aqueles que recebem e enviam muitas mensagens)