Especificação
de blocos
3.2 Sintaxe gráfica e textual de um bloco
3.4 Definição das rotas de sinais
3.5 Conectando rotas de sinas com canais
Uma especificação a nível de blocos descreve um conjunto de processos que interagem entre si e com canais do sistema que contém o bloco, tudo isso através de rotas de sinais. Essa interação é alcançada novamente através da troca de sinais. Dentro de uma rota de sinais, diferentemente dos canais, os sinais não sofrem atraso e sua ordem é preservada. As rotas de sinais comunicam processos mas também podem lidar com as bordas de um bloco, onde as rotas são conectadas então aos canais da especificação. Isto distingue a especificação de um bloco da especificação de um sistema.
Como na especificação do sistema aqui novamente a comportamento dinâmico do bloco não é alcançado de forma direta mas sim derivado do comportamento dos processos contidos no bloco.
Os blocos possuem uma sintaxe gráfica e textual muito similar à sintaxe da especificação.
| Sintaxe gráfica:
|
Sintaxe textual:
block <nome do bloco>; <declarações> <processos> endblock [<nome do bloco>]; |
Na representação gráfica, os processos são apresentados através do símbolo de processo que contém seu nome. A definição dos processos de um bloco, novamente, é muito semelhante a definição dos blocos de um sistema.
| Sintaxe gráfica:
|
| Sintaxe textual:
process <nome do processo> referenced; |
Uma rota de sinais pode ser tanto uni quanto bi-direcional. O nome dos sinais que podem passar por determinada rota são apresentados na lista de sinais associadas com cada direção da rota. Desta forma para rotas de sinais bi-direcionais temos duas listas de sinais, uma para cada sentido.
| Sintaxe gráfica:
|
Sintaxe textual:
signalroute <nome da rota> from {<nome do processo> | env} to {<nome do processo> | env} with <lista de sinais>; [from {<nome do processo> | env} to {<nome do processo> | env} with <lista de sinais>;] |
Aqui, temos novamente a presença da expressão env. Enquanto que na especificação do sistema env era o meio pelo qual os canais de comunicavam com o ambiente, na definição dos blocos env é o meio pelo qual as rotas de sinais comunicacam-se com os canais da especificação.
Para definirmos uma conexão rota de sinais/canal temos a seguinte sintaxe gráfica:
connect <nome do canal> and <nome da rota> {,<nome da rota>}*;
Pela sintaxe podemos observar que é possível conectar em um mesmo canal mais de uma rota de sinal. Isso é válido porque dentro de um bloco sinais que provem de um mesmo canal podem ser tratados por processos diferentes. A forma de levar esses sinais aos processos corretos é definindo-se rotas que vão de um mesmo canal aos processos desejados.
A sintaxe gráfica da conexão é novamente semelhante à sintaxe da definição dos canais. Basta conectar uma rota de sinais à borda do bloco. A única diferença reside no fato de que na borda do bloco deve ser indicado também a qual canal está conectada a rota.
O exemplo a seguir apresenta a definição do bloco Dialogue do sistema apresentado no capítulo anterior.
block Dialogue;
signal
Money, Release, Change, Accept, Avail, Unavail, Price,
Showtxt, Choice, Done, Flushed, Close, Filled;
process Coins referenced;
process Control referenced;
process Viewpoint referenced;
signalroute Plop
from env to Coins
with Coin_10, Coin_50, Coin_100, Coin_x;
signalroute Pong
from Coins to env
with Coin_10, Coin_50, Coin_100, Coin_x;
signalroute Cash
from Coins to Control
with Money, Avail, Unavail, Flushed, Filled;
from Control to Coins
with Accept, Release, Change, Close;
signalroute Comm
from Control to env with Exists, Paid, CoinErr;
from env to Control with Status, Complete, Maint;
signalroute Look
from Viewpoint to env
with Display1, Display2, Overpay, Empty;
from env to Viewpoint with Button;
connect Inp_C and Int, Look;
connect Sync and Comm;
connect Pay and Plop;
connect Flush and Pong;
endblock Dialogue;