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

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

Разрешаются следующие спецификации:

(тип), array и  (тип)  array.

Атрибуты, определенные в совокупности виртуальных, называются «виртуальными величинами». Они не должны встречаться в списке формальных параметров.

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

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

Пример.

Следующая декларация класса описывает интегрирование по Гауссу с п абсциссами как составное понятие:

class Гаусс (п); integer п;

        begin

         array W, X [1 : n];

          real  procedure интеграл  (F, a, b)

real procedure F: real a,b;

              begin real сумма; integer i;

                for i: = 1 step 1 until n do

сумма: = сумма+ F(a + 0.5*(b — a)* (x[i]+1))*W[i];

интеграл := 0.5 * (ba)* сумма

endинтеграл;

commentвычисление   значений   элементов   массивов   Wи Xкак функций от n;      

…………………………………………………………………………….……

         еndГаусс;

Оптимальные веса Wи абсциссы Xмогут быть вычислены как функции от п. Поскольку алгоритм вычисления Wи Xявляется частью тела класса, вычисление и присваивание этих значений может выполняться в момент порождения объекта. Могут сосуществовать несколько объектов класса Гаусс с различными значениями n. Каждый такой объект имеет локальную процедуру интеграл для вычисления интеграла по соответствующей формуле с п абсциссами.

Подклассы

Декларация   класса  с  префиксом   С  и  идентификатором   класса   Dопределяет   некоторый   подкласс   Dкласса   С. Объект, принадлежащий к этому подклассу, состоит из «префиксной  части»,   которая  сама  по  себе  является  объектом класса С, и   из   «ядра»,   описываемого   ядром   декларации класса. Эти две части «сочленяются» в один составной объект,  Класс С сам может иметь префикс.

Пусть С1, С2... , Сп  суть классы, причем С1 не имеет префикса, а Сkимеет префикс Ck-1 (k= 2, 3,..., п). Тогда С1, С2 ,..., Ck-1называются последовательностью префиксов для Ck(k = 2,3, ..., ft).  Индекс k у Ck   (k= 1, 2, .., n)   называется  «префиксальным  уровнем»  класса   Сk.   Говорят,  что , класс Ciобъемлет класс Cj (или что класс Cj содержится в классе Сi), если i<=j, и   класс Cj  называется   подклассом класса Сi , если i>j (i,j = 1,2, ..., n). Считается, что префиксальный уровень класса D «выше» префиксального уровня класса С, если Dявляется подклассом класса С.

Ниже на рис. 6.1 и 6.2  графически представлены иерархия классов и структура объектов, принадлежащих к каждому из них:

class A … ;

A class B … ;

B class C … ;

B class D … ;

A classE … ;

 


Рис.6.1 Иерархия классов

A              B             C              D            E 

 


Рис.6.2. Структуры объектов

При  употреблении префиксов необходимо соблюдать следующие ограничения:

·  ни один класс не должен   встречаться   в   своей   собственной последовательности префиксов;

·  класс   может   быть  употреблен   в   качестве   префикса лишь на том блочном уровне, где он декларирован.

Идентификатор системного класса, употребленный в качестве префикса, считается относящимся к некоей фиктивной декларации этого системного класса, якобы имеющейся в начале наименьшего объемлющего блока.