Programação de Sistemas Embebidos Módulo 5 Definição do Comportamento dos Objectos João M. Fernandes U. Minho & U. Algarve - Portugal
Definição do Comportamento dos Objectos / Sumário 1. Tipos de Comportamento 2. Objectos com Estados 3. Statecharts 2004 - J.M.Fernandes - U.Algarve 2/33
Definição do Comportamento dos Objectos / Tipos de Comportamento Vimos como modelar a estrutura dum sistema, com base na identificação dos objectos que o compõem. É também importante caracterizar o comportamento dinâmico (temporal) desse sistema. O comportamento relaciona a estrutura dos objectos com os seus atributos e mostra como os objectos cumprem as suas responsabilidades. Há várias formas distintas de especificar o comportamento global dos objectos. A mais importante alternativa é a modelação do comportamento dos objectos com máquinas de estado. A modelação de cenários ajuda a testar os modelos comportamentais para assegurar que os objectos colaboram cumprem as suas responsabilidades. 2004 - J.M.Fernandes - U.Algarve 3/33
Definição do Comportamento dos Objectos / Tipos de Comportamento Comportamento simples Os objectos com este tipo de comportamento desempenham funções ou serviços a pedido e não guardam registo dos pedidos anteriores. Um objecto simples responde sempre da mesma forma ao mesmos pedidos. Exemplos Funções matemáticas simples (seno, raiz quadrada, cubo, ) Uma operação de procura sob uma estrutura de dados estática Operações de ordenação Por exemplo, cos(π)=-1, independentemente dos valores anteriormente passados à função cos(). 2004 - J.M.Fernandes - U.Algarve 4/33
Definição do Comportamento dos Objectos / Tipos de Comportamento Comportamento baseado em estados Este tipo de comportamento também se chama statedriven ou reactivo. Um estado representa um período de tempo durante o qual o sistema exibe um dado comportamento. Uma definição de estado é a seguinte: A state is an ontological condition that persists for a significant period of time, is distinguishable from other such conditions, and is disjoint with them. A distinguishable state means that it differs from other states in the events it accepts, the transitions it takes as a result of accepting those events, or the actions it performs. 2004 - J.M.Fernandes - U.Algarve 5/33
Definição do Comportamento dos Objectos / Tipos de Comportamento A modelação do comportamento dum objecto com uma máquina de estados reduz a complexidade, pois: O sistema só pode assumir um número finito de condições de existência, chamadas estados. O comportamento num dado estado é essencialmente o mesmo e é dado por: As mensagens e os eventos aceites As acções associadas a cada evento de entrada O espaço de estados (reachability graph) O sistema mantém-se nos estados por períodos de tempo não nulos (o tempo é discreto). O sistema muda de estado, apenas num número finito de alternativas, chamadas transições. As transições demoram tempo nulo a efectuar-se. 2004 - J.M.Fernandes - U.Algarve 6/33
Definição do Comportamento dos Objectos / Tipos de Comportamento Em UML, existem dois formalismos para especificar máquinas de estados: state-charts e diagramas de actividades. Os state-charts são usados quando a transição entre estados dispara devido principalmente à ocorrência dum evento significativo. Os diagramas de actividades mostram-se apropriados quando a transição de estados ocorre, sobretudo, por causa da conclusão da actividade executada no estado. As máquinas de estado assentam na Lógica Aristotélica e no princípio do 3º excluído. Uma máquina de estados está apenas num único estado em cada instante de tempo. 2004 - J.M.Fernandes - U.Algarve 7/33
Definição do Comportamento dos Objectos / Tipos de Comportamento Comportamento contínuo Muitos objectos apresentam este tipo de comportamento, nomeadamente filtros digitais, sistemas de lógica fuzzy e sistemas de controlo PID. Objectos com comportamento contínuo não seguem o princípio do 3º excluído. De facto se um valor é um número real entre 0 e 1, ele não pode ser modelado por uma máquina de estados. Um termómetro (não digital) pode ser visto como um objecto com comportamento contínuo. 2004 - J.M.Fernandes - U.Algarve 8/33
Definição do Comportamento dos Objectos / Objectos com Estados Em análise estruturada, não é claro qual a parte do sistema que exibe comportamento de estados. Várias funções e dados colaboram conjuntamente de forma a que o seu comportamento possa ser modelado com máquina de estados. Em OO, a unidade que exibe comportamento orientado aos estados é clara. As classes definem modelos de estados e os objectos executam-nos. Considere-se um mero retriggerable one-shot timer. Esse timer está normalmente num de dois estados possíveis. 2004 - J.M.Fernandes - U.Algarve 9/33
Definição do Comportamento dos Objectos / Objectos com Estados 2004 - J.M.Fernandes - U.Algarve 10/33
Definição do Comportamento dos Objectos / Objectos com Estados Usando FSM puras (sem variáveis), um timer de 16 bits necessita de 65,537 estados (2 16 +1). Essas máquinas, por muito puras que possam ser, não se revelam úteis. Nesta disciplina, as máquinas de estado podem usar variáveis. Um objecto para transacção de mensagens é outro exemplo de comportamento orientado aos estados. Quando o emissor envia uma mensagem para o barramento para o receptor, usando um protocolo de comunicação fiável, um objecto transacção é criado. Esse objecto temporário deve verificar se ao receptor chegou correctamente a mensagem. 2004 - J.M.Fernandes - U.Algarve 11/33
Definição do Comportamento dos Objectos / Objectos com Estados 2004 - J.M.Fernandes - U.Algarve 12/33
Os statecharts, como definidos por David Harel, são a base das máquinas de estados em UML. Os statecharts eliminam algumas das limitações das máquinas de estados, mantendo as vantagens da modelação orientada aos estados. Incluem estados hierárquicos aninhados e concorrência. A sintaxe básica dos statecharts é similar aos diagramas de estados tradicionais. 2004 - J.M.Fernandes - U.Algarve 13/33
2004 - J.M.Fernandes - U.Algarve 14/33
A maior diferença para os diagramas de estados tradicionais reside no aninhamento de estados. Um estado que inclua no seu interior outros estados chama-se super-estado. Os estados internos dum super-estado designam-se sub-estados. S2 contém 2 sub-estados U1 e U2. Quando o sistema está em S2, deve estar exactamente em um dos seus sub-estados. Os sub-estados podem estar fisicamente incluídos no super-estado. Alternativamente, o super-estado pode ser descrito num novo diagrama. 2004 - J.M.Fernandes - U.Algarve 15/33
As transições podem terminar num estado terminal (como T5) ou num super-estado (como T1). Quando uma transição termina num super-estado, têm de aplicar-se algumas regras para determinar qual o sub-estado que é o destino. Sempre que houver ambiguidade, um estado inicial deve ser identificado (ver B em S3). Adicionalmente, pode incluir-se um conector história (como em S2). Quando uma transição parte dum super-estado, tal significa que se aplica a todos os seus sub-estados. Isto permite uma simplificação muito grande, pois uma única transição pode representar, na realidade, várias. 2004 - J.M.Fernandes - U.Algarve 16/33
A parte comportamental dos statecharts é mais elaborada que as máquinas de estados. Tanto os estados como as transições podem ter acções associadas. Os estados podem ter acções de entrada e de saída, bem como actividades. As acções de entrada são executadas quando se transita para o respectivo estado. As acções de saída são executadas quando se abandona o respectivo estado. Assume-se que as acções demoram um tempo insignificante a executar (são quase instantâneas). As actividades são executadas enquanto o estado estiver activo e podem prolongar-se no tempo. 2004 - J.M.Fernandes - U.Algarve 17/33
2004 - J.M.Fernandes - U.Algarve 18/33
As transições podem ter parâmetros e guardas, bem como acções. A sintaxe para as transições é: evento(parâmetros) [guarda] / lista_acções ^lista_eventos Todos os campos são opcionais; mesmo o evento! Uma transição habitual em sistemas embebidos é a transição time-out. É denotada pelo evento tm(intervalo). 2004 - J.M.Fernandes - U.Algarve 19/33
Componentes ortogonais e concorrência Uma das limitações das máquinas de estados é que a existência de componentes ortogonais faz explodir exponencialmente o número de estados. Vejamos a seguinte classe: enum tcolor (ered, eblue, egreen); enum tmode (enormal, estartup, edemo); class orthoclass { public: tcolor Color; bool ErrorStatus; tmode Mode; setcolor (tcolor c); setes (bool es); setmode (tmode m); } Quantos estados tem esta classe? 2004 - J.M.Fernandes - U.Algarve 20/33
2004 - J.M.Fernandes - U.Algarve 21/33
Os statecharts permitem representar de forma clara e sucinta componentes ortogonais. 2004 - J.M.Fernandes - U.Algarve 22/33
Quando desejável, pode-se mostrar explicitamente a dispersão ou sincronização do controlo. 2004 - J.M.Fernandes - U.Algarve 23/33
Os componentes ortogonais suportam a modelação de concorrência e podem implicar threads concorrentes. Por vezes, as threads têm que sincronizar. 2004 - J.M.Fernandes - U.Algarve 24/33
Existem 3 formas pré-definidas para componentes ortogonais comunicarem entre si: Eventos difundidos (broadcast) Eventos propagados Operador IN() Os eventos difundidos são eventos aceites por mais do que um componente ortogonal. Os eventos propagados são sinalizados sempre que uma dada transição dispara num componente. O operador IN() devolve o valor TRUE, se um outro componente está actualmente num estado especificado. 2004 - J.M.Fernandes - U.Algarve 25/33
2004 - J.M.Fernandes - U.Algarve 26/33
A definição do modelo do tempo associado aos statecharts é crucial para que a sua semântica seja clara. Assim, pode determinar-se se as alterações produzidas num dado passo de execução (eventos gerados ou atributos modificados) devem reflectir-se no mesmo passo (i.e. imediatamente) ou apenas no seguinte. O modelo temporal assíncrono considera que o sistema reage mal uma alteração externa ocorrer. Este modelo permite que vários passos possam suceder no mesmo instante temporal. O modelo síncrono do tempo pressupõe a existência dum sinal regulador do avanço do sistema (relógio). Este modelo temporal assume que o sistema executa um único passo em pulso, reagindo a todas as alterações externas que ocorreram desde o ciclo anterior. 2004 - J.M.Fernandes - U.Algarve 27/33
O state-chart será a referência para ilustrar as diferenças desses dois modelos do tempo A máquina de estados está inicialmente no estado {A,C}. 2004 - J.M.Fernandes - U.Algarve 28/33
Modelo síncrono do tempo Assim que surgir o evento ev1, a transição t1 está habilitada a disparar no ciclo seguinte. O disparo dessa transição dá-se assim que surgir um pulso no sinal de relógio e tem por consequência atribuir àvariável var o valor 0 e activar o estado B. A máquina passa para o estado {B,C}. No ciclo seguinte, a transição t2 está habilitada a disparar, uma vez que a variável var passou a ter valor 0. Quando a transição t2 dispara, a máquina passa para o estado {B,D}. A máquina continuará a executar, mas para esta explicação o resto do seu comportamento não é relevante. 2004 - J.M.Fernandes - U.Algarve 29/33
Modelo assíncrono do tempo Neste modelo não existe o conceito de relógio, como regulador da passagem do tempo. Mal surja o evento ev1, a transição t1 dispara, o valor 0 é atribuído à variável var e a máquina passa, momentaneamente a estar no estado {B,C}. O termo momentaneamente é de salientar, pois, imediatamente ao disparo de t1, deve disparar-se t2, dado ser válida a condição que lhe está associada. Pode afirmar-se que a alto nível, a máquina passa directamente do estado {A,C} para o estado {B,D}. Nessa altura, a máquina atinge um estado estável, continuando a máquina a executar (neste caso, à espera dos eventos ev2 ou ev3). 2004 - J.M.Fernandes - U.Algarve 30/33
A escolha do modelo síncrono em detrimento do assíncrono é preferível. O modelo síncrono permite, mais facilmente, gerar código para síntese, facilita a simulação e adapta-se melhor na especificação de sistemas digitais síncronos. Esta última característica é muito importante, pois a implementação de sistemas digitais síncronos apresentase ainda como a solução mais simples e com maior probabilidade de funcionamento correcto. Contudo, tem algumas desvantagens, nomeadamente a dificuldade em distribuir o sinal global de relógio. 2004 - J.M.Fernandes - U.Algarve 31/33
Codificação de statecharts Há várias formas de implementar statecharts em software. A mais comum usa uma variável do tipo enumerado para representar o estado. Esta variável é usada num comando switch. switch(state) { case IDLE_STATE: switch (msg.type) { case START_CMD:... break; default: break; } break; case COUNTING_STATE: switch (msg.type) { case TIMEOUT:... break; case... default: break; } break;... 2004 - J.M.Fernandes - U.Algarve 32/33
Definição da Estrutura de Objectos O comportamento dos objectos pode ser modelado com statecharts. Os statecharts são matematicamente equivalentes a máquinas de estados. Incluem vários mecanismos de modelação que permitem obter modelos graficamente mais simples. 2004 - J.M.Fernandes - U.Algarve 33/33