3.1. Modelagem de eventos e transições
Uma notação de evento de estado é feita por meio de um texto em uma seta que liga um estado a outro, usando uma linha sólida com uma ponta de seta. A seta representa a transição associada com o acontecimento. Os termos “eventos” e “transições” são muitas vezes utilizados como sinônimos no diagrama de máquina de estados, visto que ambos sempre aparecem juntos.
A direção da seta indica a direção da mudança. A base da seta identifica o estado em que o objeto estava quando o evento é gerado, e a ponta da seta identifica o estado em que as alterações afetam o objeto (a causa do evento). A figura abaixo apresenta o evento “habilita()” que causa a transição do estado “alocado” para o estado “ativado”.
A maioria dos eventos em um diagrama estados vem de outros objetos. Mas o diagrama estados não lhe diz de qual objeto os eventos vieram. Isso acontece na medida em que o diagrama de máquina de estados detalha apenas o efeito que cada evento gera. Os diagramas de interação modelam as origens e destinos das mensagens. Dentro de um diagrama de máquina de estados, um objeto não precisa saber quem enviou o evento. Um objeto só é responsável pela forma como ele responde ao evento. Por isso, é importante lembrar que a base da seta identifica o estado em que o objeto está em quando recebe o acontecimento e não diz nada sobre o local de onde o evento veio.
Veja um exemplo bem simples.
Suponha que você tenha uma TV e que ela possua um controle remoto. Suponha também que você tenha comprado um controle remoto daqueles universais (que operam qualquer aparelho). Para ligar a TV você pode optar por pressionar o botão de ligar na TV, no controle remoto da TV ou no controle remoto universal. Não importam quem está enviando a mensagem de ligar a TV, o que importa é que ela estava em um estado de “desligado”, alguém enviou uma mensagem de “ligar()”, e que agora ela executará os procedimentos internos para ligar (mostrando a imagem e o som do canal atual) até ficar no estado de “ligado”. Para a TV, pouco importa quem manda a mensagem, o que importa é como ela reage à mensagem de “ligar()”.
X