INF1013 – Modelagem de Software Prof. Ivan Mathias Filho Exercício de Modelagem de Estados Um relógio digital simples tem um visor e dois botões para ajustá-lo: o botão A e o botão B. Além disso, o relógio em questão possui três modos de operação: 1. Modo de Exibição 2. Modo de Ajuste de Horas 3. Modo de Ajuste de Minutos No Modo de Exibição, as horas e os minutos são mostrados separadamente através de dois pontos. Quando o relógio for ligado, o mostrador deverá exibir 00:00. Os modos restantes são utilizados para o ajuste das horas e dos minutos, respectivamente. O botão A é usado para selecionar os modos. Isto é, a cada vez que ele é pressionado os modos avançam na seguinte sequência: Exibição, Ajuste de Horas e Ajuste de Minutos, retornando para o início da sequência após o último modo. O botão B só produz efeito quando o relógio estiver nos modos de Ajuste de Horas ou Ajuste de Minutos. Nesses modos, as horas, ou os minutos, são acrescidos de uma unidade a cada vez que o botão B for pressionado. Um aspecto relevante é que quando um botão for pressionado o evento gerado só irá surtir efeito se o outro não estiver sendo pressionado. Você deve construir um diagrama de estados que modele o comportamento de um relógio como o descrito acima. Utilize as operações e os atributos da classe abaixo para definir os eventos, as ações e as condições de guarda da sua máquina de estados. As operações da classe Relogio possuem as seguintes semânticas: • • • APressed( ) – esta operação será ativada quando o botão A for pressionado. O efeito colateral da execução desta operação é alterar o valor do atributo a para true. BPressed( ) – esta operação será ativada quando o botão B for pressionado. O efeito colateral da execução desta operação é alterar o valor do atributo b para true. AReleased( ) – esta operação será ativada quando o botão A for solto. O efeito colateral da execução desta operação é alterar o valor do atributo a para false. INF1013 – Modelagem de Software Prof. Ivan Mathias Filho Exercício de Modelagem de Estados • BReleased( ) – esta operação será ativada quando o botão B for solto. O efeito colateral da execução desta operação é alterar o valor do atributo b para false. Os atributos hora e minuto contêm, respectivamente, os valores das horas e dos minutos que são exibidos no visor do relógio. Estes atributos devem ser incrementados de acordo com as regras descritas anteriormente.