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

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

На любой оператор перехода накладывается следующее ограничение: он может передавать управление только в точку программы внутри какого-нибудь работающего экземпляра блока. Из этого ограничения следует, что оператор перехода, передающий управление из самостоятельного объекта, означает также выход из минимального объемлющего блока с префиксом.

Обработка упорядоченных множеств

Для обработки упорядоченных множеств в языке СИМУЛА существует специальный системный класс SIMSET. Рассмотрим этот класс.

Класс SIMSET содержит средства обработки циклических двунаправленных списков, которые называются наборами.

Ссылочные переменные и процедуры, необходимые для манипулирования с наборами, вводятся в стандартных классах, декларированных внутри класса SIMSET, используя эти классы в качестве префиксов. Можно включать соответствующие данные и другие свойства в сами объекты.

Наборы и объекты, которые могут становиться членами наборов, должны иметь ссылки на преемника и предшественника. Поэтому они сделаны объектами подклассов класса LINKAGE.

Наборы представлены объектами, принадлежащими подклассу HEAD класса LINKAGE. Объекты, которые могут быть членами наборов, принадлежат к подклассам класса LINK, который в свою очередь сам является другим подклассом класса LINKAGE.

Переменная SUC является ссылкой на преемника (SUCCESSOR) данного объекта (класса LINKAGE) в наборе, а переменная PRED является ссылкой на предшественника (PREDECESSOR). Значение ссылок SUC  и PRED можно получить посредством процедур SUC  и PRED, эти процедуры доставляют значение ‘NONE’,  если указанный объект не может быть членом никакого набора (т.е. не принадлежит ни к классу LINK, ни к подклассу этого класса).

Атрибуты SUC  и PRED можно модифицировать только посредством процедур, определенных внутри классов LINK и HEAD, это помогает пользователю избежать некоторых ошибок при программировании.

Объекты, принадлежащие к подклассам класса LINK, могут становиться членами наборов. В каждый данный момент объект может быть членом только одного набора.

В дополнении к процедурам SUC  и PRED  имеются еще четыре процедуры,  связанные с каждым объектом класса LINK:

OUT, FOLLOW, PREORE И INTO.

Процедура OUT удаляет объект из набора, членом которого он является (если объект имеет членство в наборе). Если объект не состоит ни в каком наборе, то вызов процедуры OUT не влечет за собой никаких последствий.

Процедуры  FOLLOW и PREORE  удаляют объект из набора, членом которого он является (если объект имеет членство в наборе), и вставляют его в некоторый набор в указанную позицию. Набор и позиция задаются параметром типа REF (LINKAGE). Если этот параметр имеет значение 'NONE’, или не имеет членства в наборе, или не является головой набора, то вызов процедур FOLLOW и PREORE имеет тот же эффект, что и вызов OUT, в противном случае объект включается непосредственно вслед за или непосредственно перед тем объектом класса LINKAGE, на который указывает параметр.

Процедура INTO, которая имеет параметр типа REF (HEAD), удаляет объект из набора, членом которого он является, и включает его в качестве последнего члена в набор, указанный параметром.

Определение класса HEAD.

Объект класса HEAD или подкласса класса HEAD служит для представления набора. Процедуру FIRST можно использовать для того, чтобы получить ссылку на первый член набора, а процедуру LAST – на последний. Логическая процедура EMPTY доставляет значение ‘TRUE’, если набор не имеет членов. Значением процедуры CARDINAL является количество членов набора, процедурой CLEAR можно воспользоваться для удаления всех членов из набора.