5.4 Построение пространства поиска
Построение пространства поиска осуществляется в результате
доказательства конструкторов экземпляров классов и реализуется посредством
построения новых экземпляров классов.
Последовательность действий, создающих пространство
поиска и слоты отдельного экземпляра класса, называется «формированием» экземпляра класса.
Построение экземпляра класса (создание нового экземпляра класса) включает следующие этапы:
1.Формирование экземпляра класса.
2.Доказательство предикатов goal() во всех сформированных на первом этапе мирах.
Этапы формирования экземпляра класса и доказательства
предикатов goal не зависят друг от друга и относятся к разным этапам построения
процесса. Выполнение этих операций осуществляется в соответствии со следующими
правилами:
1.При построении экземпляров классов используются копии определений
классов, отличающиеся от соответствующих определений классов тем,
что все переменные в составе определений атрибутов этих классов заменяются новыми
уникальными именами.
2.Каждая автоматически исполняемая подцель goal
объявляется актором.
3.Исполнение предикатов goal осуществляется в произвольном
порядке. При этом, однако, при равных прочих условиях, предикат goal в мире
В всегда доказывается раньше, чем в мире А, если мир В является вложенным по отношению к миру А.
5.4.1Исполнение конструкторов
Доказательство (исполнение) простого конструктора
приводит к формированию нового экземпляра заданного класса С и включает следующие
действия:
1.Построение пространства поиска экземпляра класса С.
В состав пространства поиска включаются предложения
самого класса С, затем (в соответствии с иерархией наследования) предложения
его непосредственного предка D, предложения непосредственного предка класса D
и так далее, пока не будет достигнут класс, не имеющий предка в иерархии наследования.
2.Построение слотов экземпляра класса.
Доказательство (исполнение) конструктора процесса приводит к
построению нового процесса. В результате доказательства конструктора процесса, новый
процесс устанавливается в состояние «объявленный». Исполнение конструктора процесса
не приводит к построению пространства поиска созданного процесса. Построение
соответствующего пространства поиска и слотов процесса осуществляется позже,
в ходе «формирования» процесса.
Формирование процесса вызывается процессом, который
является его создателем .
Формирование процесса включает следующие действия:
1.Доказывается простой конструктор, заданный в составе конструктора процесса.
2.Определяются порты процесса, в соответствии с описателями портов, заданными в
аргументах конструктора процесса и определениях соответствующих классов.
3.Проверяются текущие значения портов процесса и, в соответствии
с правилами переключения состояний процесса «используемый» и
«неиспользуемый» ,процесс переводится в состояние «используемый сформированный» или в состояние «неиспользуемый».
4.Процессу автоматически посылается инициализирующее потоковое сообщение.
В случае если формирование процесса заканчивается
аварийной ситуацией, вызывается встроенный обработчик ошибок.
Доказательство (исполнение) конструктора резидента приводит
к построению нового резидента. Доказательство конструктора резидента включает
следующие действия:
1.Переменная, созданная в качестве начального значения
слота процесса-владельца, инициализатором которого
является конструктор резидента, объявляется защищающим портом резидента.
2.Все остальные общие переменные, заданные в составе конструктора резидента,
объявляются простыми портами резидента.
3.Новый резидент начинает функционировать.
5.4.2Построение слотов
Одновременно с созданием каждого слота, если для него задан соответствующий инициализатор, создаётся его «начальное» значение:
• Значение терма, если инициализатором слота является терм или конструктор резидента.
• Некоторый мир, если инициализатором является конструктор мира.
• Значение другого слота, если инициализатором является атрибут.
В качестве инициализатора каждого создаваемого слота
используется значение соответствующего аргумента доказываемого конструктора или,
если аргумент не задан, инициализатор в определении класса. При этом инициализаторы,
заданные в определении любого класса С, отменяют («перекрывают») все инициализаторы
соответствующих атрибутов в определениях предков класса С.
Построение значения слота, инициализатором которого является конструктор,
вызывает доказательство этого конструктора.
Если инициализатором слота является конструктор резидента, создаётся специальная переменная,
общая для резидента и его владельца. Эта переменная становится начальным
значением слота процесса-владельца, инициализатором которого
является названный конструктор резидента.
Если инициализатором слота является конструктор резидента,
в составе которого задан некоторый конструктор мира, указанный
конструктор мира также доказывается.
Слоты, не имеющие инициализаторов, а также слоты,
(взаимно-) рекурсивно заданные в качестве своих собственных
инициализаторов, получают в качестве начальных значений уникальные общие переменные.
Все переменные, создаваемые в составе значений слотов, также являются общими.
Если в составе аргумента доказываемого
конструктора или в определении соответствующего класса некоторому атрибуту
приписан описатель порта, действие описателя распространяется на все общие
переменные в составе инициализатора соответствующего слота, исключая
конструкторы и вызовы функций, входящие в этот инициализатор.
Описатели портов, заданные в составе конструктора,
а также в определении соответствующих классов, перекрывают друг друга аналогично
тому, как осуществляется перекрытие инициализаторов слотов. Перекрытие описателей
портов происходит независимо от перекрытия инициализаторов слотов.
Пример.
Перекрытие инициализаторов слотов и описателей портов.
Рассмотрим определение некоторых классов С, 'D' и 'Е':
class 'E':
suspending: a = 21; protecting: b = 25;
[
goal.
]
class 'D' specializing 'E':
protecting: a = 7;
[]
class 'C specializing 'D':
b = 8;
[]
В результате доказательства простого конструктора
('С, а=Х) будет построен некоторый мир, значения слотов
которого а=Х, b=8. Переменная X будет объявлена защищающим портом.
Содержание