4.1 Классы



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

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

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


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

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

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

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

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

class 'MyWindow' specializing 'Report':
text_color = 'Green';
[
goal:-
show,!.








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



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

атрибуты = { определение_атрибута ";'' }
определение_атрибута =
[ описатель_порта ":" ] атрибут [ "=" инициализатор ]
описатель_ порта = suspending | protecting
атрибут = простой_символ

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

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

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

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

а = Y;
b;
c='f'(_[3,7],Y,a);
g=_;
i = [0,_,j|R];
е = ('Q',x='+'(a,f),m=self,k=e);
f='*'(Y,7);
d = [];
h = {x:1,y:Y,z:R|_};
j = a;





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



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

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




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



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

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

конструктор = конструктор_мира | конструктор.резидента
конструктор_мира =
простой_конструктор | конструктор_процесса

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

"(" имя_класса { ",'' определение-атрибута } ")"

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

конструктор_процесса = "(" простой-конструктор ")"

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

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

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

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

конструктор-резидента =
[ параметр_или_конструктор ] "??" простой_атом
параметр_или_конструктор =
целевой_параметр | конструктор_мира
целевой_параметр = параметр

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

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

('R53',a=1,b=7,c=_,'d'), (('W',q=3)), ('E') ?? f(A)




Содержание