(defclass <имя-класса> [<комментарии>]
(is-a <список-суперклассов>+)
[<роль-класса>]
[<активность-класса >]
<слот>*
<объявление-обработчика-сообщений>*)
<роль-класса>::= (role concrete | abstract)
<активность-класса>::= (pattern-match reactive | non-reactive)
<слот>::= (slot <имя> <грани>*) │
(single-slot <имя> <грани>*)|
(multislot <имя> <грани>*)
<грань>::= < значение-по-умолчанию > |
<грань-хранения> |<грань-доступа> │
<грань-распространения>│
<грань-источника>│
<грань-сопоставления-образцов>│
<грань-видимости>│
<грань-создания-акцессоров>│
<грань-переопределения-сообщений>│
<ограничения-атрибутов>
<значение-по-умолчанию>::= (default? DERIVE │?NONE│<выражение>*)│
(default-dynamic <выражение>*)
<грань-хранения>::= (storage local │ shared)
<грань-доступа>::= (access read-write │ read-only │ initialize-only)
<грань-распространения >::= (propagation inherit │ no-inherit)
<грань-источника >::= (source exclusive │ composite)
<грань-сопоставления-образцов >::= (pattern-match reactive │ non-reactive)
|
|
<грань-видимости >::= (visibility private │ public)
<грань-создания-акцессоров >::= (create-accessor? NONE │ read│ write│ read-write)
<грань-переопределения-сообщений >::= (override-message? DEFAULT │<имя-сообщения>)
<объявление-обработчика-сообщений >::= (message-handler <имя-обработчика>
[<тип-обработчика>])
<тип-обработчика >::= primary │around│before│after
Замечание
В представленном выше определении значения по умолчанию подчеркнуты.
Попытка переопределения существующего класса приведет к удалению этого класса и всех ассоциированных с ним обработчиков сообщений. Если определен хотя бы один объект удаляемого класса, произойдет ошибка, и новый класс не будет создан.