- •Алфавит языка
- •Лексика
- •Лексемы
- •Переменные
- •Символы и ключевые слова
- •Числовые литералы
- •Сегменты строк
- •Ограничители
- •Комментарии
- •Определение данных
- •Простые термы
- •Составные термы
- •Структуры
- •Списки
- •Недоопределённые множества
- •Унификация термов
- •Структура программы
- •Классы
- •Атрибуты классов
- •Инициализаторы слотов
- •Конструкторы
- •Проект
- •Пакеты
- •Трансляция исходных файлов
- •Структура пространства поиска
- •Экземпляры классов
- •Процессы
- •Состояния процесса
- •Порты процессов
- •Резиденты
- •Построение пространства поиска
- •Исполнение конструкторов
- •Построение слотов
- •Предложения классов
- •Атомарные формулы
- •Простые атомы
- •Бинарные отношения
- •Объявления функций
- •Подцели предложений
- •Вызовы функций
- •Выражения
- •Стратегия управления
- •Исполнение вызова предиката
- •Исполнение предложения
- •Механизм задержки исполнения
- •Откат программы
- •Акторы и повторные доказательства
- •Акторы
- •Общие переменные
- •Построение общих переменных
- •Согласование акторов процесса
- •Сопоставление локальных значений
- •Исполнение повторных доказательств
- •Согласование процессов
- •Классификация сообщений
- •Прямые сообщения
- •Потоковые сообщения
- •Исключительные ситуации
- •Встроенные предикаты и операторы
- •Корректное разрушающее присваивание
- •Актуализация производных значений
- •Сводка синтаксиса
- •Свойства, зависящие от реализации
- •Термины и определения
- •Список понятий языка
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.
Конструктором резидента называется синтаксическая конструкция, определяющая резидента. Конструктор резидента определяет целевые миры резидента и соответствующую резиденту атомарную формулу. Доказательство конструктора резидента приводит к созданию нового резидента.
конструктор резидента = [ параметр или конструктор ] “??” простой атом