Существуют три значения грани доступа access, которые могут быть присвоены слоту: read-write, read-only, initialize-only. Грань read-write устанавливается по умолчанию и объявляет, что значение слота можно читать и изменять. Грань read-only объявляет, что из слота можно только читать. Единственный способ установить значение этого слота — использование грань default в определении класса. Грань initialize-only аналогична грани read-only за исключением того, что слот также может быть установлен с помощью переопределения при вызове make-instance (см разд. 11.5.1) и в обработчике сообщений init (см. подразд. "Инициализация объекта" разд. 11.3.3). Заметьте, что слот read-only, который имеет статическое значение по умолчанию, будет неявно иметь общую грань хранения.
Создайте следующую версию класса а и обработчик сообщения для записи в слот bar.
Пример 11.19. Класс А с различными значениями грани доступа для слотов
(defclass A (is-a USER)
(role concrete)
(slot foo (create-accessor write)
(access read-write))
(slot bar (access read-only)
(default abc))
(slot woz (create-accessor write)
(access initialize-only)))
(defmessage-handler A put-bar (?value)
(dynamic-put (sym-cat bar)?value))
Выполните действия, перечисленные в примере 11.20.