А.5. Common Lisp Object System (CLOS)

А.5. Common Lisp Object System (CLOS)

Происхождение

Существуют буквально десятки диалектов языка Lisp, включая MacLisp, Standard Lisp, SpiceLisp, S-1 Lisp, ZetaLisp, Nil, InterLisp и Scheme. В начале 80-х годов под воздействием идей объектно-ориентированного программирования возникла серия новых диалектов Lisp, многие из которых были ориентированы на представление знаний. Успех в стандартизации Common Lisp стимулировал попытки стандартизировать объектно-ориентированные диалекты в 1986 году.

Идея стандартизации была поддержана летней конференцией ACM по Lisp и функциональному программированию 1986 года, в результате чего была создана специальная рабочая группа при комитете X3J13 ANSI (комитет по стандартизации Common Lisp). Поскольку новый диалект должен был стать надстройкой над Common Lisp, он получил название Common Lisp Object System (Объектная система Common Lisp) или, сокращенно, - CLOS. Возглавил комитет Дэниел Бобров (Daniel Bobrow), а его членами стали Соня Кин (Sonya Keene), Линда де Мичил (Linda DeMichiel), Патрик Дассад (Patrick Dussud), Ричард Габриель (Richard Gabriel), Джеймс Кемпф (James Kempf), Грегор Кисазлес (Gregor Kicazles) и Дэвид Мун (David Moon).

Серьезное влияние на проект CLOS оказали языки NewFlavors и CommonLoops. После двухлетней работы, в 1988 году была опубликована полная спецификация CLOS.

Обзор

Кип отмечает, что в проекте CLOS ставились три основные цели. CLOS должен:

• представлять собой стандартное расширение языка, включающее все наиболее полезные свойства существующей объектно-ориентированной парадигмы;

• обеспечить эффективный и гибкий интерфейс программиста, позволяющий реализовать большинство прикладных задач;

• проектироваться как расширяемый протокол, так, чтобы можно было изменять его поведение, тем самым стимулируя дальнейшие исследования в области объектно-ориентированного программирования [17].

Обзор характеристик CLOS можно найти и табл. А-4. Не поддерживая непосредственно механизм долгоживущих объектов, CLOS имеет расширения с протоколом метаобъектов, реализующих этот механизм [18].  

Абстракции  Переменные экземпляра Методы экземпляра Переменные класса Методы класса  Да Да Да Да 

Инкапсуляция  Переменных Методов  Чтение, запись, доступ Открытые 

Модульность  Разновидности модулей  Пакет 

Иерархии  Наследование Шаблоны Метаклассы  Множественное Нет Да 

Типизация  Сильная типизация Полиморфизм  Возможна Да (множественный) 

Параллельность  Многозадачность  Да 

Сохраняемость  Долгоживущие объекты  Нет 

  Таблица А-4. CLOS.

Ссылки

Основным руководством по языку CLOS является -"Common Lisp Object System Specification" [19].