Функциональное программирование


         

Объекты и LISP


Стандартная надстройка над Common Lisp, имитирующая объектно-ориентированный стиль, это модуль CLOS - Common Lisp Object System. Сама по себе объектность не дает никакого выигрыша по сравнению с языком lisp, поскольку возможности динамического вычисления функций в lisp даже шире. Видимо, именно поэтому в CLOS имеются две интересных модификации, делающие его не совсем похожим на стандартное ООП.

Начнем с понятия структуры данных в языке Common Lisp. Структура определяется функцией defstruct вида

(defstruct pet name (species 'cat) age weight sex)

Задание структуры автоматически задает функцию-конструктор структуры make-pet, которая может принимать ключевые аргументы для каждого из полей:

(make-pet :nick 'viola :age '(3 years) :sex 'femina))

и функцию доступа для каждого из полей, например pet-nick, использующуюся для получения значения поля или ссылки на него. Если поле не инициализировано (ни по умолчанию, ни конструктором), оно получает начальное значение nil. Никакой дальнейшей спецификации полей структур нет6.

В объекте для каждого поля могут явно указываться функции доступа и имена ключевых параметров для инициализации аргументов. Приведем пример класса, определенного на базе другого класса.

(defclass pet (animal possession) ( (species :initform 'cat) (nick :accessor nickof :inintform 'Pussy :initarg namepet) )

Этот класс наследует поля, функции доступа и прочее от классов animal и possession. Например, поле cost имеется в значении класса, если оно имеется в одном из этих классов. Поскольку статических типов у полей нет, нет и конфликтов.

Основная функция наследования в CLOS - определение упорядочения на классах. С каждым классом связано свое упорядочение. Наследник меньше своих предков, из предков меньшим считается тот, который раньше перечислен в списке наследования при определении класса. CLOS достраивает этот частичный порядок до линейного. Способ пополнения порядка может быть в любой момент и без оповещения изменен, и хакерское использование особенностей конкретного пополнения считается грубой стилистической ошибкой.

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий