Especificação
do sistema
O SDL Básico se refere a porção central da linguagem, o que é suficiente para a especificação da maior parte das especificações SDL. Neste caso será considerado apenas um nível de blocos em uma especificação.
Tudo que for especificado em SDL fará obrigatoriamente parte do sistema. O sistema delimita parte do universo que será a especificação. Nesta seção apenas a parte mais abstrata de uma especificação será apresentada. Neste nível, uma visão bem abstrata do sistema é apresentada.
A especificação de um sistema descreve um conjunto de blocos que intagem entre si e com o ambiente do sistema através de canais. Essa interação é alcançada com o uso de sinais como mecanismo de comunicação. Dentro de um canal os sinais apresentam um atraso não-determinístico. Isso significa que uma especificação não pode influenciar no atraso de um sinal em um canal. Entretanto, é garantido que a ordem dos sinais nos canais é mantida.
Apesar de ser necessário especificar o comportamento dinâmico de uma sistema, isto não é feito neste nível. A especificação deste comportamente é alcançada indiretamente pela especificação dos processos dentro dos blocos. Apesar da descrição dinâmica estar escondida neste estágio da especificação, uma boa especificação é capaz de dar substanciais informações sobre o sistema neste nível.
Um sistema possui um nome que o identifica e que faz parte do cabeçalho do sistema na representação gráfica. A seguinte figura apresenta a sintaxe gráfica e textual da especificação no nível de sistema.
| Representação gráfica:
|
Representação textual:
system <nome do sistema> <declarações> <blocos> endsystem [<nome do sistema>]; |
As declarações em SDL são feitas na área de declarações dentro do símbolo de texto. Este pode ser colocado em diferentes localizações dentro do diagrama do sistema. A sintaxe das declarações dentro do símbolo de texto é idêntica à sintaxe da representação textual.
Sinais de determinado tipo podem ser usados em vários contextos dentro de uma especificação. Por exemplo, tais sinais podem ser enviados por diferentes processos para propósitos diferentes. A seguir temos a sintaxe da definição de sinais.
<signal specification> ::=
signal <signal name> [(<sort name> {,<sort name>}*)]
{ ,<signal name> [(<sort name> {,<sort name>}*)] }*;
Exemplo de especificação de sinais:
signal Coin_10, Coin_50, Coin_100, Choice, Overpay, Empty, Status(Boolean);
A interação entre os blocos se dá através dos canais do sistema. Para se definir quais blocos interagem no sistema usa-se a seguinte sintaxe dentro da especificação do sistema.
block <nome do bloco> referenced;
A sintaxe indica que o bloco <nome do bloco> pertence ao sistema corrente. A representação gráfica dos blocos pode ser vista na figura 1.3.
Canais em SDL podem ser tanto uni ou bidirecionais. O último caso é semelhante a termos dois canais unidirecionais. Os nomes dos sinais que podem trafegar nos canais ficam dentro da lista de sinais associada com cada direção de transporte. Para canais bidirecionais teremos então duas listas de sinais, uma para uma direção e outro para a direção oposta.
| Sintaxe gráfica:
|
Sintaxe textual:
channel <nome do canal> from {<nome do bloco> | env} to {<nome do bloco> | env} with <lista de sinais>; [from {<nome do bloco> | env} to {<nome do bloco> | env} with <lista de sinais>;] endchannel [<nome do canal>]; |
A expressão env representa o ambiente onde um canal pode estar conectado. Pelo menos umas das pontas de um canal deve estar conectada a um bloco. Se o canal for bidirecional, as duas direções, na sintaxe textual, devem ser complementares (por exemplo, from Dialogue to env; from env to Dialogue).
O seguinte exemplo mostra a especificação de um sistema em sintaxe tanto textual quanto gráfica. O sistema é uma máquina para venda de balas tofe que aceita certas interações e moedas do ambiente e então oferece ao ambiente como saída algum artigo. A especificação possui dois blocos que se comunicam entre si. Um bloco é de diálogo e outro um gerenciador de estado.
system Toffee_Vendor;
signal
Coin_10, Coin_50, Coin_100, Coin_x, Button, Undo,
Display1, Display2, Overpay, Empty, Status, Complete,
Maint, Exists, Paid, CoinErr, Toffer, Chocolate, Gum;
block Dialogue referenced;
block Ware_Mgr referenced;
channel Inp_C
from Dialogue to env
with Display1, Display2, Overpay, Empty;
from env to Dialogue
with Button, Undo;
endchannel Inp_C;
channel Pay
from env to Dialogue
with Coin_10, Coin_50, Coin_100, Coin_x;
endchannel Pay;
channel Flush
from Dialogue to env
with Coin_10, Coin_50, Coin_100, Coin_x;
endchannel Flush;
channel Sync
from Dialogue to Ware_Mgr
with Exists, Paid, CoinErr;
from Ware_mgr to Dialogue
with Status, Complete, Maint;
endchannel Sync;
channel Out_W
from Ware_Mgr to env
with Toffer, Chocolate, Gum;
endchannel Out_W;
endsystem Toffer_Vendor;