Грань переопределения сообщений
Некоторые функции CLIPS устанавливают значения слотов объектов с помощью сообщений, например: make-instance, initialize-instance, message-modify-instance, message-duplicate-instance. По умолчанию все эти функции пытаются установить значение слота с помощью вызова сообщения put-<имя слота>. Если пользователь не задал автоматическое создание акцессоров с помощью грани create-accessor, но хочет, чтобы эти функции работали и могли переопределять значения слотов, то необходимо использовать специальную грань override-massage. Эта грань позволяет задавать имя сообщения, которое будет послано экземпляру объекта некоторого класса, при попытке изменить значение данного слота. Грань override-massage можно также использовать, если стандартные акцессоры существуют, но их применение приведенными выше функциями нежелательно.
В качестве иллюстрации использования этой грани рассмотрим класс из примера 11.26.
Пример 11.26. Использование грани переопределения сообщений
(defclass A (is-a USER)
(role concrete)
(slot special (create-accessor read-write)
(override-message special-put)))
Класс А содержит слот special, который с помощью грани override-massage сообщает среде CLIPS, что для изменения слота special необходимо использовать сообщение special-put, определенное пользователем, а не стандартное сообщение, созданное с помощью грани create-accessor с именем put-special. Определим обработчик сообщения special-put следующим образом (более подробно создание обработчиков сообщений будет рассмотрено в разд. 11.3):