A Linguagem
SDL
1.1 Comportamento de uma instância de especificação
1.2 Estrutura de uma instância de sistema
O objeto alvo de uma especificação em SDL é o sistema (system). O sistema delimita a fronteira entre a especificação e o universo. A propriedade da especificação que é de maior interesse é seu comportamento: o que o sistema faz e sobre que circunstâncias. Tudo que não faz parte do sistema é chamado de ambiente (environment). Um sistema um SDL pode ser aberto ou fechado. Um sistema aberto interage com o ambiente, o que é o caso da maior parte das aplicações.
Como um conceito básico deve ficar claro a diferença entre especificação, tipo e instância. Uma especificação define um tipo. Para um determinado tipo, um determinado número de instâncias podem ser criadas. Um tipo pode ser visto como uma abstração de um conjunto de instâncias tendo as mesmas propriedades. Uma especificação de um sistema pode ser comparada com um programa fonte, enquanto que uma instância de uma especificação comparada com um programa sendo executado.
O comportamento de uma instância de especificação é contituido pelo comportamento combinado de um número de instâncias de processos de uma instância do sistema. A instância de um processo é uma máquina de estados que trabalha autonomamente e concorrentemente com outras instâncias de processos. As várias instâncias de processos se comunicam assincronamente usando mensagens discretas chamadas de sinais (signals). Uma instância de processo reage aos estímulos externos, na forma de sinais, de acordo com sua especificação. Um processo também pode enviar e receber sinais do ambiente (environment) da especificação.
Cada processo possui um único endereço. Um sinal sempre carrega consigo o endereço dos processos de origem e destino, em adição a possíveis valores extras (parâmetros). Assim, o processo destino sabe sempre o endereço do processo origem.
Figura 1.1 Estrutura de uma especificação
Cada processo possui uma memória prórpia para armazenamento de variáveios (variables). Um processo entretando não pode modificar a conteúdo de memória de outro processo diretamente. Os processos possuem também uma fila de entrada (input queue), onde sinais que chegam são colocados. Cada processo encontra-se sempre ou esperando, em um estado (state), ou executando uma transição entre dois estados. Uma transição é iniciada por um sinal da fila de entrada. Quando um sinal inicia uma transição, o mesmo é removido da fila e é dito consumido. Durante uma transição variáveis podem ser manipuladas, decisões tomadas, novas instâncias de processos criadas, sinal enviados a outros processos ou para o próprio processo, etc.
===> Inserir questinário da parte 1.1
O principal objetivo de uma estruturação é diminuir a complexidade do sistema. O conceito de processo é também passível de estruturação, mas uma instância de processo deve sempre estar contida em uma instância de bloco (block instance), que é o principal conceito de estruturação de um sistema. Um bloco contém um conjunto de processos, como visto na figura 1.0. Os processos são conectados uns aos outros e com as bordas do bloco que os contém através de rotas de sinais (signal route). Uma rota de sinal é obviamente por onde os sinais trocados entre os processos passam.
Um sistema contém um ou mais blocos conectados uns com os outros e com as bordas do sistema através de canais (channel). Novamente os canais são os meios por onde passam os sinais e são análogos às rotas de sinais entre os processos.
Figura 1.2 Blocos, processos, canais e rotas de sinais
Os blocos podem ser estruturados em blocos de mais baixo nível. Assim, pode-se estruturar o sistemas agrupando blocos de similar complexidade em um mesmo nível. O sistema como um todo pode ser visto como um bloco que não possui nenhum canal externo conectado a si. Fazendo-se tal estruturação temos uma árvore de blocos, sendo o sistema a raiz da árvore, e os processos as folhas. O conceito de blocos permite assim que a complexidade do sistema possa ser substancialmente diminuída.
Figura 1.3 Os blocos em uma especificação de sistema
Pode-se dizer então que uma especificação em SDL possue três principais componentes:
Em SDL foi escolhida a proposta dos tipo abstratos de dados. Isso significa que todo tipo de dado, pré-definido ou definido pelo usuário, é construído de forma independente de implementação, apenas em termos de suas propriedades. Tipos de dados em SDL são chamados de sorts, de forma a não serem confundidos com o "conceito" de tipos abstratos de dados. Um tipo de dado abstrato é um conjunto de sorts, que são interrelacionados através de operações que usem valores de diferentes sorts.
A maior parte das linguagens formais possui apenas uma representação textual, enquanto que SDL possui também uma representação gráfica. Nesta representação gráfica, uma sintaxe gráfica é usada para dar uma visão geral do sistema, enquanto a sintaxe textual serve para complementar conceitos para os quais não existem símbolos gráficos.