Máquina de estados abstratos

Origem: Wikipédia, a enciclopédia livre.

Em ciência da computação, uma máquina de estados abstratos (ASM) é uma máquina de estados finitos operando em estados que são estruturas de dados arbitrárias (estruturas no sentido de lógica matemática, que é um conjunto não-vazio juntamente com um número de funções (operações sobre o conjunto) e relações).

O Método ASM é um método de engenharia de sistemas prático e cientificamente bem-embasado que diminui a lacuna entre as duas extremidades do desenvolvimento de sistema:

  • o entendimento humano e a formulação de problemas do mundo-real (análise de requerimentos por uma modelagem acurada de alto nível com o nível de abstração determinada pelo domínio da aplicação)
  • a implementação de suas soluções algorítmicas por máquinas de execução de código em plataformas de mudança (definição de decisão de projeto, sistema, e detalhes de implementação).

O método é construído em cima de três conceitos básicos:

  • ASM: uma forma precisa de pseudo-código, generalizando Máquina de Estados Finitos para operar sobre estruturas arbitrárias de dados;
  • modelo terra: uma forma rigorosa de blueprints, servindo de modelo de referência de autorização para o design;
  • refinamento: um esquema mais geral para instanciações passo-a-passo de abstrações de modelo para elementos concretos de sistema, provendo ligações controláveis e descrições mais detalhadas nos sucessivos estágios de desenvolvimento de sistema.

Na concepção original de ASMs, um único agente executa um programa em uma seqüência de passos, possivelmente interagindo com o seu ambiente. Esta noção foi estendida para capturar processamento distribuído, no qual múltiplos agentes executam seus programas concorrentemente.

Já que modelos algorítmicos ASM em níveis arbitrários de abstração, podem prover visões de baixo, alto, e médio níveis do projeto de um hardware e software, especificações ASM freqüentemente consistem em uma série de modelos ASM, começando com um modelo terra abstrato e procedendo para níveis maiores de detalhes em sucessivos refinamentos ou detalhamentos.

Devido à natureza algorítmica e matemática destes três conceitos, modelos ASM e suas propriedades de interesse podem ser analisadas usando quaisquer forma rigorosa de verificação (pelo raciocínio) ou validação (por experimentação, testando modelos de execução).

História[editar | editar código-fonte]

O conceito de ASMs é de crédito de Yuri Gurevich, quem primeiro propôs o mesmo em meados de 1980 como uma melhoria à Tese de Church-Turing na qual todo algoritmo é simulado por uma Máquina de Turing apropriada. Ele formulou a Tese ASM: todo algoritmo, não importa o quanto abstrato, é uma emulação passo-a-passo por uma ASM apropriada. Em 2000, Gurevich axiomatizou a noção de algoritmos seqüenciais, e provou a tese ASM para eles. Vulgarmente dito, os axiomas são os seguintes: estados são estruturas, a transição de estados envolve apenas uma parte delimitada do estado, e tudo é invariante sobre isomorfismo de estruturas (estruturas podem ser vistas como álgebras, as quais explicam o nome original evoluindo álgébras para ASMs). A axiomatização e caracterização de algoritmos seqüenciais foram estendidas para computação paralela e algoritmos interativos.

Nos anos 1900, por um esforço comunitário, o método ASM foi desenvolvido, usando ASMs para a especificação formal e análise (verificação e validação) de hardware de computadores e software. Especificações ASM compreensivas de linguagens de programação (incluindo Prolog, C, e Java) e design de linguagens (UML e SDL) foram desenvolvidas. Um relato histórico detalhado pode ser encontrado no capítulo 9 do livro AsmBook ou neste artigo.

Um número de ferramentas de software para execução e análise de ASM estão disponíveis.

Publicações[editar | editar código-fonte]

Livros[editar | editar código-fonte]

Modelos comportamentais para padrões industriais[editar | editar código-fonte]

Ferramentas[editar | editar código-fonte]

(em ordem histórica desde 2000)

Referências[editar | editar código-fonte]

Ligações externas[editar | editar código-fonte]