Pro popis třídy objektů s vlastním dynamickým chováním je
v SIMLIB definována abstraktní třída Process
. Každá třída, která
zdědí třídu Process, musí specifikovat chování objektů této
třídy v čase. Chování se popisuje v metodě Behavior
posloupností
příkazů. Základní struktura popisu třídy je uvedena v příkladu:
class Zakaznik : public Process { <atributy zákazníka> void Behavior() { <příkazy popisující chování objektu v čase> } public: Zakaznik(<parametry>) { <inicializace atributů> } ~Zakaznik(<parametry>) { <rušení atributů> } };
Popis chování objektů v metodě Behavior
připomíná popis procedury, může však,
na rozdíl od ní, obsahovat i příkazy, které způsobují čekání. To znamená, že
popis chování je v modelovém čase na určitou dobu
přerušitelný. Po aktivaci objektu se začne provádět posloupnost operací v
metodě Behavior
stejně, jako při provádění obvyklé procedury. V okamžiku, kdy
se narazí v tomto popisu činnosti objektu na příkaz, který představuje
čekání, je provádění příkazů pozastaveno. Pokud proces čeká, mohou běžet
ostatní procesy.
Příkaz Wait
použitý v popisu chování objektu provádí potlačení
činnosti objektu na určitou dobu (tato činnost odpovídá čekání
objektu). Příkaz má tvar:
Wait( <aritmetický výraz> );
Hodnota výrazu udává dobu, po kterou bude pozastavena aktivní činnost objektu. Jestliže tedy objekt O v modelovém čase t provede příkaz Wait(d) ve svém popisu chování, pak se stane po dobu d pasivním a příští aktivace (obnovení činnosti) nastane v modelovém čase t + d. Okamžik t + d budeme nazývat reaktivačním okamžikem procesu nebo také kritickým okamžikem procesu.
Příští kritický okamžik je skrytým atributem každého objektu.
Čas příštího kritického okamžiku je stanoven buď explicitně
příkazem Wait(d)
(pak je roven Time + d
,
kde Time
je
aktuální hodnota modelového času), nebo implicitně příkazem
WaitUntil(B)
(pak je roven nejbližší hodnotě modelového času,
ve kterém se predikát B stane pravdivým).
Každý objekt je charakterizován třídou, svým stavem a identitou (například jménem). V průběhu simulace může objekt vzniknout, zaniknout, může být právě aktivní a nebo může čekat (pasivní stav procesu) na určitou událost nebo na určitý stav modelu.
Po vzniku je objekt v neaktivním stavu. Odstartování procesu
(jeho aktivace) se provede metodou Activate
. Objekt se může sám
aktivovat tím způsobem, že provede svou aktivaci jako akci
v konstruktoru. Poznamenejme, že k aktivaci nového objektu může
dojít až po přerušení právě probíhajícího procesu.
Po provedení posledního příkazu v popisu chování objektu tento objekt automaticky zaniká. Zánik objektu lze případně kontrolovat tím, že definujeme destruktor s požadovanými operacemi.