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: PetriNetque 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;InstId
Conditions
firepn: PetriNetque 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, eConditions
Event
InstId
Conditions
endpn: PetriNetque serve para verificar se uma dada marcação é a marcação final da rede referida.Conditions
Bool
Adicionalmente existe a função:
valideventspn: PetriNetpara calcular todos os eventos possíveis para uma dada marcação da rede.Conditions
InstId
Event-set