State machine

Em geral, uma máquina de estado é qualquer dispositivo que armazena o status de algo em um determinado momento e pode operar na entrada para alterar o status e/ou causar uma ação ou saída para uma determinada alteração. Um computador é basicamente uma máquina de estado e cada instrução de máquina é entrada que muda um ou mais estados e pode fazer com que outras ações ocorram. O registro de dados de cada computador armazena um estado. A memória somente de leitura a partir da qual um programa de inicialização é carregado armazena um estado (o próprio programa de inicialização é um estado inicial). O próprio sistema operacional é um estado e cada aplicação que roda começa com algum estado inicial que pode mudar conforme ele começa a lidar com a entrada. Assim, a qualquer momento, um sistema de computador pode ser visto como um conjunto muito complexo de estados e cada programa nele contido como uma máquina de estados. Na prática, porém, máquinas de estados são usadas para desenvolver e descrever interações específicas de dispositivos ou programas.

Para resumir, uma máquina de estados pode ser descrita como:

  • An initial state or record of something stored someplace
  • A set of possible input events
  • A set of new states that may result from the input
  • A set of possible actions or output events that result from a new state

In their book Real-time Object-oriented Modeling, Bran Selic & Garth Gullekson view a state machine as:

  • A set of input events
  • A set of output events
  • A set of states
  • A function that maps states and input to output
  • A function that maps states and inputs to states (which is called a state transition function)
  • A description of the initial state

A finite state machine is one that has a limited or finite number of possible states. (Uma máquina de estados infinitos pode ser concebida mas não é prática.) Uma máquina de estados finitos pode ser usada tanto como uma ferramenta de desenvolvimento para abordar e resolver problemas como uma forma formal de descrever a solução para desenvolvedores e mantenedores de sistemas posteriores. Existem várias formas de mostrar máquinas de estados, desde tabelas simples até ilustrações animadas graficamente.