Тип обработчика Роль обработчика
_____________________________________________________________________________________
primary Выполняет основную обработку сообщения
before Выполняет вспомогательную обработку сообщения перед вызовом
основного обработчика
after Выполняет вспомогательную обработку сообщения после вызова
основного обработчика
around Подготавливает среду для выполнения остальных обработчиков
_____________________________________________________________________________________
Обработчик primary является основным обработчиком сообщения. Он переопределяет все другие primary-обработчики того же сообщения, присоединенные к суперклассам данного класса. Обработчики before и after предназначены для выполнения некоторых побочных действий. Возвращаемое ими значение всегда игнорируется. Обработчик before выполняется перед выполнением основного обработчика; обработчик after — по окончании выполнения основного обработчика. Обработчики before и after предоставляют возможность изменять поведение классов родителей в объекте класса потомка. Как правило, полезное возвращаемое сообщением значение получают только от основного обработчика, хотя обработчик around также может вернуть полезное значение. Обработчик around предоставляет пользователю возможность как бы окружить дополнительным кодом код остальных обработчиков. Обработчики around начинают работу перед выполнением остальных обработчиков и продолжают свою работу после того, как все обработчики закончат свою работу.
Типы обработчиков сообщений, присоединенных к классу и к классам его родителей, определяют, какие обработчики будут запущены и в каком порядке. Такой подход называется декларативным. Однако иногда реализация сообщений может не соответствовать этой модели. Например, могут понадобиться результаты более чем одного основного обработчика. В подобных случаях обработчики сами должны решать, какие еще обработчики необходимо выполнить и в каком порядке. Такой подход называется императивным. Обработчики around предоставляют императивный контроль над обработчиками всех других типов за исключением обработчиков around, присоединенных к более определенному классу. Обработчики around способны менять окружение других обработчиков, запускать обработчики и модифицировать возвращаемое ими значение. Придерживайтесь декларативного подхода, насколько это возможно. Это позволит обработчикам быть более модульными и независимыми.
Обработчики сообщений однозначно идентифицируются классом, именем и типом. Обработчики сообщений никогда не вызываются непосредственно. Когда пользователь посылает сообщение объекту, CLIPS выбирает и упорядочивает применимые обработчики сообщений, присоединенные к объекту класса, и затем выполняет их. Этот процесс называется связывание сообщений. Для иллюстрации данного процесса рассмотрим пример 11.31.
Дата добавления: 2021-12-14; просмотров: 247;