Escolar Documentos
Profissional Documentos
Cultura Documentos
Diagramas de
Máquina de Estados
cofre fechado
Abrir
....
....
transição
estado
estado final ........
FIGURA 10.1 Um diagrama simples de máquina de estados.
pre faz a transição, caso o evento ocorra. Uma assinatura-do-gatilho ausente é rara, mas
ocorre. Isso indica que a transição é feita imediatamente, o que você vê principalmente
com estados de atividade, que veremos daqui há pouco.
Quando ocorre um evento em um estado, você pode fazer apenas uma transição a
partir dele. Assim, se você usar múltiplas transições com o mesmo evento, como no caso
do estado Trancar da Figura 10.1, as sentinelas deverão ser mutuamente exclusivas. Se
ocorrer um evento e nenhuma transição for válida – por exemplo, um evento de cofre
fechado no estado Esperar ou um evento de vela removida com a porta fechada – , o
evento será ignorado.
O estado final indica que a máquina de estados está completa, implicando a exclu-
são do objeto controlador. Assim, se alguém for tão descuidado para cair em minha
armadilha, o objeto controlador terminará, de modo que precisarei colocar o coelho em
sua jaula, limpar o chão e reiniciar o sistema.
Lembre-se de que a máquina de estados pode mostrar apenas o que o objeto obser-
va ou ativa diretamente. Assim, embora você possa esperar que eu coloque ou retire
coisas do cofre quando ele estiver aberto, não coloco isso no diagrama de estados, pois o
controlador não poderá identificar.
Quando os desenvolvedores falam sobre objetos, eles freqüentemente se referem ao
estado dos objetos como o significado da combinação de todos os dados presentes nos
campos dos objetos. Entretanto, o estado em um diagrama de máquina de estados é uma
noção mais abstrata; basicamente, diferentes estados implicam maneiras diferentes de
reagir aos eventos.
ATIVIDADES INTERNAS
Os estados podem reagir a eventos sem transição, usando atividades internas: colocar o
evento, a sentinela e a atividade dentro da própria caixa de estado.
112 UML ESSENCIAL
Digitação
entrada/destacar tudo
saída/atualizar campo
caractere/tratar caractere
ajuda[completa]/abrir página de ajuda
ajuda[silenciosa]/atualizar barra de status
FIGURA 10.2 Eventos internos mostrados com o estado de digitação de um campo de texto.
ESTADOS DE ATIVIDADES
Nos estados que descrevi até aqui, o objeto está quieto e esperando pelo próximo evento,
antes de fazer alguma coisa. No entanto, você pode ter estados nos quais o objeto está
realizando algum trabalho.
O estado Pesquisar, na Figura 10.3, é um estado de atividade: a atividade em
andamento é identificada com realizar/; daí, o termo realizar-atividade. Uma vez ter-
minada a pesquisa, todas as transições sem atividade, como aquela para exibir o novo
hardware, são realizadas. Se ocorrer o evento cancelar durante a atividade, a atividade
realizar-atividade será interrompida sem cerimônia e voltaremos ao estado Atualizar Ja-
nela de Hardware.
Exibir Nova
Janela de
Hardware
FIGURA 10.3 Um estado com uma atividade.
114 UML ESSENCIAL
Ligado
hora
Exibir Hora Exibir Hora de
Atual Alarme alarme
......
limite concorrente
H
Rádio CD
......
Desligado
FIGURA 10.6 Uma instrução switch aninhada da linguagem C# para manipular a transição de esta-
dos da Figura 10.1.
descrever um comportamento que envolva vários objetos em colaboração. Para tal, é útil
combinar diagramas de estados com outras técnicas. Por exemplo, os diagramas de inte-
ração (veja o Capítulo 4) são bons para descrever o comportamento de vários objetos em
um único caso de uso e os diagramas de atividades (veja Capítulo 11) são bons para
mostrar a seqüência geral de atividades para vários objetos e casos de uso.
Nem todo mundo considera que os diagramas de estados sejam naturais. Fique
atento ao modo como as pessoas trabalham com eles. Pode ser que sua equipe não con-
sidere os diagramas de estados úteis para seu modo de trabalhar. Isso não é um grande
problema; como sempre, você deve lembrar de usar uma combinação das técnicas que
funcionem para seu caso.
Se você utilizar diagramas de estados, não tente desenhá-los para cada classe
presente no sistema. Embora essa estratégia seja freqüentemente utilizada por per-
feccionistas de muita formalidade, ela é quase sempre um desperdício de trabalho.
Use diagramas de estados somente para aquelas classes que exibem comportamento
interessante, para as quais a construção do diagrama de estados ajude a compreender
o que está acontecendo. Muitas pessoas acreditam que a interface com o usuário e os
objetos de controle têm o tipo de comportamento que é útil representar com um
diagrama de estados.
estado.tratarVelaRemovida
Tanto o User Guide [Booch, UML user] como o Reference Manual [Rumbaugh, UML
Reference] têm mais informações sobre diagramas de estados. Os projetistas de tempo
real tendem a usar muito os modelos de estado; portanto, não é de surpreender que
[Douglass] tenha muito a dizer sobre diagramas de estados, incluindo informações sobre
como implementá-los. [Martin] contém um capítulo muito bom sobre as várias manei-
ras de implementar diagramas de estados.