С помощью атрибутов – процедур удобно задавать такие операции над объектами, которые могут инициироваться как самим объектом, так и извне его, т.е. другими объектами. Таким образом, можно описывать абстрактные типы данных с системой операций над ними. Рассмотрим в качестве примера описание класса точка, задающего точки, которые располагаются на плоскости. Причем каждая из них характеризуется координатами (Х,Y) и обладает способностью двигаться в вертикальном и горизонтальном направлениях [1].
ПРИМЕР 2.7
‘CLASS’ ТОЧКА (X,Y): ‘REAL’ X,Y;
‘BEGIN’
‘PROCEDURE’ ВПРАВО (S); ‘REAL’ S; X:=X+S;
‘PROCEDURE’ ВВЕРХ (H) ‘REAL’ H; Y:=Y+H;
‘END’;
Разместить на плоскости точки А и В с координатами (1,2) и (3,4) можно с помощью следующего фрагмента программы:
‘REF’ (ТОЧКА) А, В;
А:-‘NEW’ точка (1,2);
В:-‘NEW’ точка (3,4);
Сдвинуть точку А вправо на 7 единиц можно с помощью оператора А.ВПРАВО (7). А влево на 4 единицы – с помощью оператора А.ВПРАВО (-4). Если нужно поднять точку А на столько единиц, каково значение суммы координат точки В, то необходимо выполнить оператор А.ВВЕРХ (В,Х+В,У).
Далее приведена декларация класса вектор, построенная на основе декларации класса точка, которая определяет двумерные вектора с началом в точке (0,0) и операцию сложения векторов.
ПРИМЕР 2.8
ТОЧКА ‘CLASS’ ВЕКТОР;
‘BEGIN’
‘REF’ (ВЕКТОР) ‘PROCEDURE’ ПЛЮС (Р); ‘REF’ (ВЕКТОР) Р;
ПЛЮС:-‘NEW’ ВЕКТОР ( X+P, X ,Y+P, Y);
‘END’;
Иногда необходимо для всех атрибутов использовать дистанционные идентификаторы. Это удобно делать с помощью присоединяющего оператора. Наиболее употребительная форма присоединяющего оператора имеет вид:
‘INSPECT’ E ‘DO’ S;
где Е – объектное выражение, а S – оператор, в котором можно обращаться к атрибутам объекта Е непосредственно по их именам. Объект Е принято называть присоединенным объектом, а S – присоединяющим блоком.
С использованием данного оператора Пример 2.5 будет иметь вид:
‘INSPECT’ A1 ‘DO’
‘BEGIN’ LP:= LP+1000; LT:= LT+1000;
‘END’;
Если при присоединении к объекту нужно выполнять различные действия в зависимости от того, к какому классу принадлежит этот объект, то применяется другая форма присоединяющего оператора:
‘INSPECT’ E ‘WHEN’ A1 ‘DO’ S1
‘WHEN’ A2 ‘DO’ S2
……………………..
‘WHEN’ A2 ‘DO’ S2
где А1, А2, …, АК – идентификаторы классов, а S1, S2, …, SК - операторы, причем в Si (i=1,2,…,K) возможно непосредственное использование атрибутов объекта Е, заданных в декларации класса Аi, если У принадлежит классу (или одному из его подклассов), то исполняется оператор Si. После чего управление передается на оператор, следующий за всем присоединяющим оператором.
Состояние выполнения программы лучше всего можно описать структурой дерева, узлы которого являются экземплярами блоков с префиксами. Поддерево, «корнем» которого является экземпляр блока с префиксом, называется «квазипараллельной системой». Экземпляр блока с префиксом, включая экземпляры блоков, динамически вложенных в него, называется «главной программой» данной квазипараллельной системы.
С каждой квазипараллельной системой связан «уровень системы», т. е. количество экземпляров блоков с префиксами, объемлющих ее главную программу. Программа в целом является квазипараллельной системой с уровнем системы, равным нулю.
Квазипараллельная система состоит из «компонент» системы, каковыми являются главная программа и самостоятельные объекты (содержащие, разумеется, экземпляры блоков, динамически вложенные в такие объекты), для которых минимальным объемлющим экземпляром блока с префиксом является главная программа системы. Компоненты квазипараллельной системы по определению считаются «самостоятельными на» уровне данной квазипараллельной системы.
С любой компонентой системы связано «локальное управление» (ЛУ), а с каждой квазипараллельной системой в целом - «внешнее управление» (ВУ), Внешнее управление на уровне системы, равном нулю, совпадает с УП. ВУ некоторой квазипараллельной системы на уровне k (k>=1) совпадает с ЛУ той компоненты на (k - 1)-м уровне системы, которая объемлет данную систему.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.