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

x [nb]:= “n”;

if  х[n1]=”0”   then  x [nb]:=”1”;

if  х[n1]=”1”  then   x [nb]:=”0”;

end инвертор;

Классы автомат и инвертор можно описать не пользуясь префиксом класса элемент. Но тогда необходимо описывать правила действия класса элемент.

Виртуальные величины

Виртуальные величины служат двоякой цели:

·  дать возможность обращения  на  одном   префиксальном  уровне некоторого объекта  к атрибутам, объявленным на более высоком префиксальном уровне;

·  позволить, декларировать атрибут заново на некотором префиксальном уровне так, чтобы эта новая декларация была действительна на более низком префиксальном уровне.

          В совокупности виртуальных допускаются следующие спецификации:

label, switch, procedure и (тип) procedure.

Виртуальная величина некоторого объекта может быть или «холостой» (т.е. «без подходящего к ней атрибута»), или отождествляться с некоторым  подходящим» атрибутом, каковым является атрибут, декларированный на не менее низком префиксальном уровне, чем уровень данной виртуальной величины, и имеющий идентификатор, совпадающий с идентификатором виртуальной величины. Подходящий атрибут должен быть того же самого рода, что и данная виртуальная величина. Тип подходящей процедуры должен совпадать или быть подчиненным типу данной виртуальной процедуры и типу любой подходящей процедуры, декларированной на более низких префиксальных уровнях.

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

Пример.

В следующем классе, выражающем понятие «расстановка», алгоритм «оценка» (функция расстановки) является «сменной частью».

     class расстановка (n);

       integer n;

       virtual: integer procedure оценка;

         begin

           integer procedure оценка (T);

           value T; text T;

              begin

                  integer i;

                     L: if  T . more then

                      begin

                       i : = i + rank (T. getchar);

                        go to L;

                      end;

                     оценка : = i - ([i/ n] * n)

              end оценка ;

       text array табл [0:n -1];

       integer procedure номер(T, стар);

       name стар;

       value T; Boolean стар; text T;

         begin

            integer i;

                   i : = оценка (Т);

               стар: = false;

        L : if  табл [i].length = 0 then

              табл[i] : — T

              else

                 if табл [i] = T then стар: = true

                 else  i := i + 1;

              if  i=n then i :=  0; go to L  

         end;

      номер : = i

    end номер

   end расстановка ;    

   расстановка class АЛГОЛоценка;

     begin

       integer procedure оценка (T); value T; text T;

         begin

            integer i;

             character С;         L : if  T . more  then

                begin

                    С: = T. getchar;

                    if   С = "_''  then

                     i : = i + rank (T . getchar);

                     go to L;

                end;     

           оценка : = i - ([i/ n] * n);

        end оценка;

    end АЛГОЛ оценка;

Объекты. Создание и средства доступа к атрибутам объекта

Создание объекта класса А3 должно задаваться генератором вида

‘NEW’ А3 (Р1, Р2, Р3);

Ссылочная переменная лил процедура – функция типа

‘REF’ (<КВАЛИФИКАЦИЯ>)

может указывать не только на объекты класса, который указан в квалификации, но и на объекты любого из его подклассов.