СИМУЛА является универсальным языком программирования, разработанным в Норвежском вычислительном центре [1]. Важным свойством языка является то, что он может быть легко ориентирован на специальные области задач и поэтому служить базой для разработки специализированных языков, в частности, для разработки процессо-ориентированного языка моделирования.
Язык СИМУЛА содержит в качестве своего подмножества почти все средства универсального алгоритмического языка АЛГОЛ-60, который являлся также основой языка ПАСКАЛЬ.
Наиболее широко СИМУЛА используется для решения задач имитационного моделирования сложных систем. Средства моделирования, ориентированные на представление системы в виде совокупности процессов определены в системных классах языка СИМУЛА.
Центральными понятиями языка СИМУЛА являются «объект» и «класс».
Чтобы понять понятия класса и объекта, рассмотрим следующую систему. В открытом карьере по добыче руды работают два экскаватора с разной производительностью (количество тонн руды, загружаемой в единицу времени). Через некоторые промежутки времени порожние самосвалы с некоторой грузоподъемностью и средней скоростью въезжают в карьер. До экскаваторов необходимо преодолеть некоторое расстояние по верхней дороге. Далее самосвалы загружаются и покидают карьер по другой дороге, имеющей некоторую протяженность. Необходимо определить производительность карьера за смену (8 часов), загруженность каждого из экскаваторов и среднее время нахождения самосвалов в карьере.
В данной системе можно выделить следующие объекты: самосвалы и экскаваторы. Причем описания (переменные) и правила действий (поведение) каждого из самосвалов и каждого из экскаваторов в карьере идентичны. Они отличаются только значениями переменных.
Самосвал описывается следующими внешними переменными:
грузоподъемность и средняя скорость. Для того чтобы вычислить среднее время нахождения самосвалов в карьере необходимо знать время нахождения каждого самосвала (т.е. разность между временем выезда из карьера и временем появления в карьере). Это внутренние переменные самосвала (они отличаются для каждого самосвала).
Правила действий в карьере каждого из самосвалов следующие: самосвал преодолевает верхнюю дорогу и встает на стоянку для загрузки. Он ждет загрузки (в очереди), загружается и покидает карьер по другой дороге. Каждый самосвал в карьере выполняет только такие действия.
Экскаватор описывается производительностью (внешняя переменная). Для определения загруженности каждого из экскаваторов необходимо знать время работы экскаватора за смену (или простой экскаватора). Причем простой складывается из квантов простоя, т.е. необходимо знать каждый из этих квантов времени (время конца простоя минус время начала простоя). Это внутренние переменные каждого из экскаваторов.
Правила действий экскаватора: если на стоянке есть порожний самосвал, то он загружает его за некоторое время (это время определяется как отношение грузоподъемности самосвала к производительности экскаватора). Загруженный самосвал уезжает от экскаватора. Если стояка пуста, то экскаватор переходит в состояние простоя (начало простоя). В состояние работа экскаватор перейдет при появлении на стоянке пустого самосвала (конец простоя экскаватора). Каждый экскаватор выполняет в карьере только такие действия.
Все самосвалы и все экскаваторы можно объединить в класс самосвалов и в класс экскаваторов. Причем каждый объект класса отличается только значениями переменных (данными).
Объект - это экземпляр программного блока (класса), имеющий свои собственные локальные данные и действия, описанные в «декларации класса». Декларация класса определяет образец программы (т.е. ее данные и действия), поэтому об объектах, следующих этому образцу, говорят, что «они принадлежат к одному и тому же классу».
Пример описания декларации класса «самосвал»:
classсамосвал(грузоподъемность, средняя скорость);
integer грузоподъемность;
real средняя скорость;
begin
real время появления в карьере,
время нахождения в карьере;
«правила действия самосвала»
endописания класса самосвал;
Пример описания декларации класса «экскаватор»:
class экскаватор(производительность);
integerпроизводительность;
begin
real время общего простоя экскаватора,
время начала простоя экскаватора;
«правила действия экскаватора»
end описания класса экскаватора;
Если в декларации класса не указано никаких действий, то такая декларация определяет просто класс структур данных.
Пример:
classзаказ (номер);
integer номер;
begin
integer количество, время прибытия;
realвремя, обработки;
end;
Класс можно использовать в качестве «префикса» к декларации другого класса; тем самым свойства, заданные префиксом, будут внесены в объекты, задаваемые новой декларацией класса.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.