7.3.3.
Метаклассы в CLOS и CLIPS
В
языке CLOS классы и метаклассы интегрированы в среду LISP. Фактически каждый объект
LISP является экземпляром класса. Например, существует класс массивов array, соответствующий
типу данных array в Common LISP.
В
CLOS поддерживаются три базовых метакласса.
(defclass father (man parent) (:name)
(:occupation)
(:documentation "Класс родителя мужского пола"))
Большинство
классов, определенных пользователем, имеет именно этот метакласс.
Хотя
функциональные возможности базовых метаклассов вполне приемлемы для большинства
приложений, программист может воспользоваться и опциями формирования специализированного
standard-class, который будет обладать каким-нибудь экзотическим поведением. В
частности, можно использовать meta-object protocols (протоколы мета-объектов)
и переопределить родовой алгоритм диспетчирования. В результате у разработчика
появляется возможность создать собственный механизм наследования, более приемлемый
для конкретного приложения, чем стандартный. Нужно отметить, что подобного рода
возможности отсутствуют в языках, подобных C++, правда, как показал опыт, большинство
пользователей обращаются к ним очень редко.
Язык
COOL, включенный в состав CLIPS, имеет 17 системных классов, причем некоторые
из них выполняют функции метаклассов. Верхние уровни структуры классов схематически
представлены на рис. 7.7.
Рис.
7.7. Верхние уровни иерархической системы классов языка COOL
Все классы, определенные пользователем,
являются производными от USER, который отчасти выполняет функции метакласса. В
нем реализованы практически все базовые обработчики сообщений инициализации и
удаления объектов. Однако USER все-таки не является метаклассом, поскольку классы,
определенные пользователем, — это производные от USER, а не его экземпляры. Initial-Object
является экземпляром по умолчанию, который создается при выполнении функции def
instaces. Класс Primitive и его подклассы реализуют основные структуры данных
— числа, символы строки, адреса и многокомпонентные объекты. Все классы, представленные
на рис. 7.7, кроме Initial-Object, являются абстрактными и служат только для определения
родовых операций и структур данных.
| Maya 3D графика в кино и телевидении Воздействие испытаний ядерного оружия на здоровье населения Объектно-ориентированный язык программирования Java Объектно-ориентированное программирование Delphi Библиотека визуальных компонентов VCL и ее базовые классы Кроссплатформенное программирование для Linux Элементы управления Win32 Элементы управления Windows XP Файлы и устройства ввода/вывода Что такое экспертная система? Объектно-ориентированное программирование Инструментальные средства разработки экспертных систем Программирование на языке CLIPS Критерии и количественные характеристики надежности Расчет характеристик надежности невостанавливаемых резервированных изделий Расчет надежности системы с постоянным резервированием Интегрирование тригонометрических функций ; |