Грань переопределения сообщений

Некоторые функции 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):