Unified Modeling Language Diagramas de Estados José Correia, Maio 2006 (http://paginas.ispgaya.pt/~jcorreia/) Questões O que são diagramas de estados e em que situações se utilizam? Qual a diferença entre os diagramas de estados e os diagramas de sequência e de colaboração? O que é um estado? Como se representa? O que é um evento? Como se representa? O que é uma transição? Como se representa? O que é uma acção? Como se representa? O que é uma condição? Como se representa? O que é uma actividade? Como se representa? O que são sub-estados sequenciais? E sub-estados concorrentes? etc. José Correia UML - Diagramas de Estados 2 Introdução Os objectos têm estado e comportamentos (como já é sabido...) Os diagramas de estados permitem modelar a dinâmica de sistemas, ou objectos, cujo estado evolui por saltos (transições instantâneas), com um número finito de estados • é o caso dos objectos computacionais ... estado (de sistema ou objecto) transição tempo José Correia UML - Diagramas de Estados 3 Exemplo: Login num sistema de Banca on-line José Correia UML - Diagramas de Estados 4 Notas sobre o exemplo anterior Login num sistema de Banca on-line • a ligação (registo no sistema) consiste na introdução de um número válido da Segurança Social (SSN - social security number) e do número de identificação pessoal (PIN - personal id number), seguida da submissão dos dados para validação • a ligação pode ser dividida em 4 estados não-sobrepostos - ‘Getting SSN’, ‘Getting PIN’, ‘Validating’ e ‘Rejecting’ • a partir de cada estado resulta um conjunto completo de transições que determinam o estado seguinte • enquanto está no estado ‘Validating’, o objecto não espera por um evento exterior para disparar uma transição. Em vez disso, executa uma actividade - o resultado dessa actividade determina o estado seguinte José Correia UML - Diagramas de Estados 5 Notação Os Estados são representados por rectângulos de cantos arredondados contendo o nome do estado • ‘Getting SSN’, ‘Getting PIN’, ‘Validating’ e ‘Rejecting’ As Transições são representadas por setas de um estado para outro • o diagrama anterior tem duas auto-transições (self-transition), uma em ‘Getting SSN’ e outra em ‘Getting PIN’ Os Eventos e Condições, que disparam as transições, são escritos ao lado das setas (ex: Press Key [key != tab] ) A Acção que ocorre como resultado de um evento ou condição, é expressa na forma /acção (ex: /Display key) O estado inicial (círculo preto) é um estado fictício (dummy state) para iniciar a acção Os estados finais também são dummy states que terminam a acção José Correia UML - Diagramas de Estados 6 Definição Os diagramas de estados são um dos vários tipos de diagramas disponíveis em UML para modelar os aspectos dinâmicos de um sistema • os diagramas de interacção (sequência ou colaboração) focam o fluxo de controlo de objecto para objecto (numa interacção) • os diagramas de estados focam o fluxo (passagem) de controlo de estado para estado (num mesmo objecto ou sistema) - captura o comportamento dinâmico (event-oriented) Um diagrama de estados … … é um grafo cujos nós representam os estados possíveis dos objectos ... e cujos arcos dirigidos representam as transições de estado ... provocadas por eventos e/ou condições José Correia UML - Diagramas de Estados 7 Diagrama de Transição de Estados Um diagrama de estados • especifica uma máquina de estados, com estados (duráveis) e transições entre estados (instantâneas) causadas por eventos (instantâneos) - a cada transição de estado corresponde um único evento - se ocorrer um evento a que não corresponda uma transição de estado, esse evento é ignorado • descreve o comportamento de uma única classe de objectos - objectos da mesma classe têm o mesmo ciclo de vida, pelo que basta construir um diagrama de estados por classe de objectos relevante - é criado para objectos que tenham um comportamento dinâmico significativo José Correia UML - Diagramas de Estados 8 Diagrama de Transição de Estados Objectivo • modelizar o ciclo de vida de uma classe • modelizar objectos reactivos (user interfaces, devices, etc) José Correia UML - Diagramas de Estados 9 ciclo de vida de objectos ou sistemas Um diagrama de estados permite modelar o comportamento interno de um objecto, subsistema ou sistema global, isto é, as sequências de estados por que pode passar durante o seu ciclo de vida em resposta a uma sequência de eventos, ou seja: • os estados possíveis - exemplo do estado civil: solteiro, casado, ... • as transições entre estados - exemplo: pode passar de solteiro para casado, mas não o contrário • os eventos que causam essas transições - exemplo: o casamento implica a passagem ao estado de casado • as operações que são executadas, dentro de um estado (actividades) ou durante uma transição (acções), em resposta a esses eventos José Correia UML - Diagramas de Estados 10 Estados Um estado é uma condição ou situação na vida de um objecto, durante a qual o objecto satisfaz alguma condição, realiza alguma actividade ou espera por algum evento Escolha dos estados e relação com atributos e ligações • o estado de um objecto é dado pelos valores de atributos e ligações com outros objectos que mantém num dado momento • interessa apenas distinguir estados que apresentam diferentes respostas a eventos - os atributos e ligações (possivelmente expressos por condições) que não afectam o comportamento de um objecto devem ser ignorados - todas as combinações de valores de atributos e ligações que originam a mesma resposta a eventos devem ser agrupados num único estado • só os objectos é que têm estado; as ligações não José Correia UML - Diagramas de Estados 11 Eventos No contexto de uma máquina de estados, um evento é uma ocorrência de um estímulo que pode disparar uma transição entre estados Os eventos são instantâneos • ou melhor, têm uma duração desprezável - em função da escala temporal que estamos a adoptar Um Evento… … é algo que acontece num dado instante no tempo … pode ter parâmetros - exemplo: dígito-marcado(1) … pode ser interno ou externo - ver explicação mais à frente... José Correia UML - Diagramas de Estados 12 Transições Uma transição é uma relação entre dois estados indicando que um objecto no 1º estado realizará uma certa acção (opcional) e passará ao 2º estado quando um evento especificado ocorrer se uma condição especificada (opcional) for satisfeita • notação: arco dirigido etiquetado com evento[condição]/acção Duas transições a sair do mesmo estado devem ter eventos diferentes, ou condições mutuamente exclusivas, para que o diagrama de estados seja determinístico • no exemplo do banco on-line, ver transições a sair do estado ‘Validating’ Uma transição sem evento tem como evento implícito o fim da actividade associada ao primeiro estado • se tiver uma condição, fica à espera que a condição seja satisfeita José Correia UML - Diagramas de Estados 13 Exemplo: Jogo de Xadrez Transição Estado Vez das brancas jogada das brancas perante xeque-mate Vitória das pretas paralisado jogada das pretas Empate paralisado Vez das pretas perante xeque-mate Vitória das brancas Estado inicial (criação do objecto e início da máquina de estados) José Correia Estado final (fim da máquina de estados e destruição do objecto) UML - Diagramas de Estados 14 Estados, Eventos e Transições Um estado especifica a resposta de um objecto a eventos recebidos • o estado de um objecto depende da sequência de eventos que foram recebidos até então A resposta de um objecto a eventos origina uma transição de estado • e pode incluir o desenrolar de uma determinada acção A cada transição de estado corresponde um único evento O intervalo de tempo entre dois eventos corresponde a um estado em que o objecto se encontra Os eventos representam pontos no tempo (separam estados) Os estados representam intervalos de tempo (que separam os eventos) José Correia UML - Diagramas de Estados 15 Condições Uma condição é função booleana dos valores dos objectos, válida num determinado intervalo de tempo • condições não são eventos! - os eventos não têm duração temporal O estado de um objecto pode ser definido através de uma condição As condições podem ser usadas como “guardas” nas transições (condições de guarda) de estado • uma transição “guardada” dispara quando o evento correspondente ocorre e a condição booleana é verdadeira • no exemplo da Banca on-line, ver as transições que dependem das condições [valid] e [not valid] a partir do estado ‘Validating’ José Correia UML - Diagramas de Estados 16 Tipos de Eventos Os eventos podem ser internos (passados entre objectos internos ao sistema) ou externos (passados entre o sistema e os actores) • evento interno - exemplo: excepção de overflow • eventos externos - exemplos: botão pressionado, interrupt causado por um sensor Os eventos podem ser de vários tipos: • eventos de mudança (uma condição tornar-se verdadeira) • eventos temporais (passagem de tempo ou ocorrência de uma datahora) • chamadas (invocação de operações) • sinais (eventos sinalizados explicitamente com um nome) José Correia Tipos de Eventos: UML - Diagramas de Estados 17 Eventos Temporais Evento de tempo relativo • representa a passagem de um certo tempo desde um certo instante • notação: after(período-de-tempo) • por omissão, o tempo conta desde a entrada no estado de origem da transição a que está associado o evento • também se usa a palavra chave timeout quando não se quer precisar o período de tempo. • exemplo: after(5 segundos) Evento de tempo absoluto • representa a chegada a um certo instante de tempo (data e/ou hora) • notação: when(instante-de-tempo) • exemplo: when(11:59PM) José Correia UML - Diagramas de Estados 18 Tipos de Eventos: Eventos de Mudança Um evento de mudança (change event) é um evento que representa o facto de uma condição se tornar verdadeira Notação: when(expressão booleana) A expressão boolena pode ser usada para marcar um tempo absoluto (ver atrás) ou para o teste contínuo de uma expressão Exemplo: when(altitude < 1000) José Correia UML - Diagramas de Estados 19 Exemplo: Semáforos N N O E Norte/Sul pode seguir em frente S timeout [ há carros na pista esquerda N/S ] O Norte/Sul pode virar à esquerda E S timeout [ sem carros na pista esquerda N/S ] timeout timeout timeout [ sem carros na pista esquerda E/O ] Este/Oeste pode virar à esquerda N O E S José Correia timeout [ há carros na pista esquerda E/O ] Este/Oeste pode seguir em frente timeout - passagem de um certo tempo desde a entrada no estado origem da transição UML - Diagramas de Estados N O E S 20 Tipos de Eventos: Chamadas Uma chamada representa a invocação de uma operação • para quem faz a chamada (ponto de vista do actuador), trata-se de uma acção • para quem testa se a operação foi chamada (ponto de vista do observador), trata-se de um evento • a diferença entre evento e acção é feita pelo contexto Uma chamada é, geralmente, síncrona • quando uma operação de um objecto invoca uma operação noutro objecto, o controlo passa para o 2º objecto Nome do evento tem a sintaxe da invocação da operação • exemplo: insert(record) José Correia Tipos de Eventos: UML - Diagramas de Estados 21 Sinais Um sinal é a ocorrência de um estímulo (evento) assíncrono comunicado entre objectos Um sinal representa um objecto com nome que é lançado (thrown) assincronamente por um objecto e é recebido (caught) por outro • modelizado por classe com estereótipo «signal» • parâmetros do sinal são atributos da classe • dependência com estereótipo «send» entre operação que lança um sinal e a classe que representa o sinal Uma excepção é um sinal • excepções são suportadas pela maioria das linguagens de programação actuais (ex.: Java, C++) • são o tipo mais frequente de sinais internos que precisamos de modelar Lançamento de sinal representado por acção send ou throw José Correia UML - Diagramas de Estados 22 Actividades Uma actividade é uma operação, associada a um estado, que se desenvolve durante um certo intervalo de tempo • as actividades são elementos básicos dos diagramas de actividades - que iremos ver a seguir... Uma actividade ... … inicia-se ao entrar no estado (quando é feita a transição) … tem duração … termina por si só, ou pode ser interrompida (por eventos) Notação: do/actividade Exemplos: • no banco on-line: do/validate SSN and PIN • num telefone: do/dá_sinal_de_marcar José Correia UML - Diagramas de Estados 23 Exemplo: Telefone (fazer chamadas) no descanso no descanso Inactivo levantado Sinal de marcar tempo máximo Tempo máximo do/toca sinal dígito(n) dígito(n) do/ toca apito tempo máximo Discando Sinal de ocupado do/sinal ocupado lento Sinal de interrompido do/ sinal ocupado rápido número ocupado número válido Mensagem gravada número inválido do/ passa mensagem Ligando do/ busca ligação ramal ocupado encaminhada Tocando do/ toca campainha mensagem dada resposta/ liga linha no descanso/ desliga linha Ligado chamado desliga/desliga linha Desligado José Correia UML - Diagramas de Estados 24 Acções Uma acção • ocorre em resposta a um evento - as acções estão associadas a eventos • é (representa) uma operação instantânea - intervalo de tempo insignificante face à granularidade de tempo representada no diagrama de estados - não tem duração (pelo menos no modelo) e não pode ser interrompida • resulta numa mudança de estado ou no retorno de um valor - a mudança de estado pode ser noutro objecto Notação: evento/acção Exemplos: • no banco on-line: Cancel/Quit • num telefone: poisa_auscultador/pára_sinal_de_marcar José Correia UML - Diagramas de Estados 25 Exemplo: Porta de Garagem com motor Diagrama com as acções associadas às transições Porta a Abrir comando accionado / ligar motor no sentido A Porta Fechada porta foi fechada / desligar o motor José Correia porta foi aberta / desligar o motor comando accionado / ligar motor no sentido A Porta a Fechar Porta Aberta comando accionado / ligar motor no sentido F UML - Diagramas de Estados 26 Acções à entrada e saída de estados As operações podem estar associadas a um estado ou a uma transição de estado Acção à entrada num estado: entry/acção • equivale a associar a acção a cada transição que entra no estado Acção à saída de um estado: exit/acção • equivale a associar a acção a cada transição que sai do estado Ordem das operações (Actividades e Acções) • acções na transição de chegada • acções na entrada ( entry/ ) • actividade ( do/ ) • acções na saída ( exit/ ) • acções na transição de saída José Correia UML - Diagramas de Estados 27 Exemplo: Porta de Garagem com motor Diagrama com acções de entrada e saída Porta a Abrir comando accionado entry/ ligar motor no sentido A porta foi aberta Porta Fechada entry/ desligar o motor porta foi fechada Porta Aberta comando accionado Porta a Fechar entry/ desligar o motor comando accionado entry/ ligar o motor no sentido F José Correia UML - Diagramas de Estados 28 Acções internas As acções podem representar operações de controlo internas (atribuição de valores aos atributos, criação de outros eventos) • exemplo: incrementar contador sempre que ocorre um dado evento Acção interna • ocorre em resposta a um evento interno a um estado • difere de uma auto-transição, porque não são executadas acções à saída e entrada e não é interrompida a actividade associada ao estado Notação: evento/acção Um evento pode causar uma acção sem disparar a transição de estado José Correia UML - Diagramas de Estados 29 Sequência de operações numa mudança de estado Estado 2 Estado 1 do/actividade 1 evento(atributos) [condição]/acção do/actividade 2 entry/acção 1A entry/acção 2A exit/acção 1C exit/acção 2C evento/acção 1B transição evento/acção 2B ocorre o evento associado à transição e a condição de guarda é verdadeira é interrompida a actividade associada ao estado de origem (actividade 1), se não tinha já terminado é executada a acção à saída (acção 1C) do estado de origem é executada a acção associada à transição de estados é executada a acção à entrada (acção 2A) no estado de destino é iniciada a actividade associada ao estado de destino (actividade 2) José Correia UML - Diagramas de Estados 30 Exemplo: Menu pop-up Acções de um menu pop-up cursor deslocado / realça item do menu botão direito em baixo / mostra menu pop-up Menu visível Inactivo botão direito em cima / apaga menu pop-up e lança acção associada ao item seleccionado José Correia UML - Diagramas de Estados 31 Sub-Estados Vários estados de um diagrama (e transições entre esses estados) podem ser agrupados num único estado composto Um sub-estado é um estado que se encontra definido dentro de outro (super)estado • a ideia subjacente ao conceito de sub-estado é a abstracção - uma máquina de estados pode ser descrita com diferentes níveis de abstracção e de detalhe conforme seja necessário ou relevante em cada momento Um estado que tenha um conjunto de sub-estados mais detalhados designa-se por estado composto • o estado composto pode ser visto simplesmente como um contorno Um estado composto pode conter quer sub-estados sequenciais (disjuntos), quer sub-estados concorrentes (ortogonais) José Correia UML - Diagramas de Estados 32 Sub-estados sequenciais Os estados e transições agrupados no estado composto formam um diagrama de estados encaixado, podendo ter estado inicial e final Também se chama a isto generalização de estados • o estado composto é também chamado um super-estado • estar num sub-estado é estar também no respectivo super-estado A generalização de estados é uma associação (composição) “ou” • estar no estado composto é estar no 1º sub-estado ou,…, ou no n-ésimo sub-estado • ou seja, não é possível estar em dois (sub)estados simultaneamente Os sub-estados herdam as transições e acções dos seus superestados José Correia UML - Diagramas de Estados 33 Exemplo: Transmissão automática Diagrama de estado do sistema de transmissão de movimento de um automóvel automático carrega R (reverse) Ponto morto Marcha atrás carrega N carrega F (forward) carrega N Frente subida subida Segunda Primeira Primeira paragem Terceira Segunda redução Terceira redução Estado composto José Correia UML - Diagramas de Estados 34 Sub-estados sequenciais: Transições com estados compostos Podem-se definir transições com origem no estado composto • equivale a repetir a mesma transição com origem em cada um dos subestados (excepto Q) - por outras palavras, os sub-estados herdam a transição • simplifica-se o diagrama porque se desenha 1 transição em vez de n transições (tantas quantos os sub-estados) • a transição pode ser dirigida a um sub-estado ou a um estado externo José Correia UML - Diagramas de Estados 35 Sub-estados sequenciais: Transições com estados compostos Podem-se definir transições com destino ao estado composto • equivale a definir a mesma transição com destino ao respectivo estado inicial (ou melhor, ao estado apontado por Q) - que tem de estar definido No entanto, também se podem definir transições que atravessam o estado composto, com origem ou destino em sub-estados • o estado inicial é apenas um estado inicial por omissão José Correia UML - Diagramas de Estados 36 Sub-estados sequenciais: Propriedades de estados compostos Um estado composto pode ter todas as propriedades dos estados simples... ... mas, normalmente, só tem o nome, que mesmo assim é opcional Um estado composto pode ter acções à entrada e à saída • ao entrar no estado composto, executa primeiro as acções à entrada no estado composto... ... e depois as acções à entrada no sub-estado de destino • ao sair do estado composto, executa primeiro as acções à saída do subestado de origem... ... e depois as acções à saída do estado composto José Correia UML - Diagramas de Estados 37 Sub-estados sequenciais: Propriedades de estados compostos A actividade do estado composto é detalhada pelos sub-estados e transições entre eles • isto é, pelo diagrama de estados encaixado Em alternativa, pode-se dar um nome à actividade do estado composto (com “do/...”)... ... e detalha-se essa actividade separadamente (com o mesmo diagrama de estados encaixado) • as acções à entrada e à saída são representadas no 1º diagrama • uma actividade pode ser detalhada por um diagrama de estados ou actividade José Correia UML - Diagramas de Estados 38 Sub-estados concorrentes Um estado (estado composto) pode ser detalhado através de vários sub-diagramas concorrentes Sub-diagramas correspondem a componentes (grupos de atributos e ligações ou sub-objectos) mais ou menos independentes do objecto dono do diagrama • o mesmo evento pode disparar transições em vários sub-diagramas Sub-diagramas também são mais precisamente chamados subestados concorrentes (têm nome, etc., como os estados) José Correia UML - Diagramas de Estados 39 Sub-estados concorrentes Dependências entre componentes podem ser expressas através de condições de guarda • um componente testar o estado doutro Os componentes são divididos por linhas a traço interrompido Também se chama a isto composição “e” • estar no estado composto é estar no 1º e ... e no nº sub-estado concorrente Notar que, a um nível mais global, os vários objectos (e portanto os respectivos diagramas de estados) são concorrentes entre si José Correia UML - Diagramas de Estados 40 Exemplo: Concorrência num objecto Preparação do despertador Selecção do programa comuta(banda) Selecção da Banda banda escolhida Subestados concorrentes de “Preparação do despertador” sintoniza(frequência) programa Selecção do escolhido Programa Alarme ligado Activação do alarme marca(hora) Sai quando terminarem os dois subdiagramas concorrentes hora escolhida Selecção da Hora Ao entrar, inicia os dois subdiagramas concorrentes José Correia UML - Diagramas de Estados 41 O mesmo exemplo sem sub-estados concorrentes Preparação do despertador sintoniza(frequência) banda comuta(banda) escolhida Selecção da Hora hora escolhida marca(hora) hora escolhida hora escolhida sintoniza(frequência) comuta(banda) Selecção da Banda José Correia programa escolhido marca(hora) Selecção da Banda e Hora marca(hora) Selecção do Programa e Hora banda escolhida Selecção do Programa UML - Diagramas de Estados programa escolhido 42 Sincronização: separação e fusão Separação (ou bifurcação) - Quando um objecto passa a fazer várias actividades concorrentemente (ordem irrelevante) • transição para estado com sub-diagramas concorrentes activa cada um deles Fusão (ou junção) - Quando as actividades concorrentes têm que terminar antes de passar ao estado seguinte • sub-diagramas que não estejam na fusão são automaticamente terminados Exemplo: Actividades desenvolvidas por máquina ATM no fornecimento do dinheiro e cartão Emissão (Multibanco) Preparação pronto do/ liberta cartão do/ liberta dinheiro José Correia recolhe cartão Concluído recolhe dinheiro UML - Diagramas de Estados 43 Exemplo: Leilão O seguinte diagrama de estados modeliza um leilão (auction) com dois sub-estados concorrentes: • processamento da(s) oferta(s) (processing the bid – ‘Bidding’) • autorização do pagamento (authorizing the payment) A entrada no leilão implica a bifurcação (fork) em duas sequências separadas (threads) Cada sub-estado tem um estado de saída para marcar o fim da sequência A não ser no caso de uma saída anormal (Canceled or Rejected), a saída do estado composto ocorre quando ambos os sub-estados tiverem terminado José Correia UML - Diagramas de Estados 44 Exemplo: Leilão (cont.) José Correia UML - Diagramas de Estados 45 Sistemas reactivos Os diagramas de estados são particularmente úteis para modelar o comportamento de objectos ou sistemas reactivos • sistemas que funcionam por resposta (reacção) a estímulos (eventos) • sistemas de interacção com o utilizador (com formulários, botões, etc.) são tipicamente reactivos • sistemas reactivos geralmente têm memória - um estado interno que acumula o efeito dos estímulos recebidos no passado e afecta a resposta a estímulos futuros • Sistemas de tempo real (ex.: semáforo) podem ser vistos como sistemas reactivos que reagem a eventos temporais (timeout, ...) Objectos podem combinar comportamentos reactivos (resposta a eventos) com comportamentos invocáveis (operações) • o mesmo comportamento pode ser visto nas duas perspectivas José Correia UML - Diagramas de Estados 46 Diagramas de estados vs. Diagramas de interacção Um diagrama de estados mostra todos os comportamentos possíveis de um objecto • passagem de controlo entre estados Um diagrama de interacção (sequência ou colaboração) mostra um comportamento possível de um conjunto de objectos • passagem de controlo entre objectos Envio de uma mensagem é uma acção Recepção de mensagem é um evento Intervalo de tempo entre duas mensagens corresponde à permanência num estado José Correia UML - Diagramas de Estados 47 Relação com o modelo de objectos Um diagrama de estados descreve o comportamento de uma dada classe de objectos • um objecto pode passar por diferentes estados ao longo do tempo, mas preserva a sua identidade (não muda de classe) • diferenças inerentes ao objecto são modelizadas por classes diferentes • diferenças temporárias são modelizadas por estados Os estados são representados por valores específicos dos atributos e ligações de cada classe de objectos Os eventos são representados por operações no modelo de objectos José Correia UML - Diagramas de Estados 48 Referências Estes apontamentos foram baseados em: “UML – Unified Modeling Language”, Curso em Tecnologia de Objectos, FEUP, Novembro 2000 Ademar Aguiar, Gabriel David, João Pascoal Faria “Desenvolvimento OO – Construção do modelo dinâmico através da linguagem UML”, ISPGaya, Novembro 1998 César Toscano “Practical UML: A Hands-On Introduction for Developers”, TogetherSoft Corporation “UML, Metodologias e Ferramentas CASE”, Alberto Rodrigues da Silva, Carlos Videira, Maio 2001 José Correia UML - Diagramas de Estados 49