
- •Глава 6. Симула - универсальный процессо-ориентированный язык моделирования
- •Классы и объекты
- •Декларации класса
- •Подклассы
- •Объекты. Создание и средства доступа к атрибутам объекта
- •2.3. Средства доступа е атрибутам объектов
- •Квазипараллельное выполнение
- •Оператор detach (открепить)
- •Оператор resume (возобновить)
- •Выход через «end» объекта
- •Операторы перехода
- •Обработка упорядоченных множеств
- •Планирование процессов. Системный класс simulation
- •Статистические аспекты языка симула
- •Общая структура программы моделирования
- •Программное моделирование работы карьера
- •Описание классов
- •Текст программы
- •Ввод-вывод в симула
- •Понятие текста
- •Text array таблица [1:n];
- •Создание текстовых объектов
- •Процедуры работы с частью текста
- •Процедуры обработки текстов
- •Взаимное преобразование текстовых и арифметических значений
- •Сравнение текстов
- •Организация ввода – вывода
- •Процедуры ввода
- •Процедуры вывода
- •Контрольные вопросы и задания Литература
Квазипараллельное выполнение
Состояние выполнения программы лучше всего можно описать структурой дерева, узлы которого являются экземплярами блоков с префиксами. Поддерево, «корнем» которого является экземпляр блока с префиксом, называется «квазипараллельной системой». Экземпляр блока с префиксом, включая экземпляры блоков, динамически вложенных в него, называется «главной программой» данной квазипараллельной системы.
С каждой квазипараллельной системой связан «уровень системы», т. е. количество экземпляров блоков с префиксами, объемлющих ее главную программу. Программа в целом является квазипараллельной системой с уровнем системы, равным нулю.
Квазипараллельная система состоит из «компонент» системы, каковыми являются главная программа и самостоятельные объекты (содержащие, разумеется, экземпляры блоков, динамически вложенные в такие объекты), для которых минимальным объемлющим экземпляром блока с префиксом является главная программа системы. Компоненты квазипараллельной системы по определению считаются «самостоятельными на» уровне данной квазипараллельной системы.
С любой компонентой системы связано «локальное управление» (ЛУ), а с каждой квазипараллельной системой в целом - «внешнее управление» (ВУ), Внешнее управление на уровне системы, равном нулю, совпадает с УП. ВУ некоторой квазипараллельной системы на уровне k (k>=1) совпадает с ЛУ той компоненты на (k - 1)-м уровне системы, которая объемлет данную систему.
Для любой данной квазипараллельной системы в каждый данный момент одна и только одна из ее компонент является «активной». ЛУ этой компоненты совпадает с ВУ квазипараллельной системы.
Экземпляр блока с префиксом вначале активен, т. е. вначале ВУ его собственной квазипараллельной системы находится в нем самом. ВУ некоторой системы может переходить из компоненты в компоненту в результате действия некоторых операторов, которые будут описаны в последующих разделах. ЛУ некоторой компоненты, не содержащей ВУ, остается в той точке программы, в которой ВУ покинуло объект в последний раз.
В любой данный момент существует такая последовательность компонент систем 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 представляет собой ошибку.