Для каждого формального параметра требуется спецификация в совокупности спецификаций. Параметры считаются переменными, локальными в теле класса. Они получают первоначальные значения в соответствии с правилами передачи параметров (см. приложение). Вызов по наименованию параметров декларации класса не допускается.
Разрешаются следующие спецификации:
(тип), 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 * (b— a)* сумма
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. Структуры объектов
При употреблении префиксов необходимо соблюдать следующие ограничения:
· ни один класс не должен встречаться в своей собственной последовательности префиксов;
· класс может быть употреблен в качестве префикса лишь на том блочном уровне, где он декларирован.
Идентификатор системного класса, употребленный в качестве префикса, считается относящимся к некоей фиктивной декларации этого системного класса, якобы имеющейся в начале наименьшего объемлющего блока.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.