Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Акторный Пролог.pdf
Скачиваний:
37
Добавлен:
01.05.2014
Размер:
1.91 Mб
Скачать

28

Глава 4. СТРУКТУРА ПРОГРАММЫ

4.1Классы

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

определение класса =

class заголовок класса “:” атрибуты “[” предложения “]”

В языке используется одиночное наследование: у класса может быть не более одного непосредственного предка и неограниченное число потомков. Имя непосредственного предка указывается в определении после имени класса:

заголовок класса =

имя класса [ specializing имя класса ] имя класса = символ в апострофах

В иерархии наследования классов, используемых проектом, запрещены циклические зависимости.

Примечание. Неаккуратное (взаимно-) рекурсивное использование классов может приводить к бесконечному увеличению количества миров в ходе формирования экземпляров классов.

Пример. Правильно построенный класс.

class ’MyWindow’ specializing ’Report’: text color = ’Green’;

[

goal:– show,!.

]

Ссылки: атрибуты 4.1.1, имя класса 4.1, использование класса 4, мир 5.1, отсечение 8, предложение 6, проект 4.2, символ в апострофах 2.1.2, формирование миров 5.4.1, class 2.1.2, goal 5.4.1, specializing 2.1.2.

4.1.1Атрибуты классов

Атрибутами называются имена слотов экземпляра класса, определяемые в составе класса. Каждый атрибут должен быть объявлен во всех классах, связанных отношением наследования, в которых используется

4.1. КЛАССЫ

29

соответствующий слот. Область действия атрибута распространяется на инициализаторы слотов в определении атрибутов класса, а также на все предложения класса.

атрибуты = { определение атрибута “;” } определение атрибута =

[ описатель порта “:” ] атрибут [ “=” инициализатор ] описатель порта = suspending | protecting

атрибут = простой символ

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

Атрибут self — предопределённый, он обозначает непосредственно тот экземпляр класса, в котором это имя используется.

Повторное определение атрибутов класса (в том числе переопределение атрибута self) считается синтаксической ошибкой.

Пример. Правильно определённые атрибуты класса:

a = Y;

e = (’Q’,x=’+’(a,f),m=self,k=e);

b;

f = ’ ’(Y,7);

c = ’f’(

 

,[3,7],Y,a);

d = [ ];

 

g =

 

;

 

 

h = {x:1,y:Y,z:R|

 

};

 

 

i = [0,

 

,j|R];

j = a;

 

Ссылки: инициализатор 4.1.2, класс 4.1, мир 5.1, переменная 2.1.1, предложение 6, простой символ 2.1.2, слот 5.1, protecting 2.1.2, suspending 2.1.2.

4.1.2Инициализаторы слотов

Инициализатором слота называется синтаксическая конструкция, определяющая начальное значение слота:

инициализатор = терм | конструктор

Ссылки: конструктор 4.1.3, начальное значение слота 5.4.2, слот 5.1, терм 3.

30

Глава 4. СТРУКТУРА ПРОГРАММЫ

4.1.3Конструкторы

Конструктором называется утверждение о существовании экземпляра класса или резидента. В результате доказательства конструкторов происходит построение новых экземпляров классов и резидентов.

Различаются конструкторы миров (а именно простые конструкторы и конструкторы процессов), а также конструкторы резидентов.

конструктор = конструктор мира | конструктор резидента конструктор мира =

простой конструктор | конструктор процесса

Простым конструктором называется элементарное логическое утверждение о существовании экземпляра класса.

простой конструктор = “(” имя класса { “,” определение атрибута } “)”

Конструктор процесса — это утверждение о существовании процесса. Доказательство конструктора процесса приводит к созданию нового процесса.

конструктор процесса = “(” простой конструктор “)”

Аргументы конструктора мира определяют значения слотов соответствующего экземпляра класса (значения слотов процесса).

Отсутствие инициализатора в определении некоторого атрибута конструктора с именем Name является допустимым только в том случае, если рассматриваемый конструктор экземпляра класса находится в области действия слота с именем Name. Такое определение атрибута эквивалентно определению вида «Name=Name».

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

Конструктором резидента называется синтаксическая конструкция, определяющая резидента. Конструктор резидента определяет целевые миры резидента и соответствующую резиденту атомарную формулу. Доказательство конструктора резидента приводит к созданию нового резидента.

конструктор резидента = [ параметр или конструктор ] “??” простой атом