Animador de <em>Petri Nets</em>



next up previous contents
Next: O Interpretador de Up: O Controlador de Previous: Protocolos de Comunicação

Animador de Petri Nets

Sendo o comportamento dos Guiões de Interacção modelado por Petri Nets, o Controlador de Diálogo foi desenvolvido sobre um animador dessas redes que aqui se apresenta.

No desenvolvimento de qualquer sistema software, está sempre presente a necessidade de estabelecer um compromisso entre a complexidade das estruturas de dados e a dos algoritmos. No caso presente optou-se por simplificar as Petri Nets, passando alguma da informação especificada nas redes do Capítulo 5 para a alçada do controlador de diálogo. Deste modo, toda a informação referente às cláusulas TRANS não é incluida na definição da rede, sendo da responsabilidade do Controlador o seu tratamento. A rede referente à expressão

gi(var)
não necessita, deste modo, de duas transições para end (ver fig. 13) passando a existir apenas a referente à situação em que se verificam as condições de TRANS. Quando o Controlador detecta que essas condições não se verificam, substitui o evento end por um cancel e executa as acções de EXCEP. Deste modo o comportamento do sistema é idêntico. Também as condições de CONTEXT não são incluídas. O animador da rede invoca uma operação do Controlador que faz a sua verificação. Deste modo consegue-se, por um lado simplificar o animador das redes e a geração das mesmas e, por outro, optimizar a partilha de informação. Na versão original das redes, seria fácil termos as mesmas condições e instruções repetidas em várias transições. Deste modo a informação está centralizada nas definições dos Guiões.

Formalmente as rede utilizadas podem ser modeladas da seguinte forma:

  PetriNet :: B : Case
              Ev: Events
              Fi: Flow
              Fo: Flow
              Cb: Case
              Ce: Case;
  Conditions = CId -> Bool;
  Events = Event-set;
  Event = StartEvent | CancelEvent | EndEvent | CmdEvent | 
          NilEvent;
  StartEvent :: DREF: EvId;                 
  CancelEvent :: DREF: EvId;
  EndEvent :: DREF: EvId;
  CmdEvent :: DREF: CmdId;
  NilEvent :: DREF: STR;
  Flow = Event -> Case;
  Case = CId-set;

B é o conjunto de todos os lugares da rede, Ev é o conjunto de todas as transições, Fi e Fo são os fluxos de entrada e saída dessas transições (de que lugares retiram tokens e em que lugares os colocam) e Cb e Ce são as marcações inicial e final, respectivamente. Como a definição da Petri Net será partilhada por todas as instâncias de um Guião ela não inclui a marcação actual, devendo cada instância conservar a sua.

A utilização do animador é feita por meio das seguintes funções:

startpn: PetriNet InstId Conditions
que inicializa a rede cuja descrição lhe é passada como parâmetro, devolvendo a marcação daí resultante. A necessidade de indicar a instância prende-se com a verificação das condições necessárias para que as transições se possam efectuar;
firepn: PetriNet Conditions Event InstId Conditions
que implementa o disparo de uma transição. Neste caso é passada a descrição da rede, a marcação actual, qual o evento e a instância, sendo devolvida a marcação resultante da transição, e
endpn: PetriNet Conditions Bool
que serve para verificar se uma dada marcação é a marcação final da rede referida.

Adicionalmente existe a função:

valideventspn: PetriNet Conditions InstId Event-set
para calcular todos os eventos possíveis para uma dada marcação da rede.



next up previous contents
Next: O Interpretador de Up: O Controlador de Previous: Protocolos de Comunicação



Jose Franscisco Creissac Campos
Wed Jan 31 20:30:35 MET 1996