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

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

·  Тело   класса   сочлененной   декларации получается  из тела   ядра    (в   предположении,   что    тело    префикс-класса является расщепленным) следующим образом. Символ begin начала блока заменяется копией начала блока тела префикс-класса; вслед за началом блока ядра вставляется копия начальных действий тела префикс-класса; символ end, замыкающий ядро, заменяется копией конца составного, которым оканчивается расщепленное тело префикс-класса. Если же тело префикс-класса не является расщепленным, то оно интерпретируется так, как если бы перед замыкающим его символом endбыли вставлены символы inner.

Если в получившемся таким образом теле класса оказались две декларации для одной виртуальной величины, то та из них, которая возникла при копировании из тела префикс-класса, удаляется. Декларацией метки является ее вхождение в блок в качестве метки некоторого оператора.

Пример 1.

class    точка (х, у);

real х, у;

begin

ref (точка) procedure плюс (Р);

ref(точка) Р;

плюс: — new точка (х + Р.х, у + Р.у);

endточка;

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

точкаclass поляр;

                   begin

                      real r, v ;

ref (поляр) procedure плюс (Р);

ref (точка) Р;

            плюс : — new поляр (х + Р .х, у + Р .у);

r: = sqrt (x**2 + y**2);

v : = arctg (x, у)

end поляр;

Объект класса поляр — это объект точка с дополнительными атрибутами rи vи с заново определенной операцией плюс. Значения переменных rи vвычисляются и присваиваются этим переменным во время порождения объекта, (arctg — это нелокальная процедура).

Пример 2.

Пусть необходимо описать алгоритм работы некоторой серии микросхем, каждая их микросхем имеет свой алгоритм работы, но и некоторые общие свойства. Опишем класс элемент, являющийся подклассом некоторого системного класса process (см. далее). Параметры класса элемент являются количество входов (квх) и выходов микросхемы (квых). Данный класс описывает символьный массив размерности квх+квых и переходит в пассивное состояние (см. далее), затем должны выполняться правила действий конкретного элемента. И элемент переходит в пассивное состояние до новой активизации. После чего правила действий конкретного элемента повторяются:

process class элемент (квх, квых);

integer  квх, квых;

begin

character  array  х [1; квх+квых];

passivate;

работа: inner;

         passivate;

         go toработа;

end элемент;

Все элементы делятся на два подкласса: комбинационные элементы (элементы без памяти) и элементы типа автомат (элементы с памятью).

Опишем класс автомат, являющийся подклассом элемент. В классе автомат мы должны запоминать предыдущее состояние и время изменения сигнала. Для этого в теле класса автомат определяется символьный массив xot размерности квх+квых и массив действительных чиселtизм размерности квх+квых. Далее идет описание правил действия (inner). После чего запоминается старый сигнал и время его изменения.

элемент class автомат;

begin

character   array  хot [1; квх+квых];

real array  tизм [1;квх+квых];

inner;

for i:=1 step 1 until квх+квых

do

if хот [i]  ne  x [i]   then

begin

                          xot [i]:= x [i];

                tизм [i]:= time;

end

end  автомат;

Комбинационный элемент инвертор можно описать следующим образом:

элемент  class  инвертор;

begin

      integer  n1, nb;

n1:=01; nb:=02;