Tag: Máquina de estados orientada a objectos

Programação avançada – capitulo 8

Num máquina de estados existem os seguintes conceitos:
estados (por exemplo: “sem moedas”, “com moedas”, “em manutenção”, ..),
acções (por exemplo: “insere moeda”, “retira moeda”, “roda manípulo”, “roda manipulo”,…),
tem reacções (de ignorar, ou de alterar o seu estado e executar acções (que por sua vez podem ou não gerar outras acções)).

Assim uma aplicação tem:
contexto ou entidade (entidade cujo contexto depende do seu estado),
eventos (podem acontecer acções que fazem desencadear eventos),
e estados (é a situação que é assumida aquando de eventos e traduz o resultado do comportamento da entidade).

A máquina de estados orientada a objectos
A entidade maquina de estados, tem funções que correspondem ao processamento dos eventos a que reage. O processamento dos eventos depende do estado em que a entidade se encontra. Quando se pretende que o código das funções da entidade que correspondem ao processamento de eventos não envolva instruções if ou switch dependentes do estado:

  1. define-se uma hierarquia de classes que representa os estados possíveis e contém o conhecimento acerca do processamento de eventos em cada estado (incluindo mudanças de estado)
  2. a entidade, em cada momento, tem uma referência para um objecto que representa o estado concreto em que se encontra
  3. as funções da entidade que correspondem a processamento de eventos que dependem do estado, delegam para o objecto que representa o estado corrente, o processamento dos eventos.

O contexto tem uma referência para um objecto que representa o estado (concreto) em que se encontra. Os possíveis estados concretos fazem parte de uma hierarquia que tem por base um tipo abstracto, IEstado.
O comportamento da entidade (o seu contexto) é delegado nesse objecto (estado concreto):
reacção aos eventos
acções a executar
mudanças de estado

Assim surge a entidade ou contexto, o estado e os estados concretos, e que se podem resumir da seguinte forma:
A entidade ou contexto:
define o interface necessário de acordo com as suas responsabilidades
mantém um membro que representa o estado concreto em que se encontra
tem uma referencia para o IEstado (tipo da base da hierarquia que representa os estados possíveis) que refere o objecto que representa o estado concreto em que se encontra
tem métodos que representam o processamento de eventos. A entidade delega o processamento de eventos (que pode variar conforme o seu estado) no objecto que representa o estado corrente

O estado (IEstado):
define o interface para encapsular o comportamento da entidade que pode variar conforme o seu estado concreto

Os Estados concretos, que são classes derivadas da classe EstadoAdapter (que implementa o interface IEstado):
cada classe derivada, representando um estado concreto, implementa o comportamento que lhe e associado.

Tags : , , ,