Modelagem Orientada a Objetos Modelagem Dinâmica Diagrama de Estados Objetivos de um diagrama de estados Representar o comportamento dinâmico de classes individuais Representar o comportamento dinâmico de colaboração entre classes Elementos de um diagrama de estados os estados possíveis para os objetos de uma certa classe as transições de estado os eventos que causam transições de estados as ações decorrentes de – uma transição de estado – entrada em um estado – saída de um estado as ações realizadas por objetos enquanto estão em um certo estado – durante todo o tempo em que o objeto está no estado – decorrente de algum evento as condições para ocorrer uma transição de estado ou para a execução de uma ação. Diagramas de Estados Relaciona eventos e estados Um objeto muda de estado dependendo do evento e do estado atual. Transição: modificação de estado causada por um evento (mesmo quando estado final e inicial coincidem). Um evento pode ser irrelevante para um objeto em um certo estado. Exemplo: linha telefônica Diagramas de Estados Exemplo : Linha telefônica no-gancho no-gancho Inativa fora-do-gancho Sinal de discar dígito( n ) Sinal de ocupado número ocupado Sinal de ocupado rápido tronco ocupado queda-da-linha dígito( n ) Discando número válido Quedada-linha número Mensagem gravada invalido Ligando encaminhado Tocando telefone chamado atende Interligando telefone chamado desliga Desligando Mensagem terminada Diagramas de Estados Exemplo : jogo de xadrez Diagrama de estados de uma só passagem para um jogo de xadrez Início Vez das brancas pretas jogam brancas jogam cheque-mate Pretas vencem empate forçado Empate empate forçado Vez das pretas cheque-mate Brancas vencem Tipos de diagramas de estados Diagrama de laço contínuo: representa um ciclo de vida; sem estado inicial ou final. Exemplo: linha telefônica. Diagrama de uma só passagem: representa objetos com vida finita; possuem um estado inicial (criação do objeto) e um estado final (destruição do objeto). Exemplo: jogo de xadrez Condições Uma condição é uma função booleana de valores, válida dentro de um intervalo de tempo. Condições funcionam como guardas nas transições: uma transição só dispara quando ocorre o evento e a condição de guarda for verdadeira. Exemplo: Veículo em um cruzamento. Diagramas de Estados Exemplo: Veículo em um cruzamento Diagrama de estados com transições guardadas Norte / Sul podem ir em frente tempo decorrido [ carros nas vias esquerdas N / S ] tempo decorrido tempo decorrido Leste / Oeste podem dobrar à esquerda Norte / Sul podem dobrar à esquerda tempo decorrido [ carros nas vias esquerdas L / O ] Leste / Oeste podem ir em frente Controle de Operações Atividades e ações podem ser vinculadas a estados e eventos a fim de se especificar o que faz o objeto quando está em um determinado estado e o que faz em resposta a estímulos externos. Definem o comportamento do objeto! Atividade Está sempre vinculada a um estado Consome tempo para se completar É executada continuamente durante o tempo em que o objeto está num certo estado Notação: faça: atividade Exemplo: Um vendedor logo após ter recebido dinheiro para pagamento do item vendido deve calcular o troco. faça: calcular troco Ação Está normalmente vinculada a um evento, mas também pode estar vinculada a um estado (ações de entrada, saída e internas) É executada "instantaneamente" Notação: evento / ação Exemplo: Exibir um menu quando o botão direito do mouse é pressionado. botão direito pressionado / exibir menu Controle de Operações Ações para um menu instantâneo botão direito pressionado / exibir menu instantâneo Menu visível Inativo botão direito liberado / apagar menu instantâneo cursor movimentado / iluminar item do menu Diagrama de Estados com Operações Notação Estado 1 faça : atividade 1 Evento 1 ( atributos ) [ condição 1 ] / ação 1 Estado 2 ... Exercício: reescrever o diagrama de uma chamada telefônica utilizando a notação acima Diagramas de Estados Nivelados Permitem refinamentos sucessivos do modelo dinâmico Permitem uma descrição estruturada do sistema Pode-se expandir: – um evento e sua correspondente ação – uma atividade realizada em um certo estado Exemplo: Máquina de vender Diagramas de Estados Nivelados Exemplo : máquina de vender moedas introduzidas ( quantia ) verificar saldo Inativa cancelar / devolver moedas Recolhendo dinheiro moedas introduzidas ( quantia ) / acrescentar ao saldo [ item vazio ] Selecionar ( item ) [ troco < 0 ] faça : testar item e calcular troco [ troco = 0 ] faça : entregar item [ troco < 0 ] faça : preparar troco Diagramas de Estados Nivelados Exemplo : máquina de vender Atividade entregar item da máquina de vender braço pronto Faça : mover braço para a fileira correta Faça : mover braço para a coluna correta Transição selecionar item da máquina de vender faça : preparar item braço pronto dígito( n ) clear empurrado faça : empurrar item para fora da prateleira dígito( n ) Selecionar( item ) faça : acrescentar dígito enter Generalização de Estados Os estados de um objeto podem ser organizados de forma hierárquica, em super-estados e sub-estados. Um sub-estado é um refinamento de um super-estado, i.e., um sub-estado é um dos possíveis estados do objeto dentro daquele super-estado. Um sub-estado herda as transições do super-estado; transições que se aplicam ao super-estado também se aplicam ao sub-estado. Exemplos: linha telefônica, transmissão automática de um automóvel Generalização de Estados Exemplo : transmissão de um carro apertar R Neutro Ré apertar N apertar N apertar F Para a frente sobe pára Primeira sobe Segunda reduz Terceira reduz Generalização de Eventos Os eventos que ocorrem em um sistema podem ser organizados de forma hierárquica, em super-eventos e sub-eventos. Um sub-evento herda atributos do super-evento. Onde um evento é descrito qualquer sub-evento seu é implicitamente descrito. A generalização de eventos facilita a abstração e permite concisão na representação de diagramas. Exemplo: Entrada do usuário. Generalização de Eventos Exemplo : eventos de teclado evento tempo Entrada do usuário dispositivo Botão do mouse localização Botão do mouse apertado Botão do mouse liberado Hierarquia parcial de eventos para eventos de teclado caracter do teclado caracter controle gráfico espaço alfanumérico pontuação Concorrência de Agregação O estado de um objeto composto (um agregado) é determinado pelos estados dos objetos que o compõem. Exemplo: O estado de um carro é determinado pelo estado da ignição, da transmissão, do freio, do acelerador, do motor, ... Os componentes de um agregado normalmente interagem entre si: a mudança de estado de um componente pode disparar uma transição em outro componente. A interação entre diagramas de estados de componentes é representada através de eventos compartilhados e/ou condições de guarda. Concorrência de Agregação Carro Ignição Transmissão Freio Girar chave para dar partida [ transmissão em Neutro ] Ignição Desligada Partida Acelerador liberar chave Ligada desligar a chave Acelerador Desligado apertar acelerador liberar acelerador Freio Ligado Desligado apertar freio liberar freio Partido Concorrência Interna de Objetos O diagrama de estados de um objeto pode ser particionado de acordo com atributos e ligações em sub-diagramas. O estado do objeto compreende um estado de cada sub-diagrama. Um mesmo evento pode causar transições em mais de um sub-diagrama. Exemplo: Jogo de bridge rubber. Concorrência Interna de Objetos Jogo de bridge com estados concorrentes Jogando rubber Vulnerabilidade N - S Não vulnerável jogo N - S Vulnerável jogo N - S N-S vence rubber Vulnerabilidade L - O Não vulnerável jogo L - O Vulnerável jogo L - O L - O vence rubber Transição Automática Disparada quando a atividade vinculada a um estado termina O "evento" que causa a transição é o término da atividade Exemplo: Máquina de vender no estado correspondente a atividade testar item e calcular troco pode disparar uma de quatro transições automáticas. Ações de Entrada e de Saída Ações vinculadas ao ato de entrar ou sair de um estado Não adicionam poder de expressão, mas permitem uma representação mais concisa Exemplo: Controle de uma porta de garagem (p. 135) Envio de Eventos Uma ação pode ser especificada como enviar um certo evento para outro objeto. Notação: enviar E (atributos) (palavra enviar pode ser omitida) Exemplo: Uma linha telefônica envia o evento ligar(número-de-telefone) para o comutador quando um número completo é discado. número completo / ligar(número-de-telefone) Sincronização de Eventos Concorrentes Um objeto pode executar várias atividades de forma concorrente (paralela). As atividades não são necessariamente sincronizadas, mas todas devem terminar para que ocorra transição de estado. Exemplo: Caixa automática. Sincronização de Eventos Concorrentes Emitindo Faça : entregar dinheiro dinheiro recolhido Pronta para reinicializar Preparação Faça : ejetar cartão cartão recolhido