(defclass A (is-a USER)
(role concrete))
(defmessage-handler A delete before ()
(printout t "Deleting an instance of the class A..."crlf))
(defmessage-handler USER delete after ()
(printout t "System completed deletion of an instance." crlf))
Класс а является прямым потомком класса user и не имеет слотов. Кроме того, мы добавили два обработчика сообщения delete. Один обработчик типа before относится непосредственно к классу а, другой обработчик типа after относится к самому классу user. Помимо этих двух обработчиков сообщения delete у каждого объекта потомка класса user существует еще один обработчик primary, выполняющий удаление объекта (о системных обработчиках сообщений см. в разд. 11.3.3). Для демонстрации процесса связывания сообщений включите режим просмотра изменения списка экземпляров объектов с помощью команды (watch instances) или диалогового окна Watch Options, открываемого через меню Execution. Создайте экземпляр объекта класса а и пошлите ему сообщение delete. Результат этой последовательности действий приведен на рис. 11.13.
Рис. 11.13. Иллюстрация процесса связывания сообщений
Обратите внимание, что сначала был вызван обработчик before класса и, затем системный обработчик primary, который произвел удаления объекта, а после него обработчик after класса user.
В данном разделе подробно был рассмотрен тип обработчиков сообщений. Остальные параметры конструктора defmessage-handler будут представлены ниже.