210 likes | 305 Views
A Linguagem de Especificação Z. Conteúdo. Linguagens de especificação Definição Exemplos Linguagem Z Histórico Vantagens de Uso Operadores básicos Exemplo prático Referências. Linguagens de Especificação. Definição.
E N D
Conteúdo • Linguagens de especificação • Definição • Exemplos • Linguagem Z • Histórico • Vantagens de Uso • Operadores básicos • Exemplo prático • Referências
Linguagens de Especificação Definição • Linguagens de especificação usam notação matemática para descrever o que um programa deve fazer, sem descrever como fazê-lo.
Linguagens de Especificação Exemplos Métodos de Especificação Formal Linguagens Orientadas ao Modelo Linguagens Orientadas ás Propriedades {VDM, Z} Linguagens Axiomáticas Linguagens Algébricas {OBJ, Anna, Larch} {Clear, ActOne}
Linguagem Z Histórico • Proposta em 1977 por Jean-Raymond Abrial, com a ajuda de Steve Schuman e Bertrand Meyer. • O nome Z (pronuncia-se “zed”) vem da teoria de Zermelo-Fraenkel.
Linguagem Z Vantagens de Uso • Amplamente utilizada • Possui um padrão internacional para sua sintaxe, semântica e sistema de tipos. • Fácil percepção de erros durante a especificação formal e implementação.
Linguagem Z Conceitos Básicos • Tipos • Esquemas • Conjuntos • Propriedades • Estado
Linguagem Z Conceitos Básicos • Notações: • operação’: indica o resultado da operação sobre o estado inicial, ou seja, o estado final. • Δ Esquema: Indica mudança no estado. • Ξ Esquema: Indica que o estado não muda. • variável?: Indica que “variável” receberá entrada. • variável!: Indica que “variável” gerará saída.
Linguagem Z Exemplo Prático Exemplo da agenda de aniversários: Primeiro, especificamos que lidaremos com nomes e datas: Então, definimos seu espaço de estados:
Linguagem Z Exemplo Prático Agenda de Aniversários Agora podemos especificar a primeira operação, para adicionar um nome:
Linguagem Z Exemplo Prático Agenda de Aniversários Em seguida, a operação para encontrar o aniversário de uma dada pessoa:
Linguagem Z Exemplo Prático Agenda de Aniversários Agora, encontrar as pessoas que fazem aniversário em uma certa data:
Linguagem Z Exemplo Prático Agenda de Aniversários Por fim, especificamos qual é o estado do sistema quando ele é iniciado pela primeira vez:
Linguagem Z Exemplo Prático Agenda de Aniversários Agora, podemos considerar erros de entrada. Para isso, precisamos de uma saída result!, que dirá se a entrada é válida ou não. Então definimos um tipo INFO, que é um conjunto com os seguintes valores: Pode-se definir um esquema Sucesso, que especifica que o resultado é ok, sem definir como o sistema muda:
Linguagem Z Exemplo Prático Agenda de Aniversários Para o caso de o usuário entrar, em AddNome, um nome que já faz parte de pessoa:
Linguagem Z Exemplo Prático Agenda de Aniversários E para o caso de o usuário entrar, em AcharNiver, um nome que não faz parte de pessoa:
Linguagem Z Exemplo Prático Agenda de Aniversários Porém, os três últimos esquemas não fazem sentido sozinhos. Então, podemos relacioná-los com os outros esquemas: onde o “R” antes do nome do esquema indica que esta é uma versão “robusta” do esquema. Seguem especificações dessas uniões em um só esquema:
Linguagem Z Exemplo Prático Agenda de Aniversários
Linguagem Z Exemplo Prático Agenda de Aniversários
Linguagem Z Exemplo Prático Agenda de Aniversários E, juntando todos os tipos e esquemas, a especificação está completa.