Тип обработчика Роль обработчика

_____________________________________________________________________________________

primary Выполняет основную обработку сообщения

before Выполняет вспомогательную обработку сообщения перед вызовом

основного обработчика

after Выполняет вспомогательную обработку сообщения после вызова

основного обработчика

around Подготавливает среду для выполнения остальных обработчиков

_____________________________________________________________________________________

Обработчик primary является основным обработчиком сообщения. Он пере­определяет все другие primary-обработчики того же сообщения, присоеди­ненные к суперклассам данного класса. Обработчики before и after пред­назначены для выполнения некоторых побочных действий. Возвращаемое ими значение всегда игнорируется. Обработчик before выполняется перед выполнением основного обработчика; обработчик after — по окончании выполнения основного обработчика. Обработчики before и after предос­тавляют возможность изменять поведение классов родителей в объекте класса потомка. Как правило, полезное возвращаемое сообщением значение получают только от основного обработчика, хотя обработчик around также может вернуть полезное значение. Обработчик around предоставляет пользо­вателю возможность как бы окружить дополнительным кодом код осталь­ных обработчиков. Обработчики around начинают работу перед выполнени­ем остальных обработчиков и продолжают свою работу после того, как все обработчики закончат свою работу.

Типы обработчиков сообщений, присоединенных к классу и к классам его родителей, определяют, какие обработчики будут запущены и в каком порядке. Такой подход называется декларативным. Однако иногда реализация сообщений может не соответствовать этой модели. Например, могут пона­добиться результаты более чем одного основного обработчика. В подобных случаях обработчики сами должны решать, какие еще обработчики необхо­димо выполнить и в каком порядке. Такой подход называется императивным. Обработчики around предоставляют императивный контроль над обра­ботчиками всех других типов за исключением обработчиков around, присое­диненных к более определенному классу. Обработчики around способны менять окружение других обработчиков, запускать обработчики и модифи­цировать возвращаемое ими значение. Придерживайтесь декларативного подхода, насколько это возможно. Это позволит обработчикам быть более модульными и независимыми.

Обработчики сообщений однозначно идентифицируются классом, именем и типом. Обработчики сообщений никогда не вызываются непосредственно. Когда пользователь посылает сообщение объекту, CLIPS выбирает и упоря­дочивает применимые обработчики сообщений, присоединенные к объекту класса, и затем выполняет их. Этот процесс называется связывание сообще­ний. Для иллюстрации данного процесса рассмотрим пример 11.31.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: