(make-instance <определение-объекта>)
(active-make-instance <определение-объекта>)
<определение-объекта>::= [<имя-объекта>] of
<имя-класса>
<переопределения-слотов>
<переопределение-слота>::= (<имя слота> <значение>)
В случае успеха функция make-instance возвращает имя только что созданного объекта, в противном случае возвращает значение false. Определение имени объекта является необязательным. Если имя объекта не задано, CLIPS воспользуется функцией gensym* для автоматической генерации имени.
В процессе выполнения функция make-instance совершает следующие действия:
1. Если объект с заданным именем уже имеется, то существующий объект получает сообщение delete, Т.е. (send <имя-объекта> delete). Если по какой-то причине эта операция завершается неудачно, создание нового объекта прерывается.
2. Создается новый неинициализированный объект заданного класса с заданным именем.
3. Значения всех переопределяемых слотов немедленно вычисляются и устанавливаются с помощью сообщения put-, т.е. (send <имя-объекта> рut-<имя-слота> <выражение>*). Если в процессе этой операции возникнет какая-либо ошибка, новый объект будет удален.
|
|
4. Новый объект получает сообщение init: (send <имя-объекта> init). Предопределенный системный обработчик этого сообщения вызывает функцию init-siots. Данная функция использует значения по умолчанию из определения класса (если они есть) для всех слотов, которые не были переопределены. Установки слотов класса по умолчанию помещаются непосредственно в слот без использования сообщений. Если на этом этапе возникает ошибка, новый объект также удаляется.
Для иллюстрации работы описанного алгоритма определите в среде CLIPS класс и обработчики сообщения, представленные в примере 11.41.