СИМУЛА - универсальный процессо-ориентированный язык моделирования, страница 9

Для любой данной квазипараллельной системы в каждый данный момент одна и только одна из ее компонент является «активной». ЛУ этой компоненты совпадает с ВУ квазипараллельной системы.

Экземпляр блока с префиксом вначале активен, т. е. вначале ВУ его собственной квазипараллельной системы находится в нем самом. ВУ некоторой системы может переходить из компоненты в компоненту в результате действия некоторых операторов, которые будут описаны в последующих разделах. ЛУ некоторой компоненты, не содержащей ВУ, остается в той точке программы, в которой ВУ покинуло объект в последний раз.

В любой данный момент существует такая последовательность компонент систем X1, Х2, ..., Хn, что:

·  Xk активна на уровне системы k  (k = 0, 1, ..., n);

·  Xk вложена в Xk-1 (k = 1,2, ..., n);

·  в Хn не вложено никакой квазипараллельной системы.

Эта последовательность называется «работающей цепочкой». Все компоненты системы в работающей цепочке содержат УП и поэтому называются работающими. ЛУ некоторой компоненты остается неподвижным до тех пор, пока эта компонента не станет членом работающей цепочки.

Оператор detach (открепить)

Пусть X — наименьший работающий экземпляр блока. Если X является прикрепленным объектом, оператор открепить производит следующие действия:

·  объект  становится   самостоятельным    (открепленным) на уровне   системы   наименьшего объемлющего   экземпляра блока с префиксом, а его ЛУ останавливается в конце оператора detach;

·  УП  возвращается  в  экземпляр   блока,  к  которому X был  прикреплен,  и возобновляет работу с оператора, стоящего вслед за генератором объектов, который вызвал порождение объекта X. Результатом вычисления выражения (генератор объектов) является ссылка на X.

Если X является самостоятельным объектом, являющимся компонентой некоторой квазипараллельной системы S, то оператор detach производит следующие действия:

·  ВУ системы S покидает X. В результате X удаляется из работающей цепочки, а его ЛУ останавливается в конце оператора detach;        

·  ВУ системы S входит в главную программу системы S на текущую позицию ее Л У.  В  результате главная  программа системы S и, возможно, компоненты систем на уровнях, более высоких, чем уровень S, станут работающими.

Если X есть экземпляр блока с префиксом, то оператор detach никаких действий не производит.

Если X есть экземпляр блока, но не объект и не экземпляр блока с префиксом, то использование оператора detach представляет собой ошибку.

Оператор resume (возобновить)

Оператор resume формально является процедурой с одним параметром типа ссылок на объект, квалифицированным некоторым фиктивным классом, объемлющим все классы.

Пусть фактический параметр оператора resume ссылается на некоторый самостоятельный объект Y, являющийся компонентой некоторой квазипараллельной системы S. Согласно правилам языка на Y можно сослаться только изнутри экземпляра блока (назовем его X), являющегося компонентой той же системы S или вложенного в некоторую компоненту этой системы. Экземпляр блока X является в данный момент работающим. Оператор resume производит следующие действия:

·  ВУ системы S покидает X. В результате сам X и все работающие компоненты на более высоких уровнях системы удаляются из работающей цепочки. ЛУ каждой компоненты останавливается в конце оператора resume;

·  ВУ системы S входит в  Y на  текущую позицию его ЛУ. В результате Y и, возможно, последовательность компонент  на   более  высоких  уровнях  системы  становятся   работающими.

Если фактический параметр оператора resume не ссылается на самостоятельный объект, то при выполнении оператора выдается сообщение об ошибке.

Выход через «end» объекта

Результат того, что УП выходит через замыкающий символ end объекта, совпадает с действием оператора detach с тем отличием, что объект становится завершенным (а не самостоятельным) и, таким образом, теряет свое ЛУ.

Операторы перехода