Объектная модель
Требования
- Определите для языка Clojure объектную модель. Обеспечите поддержку следующих элементов:
- класс;
- атрибут (свойство, слот);
- примесь (модуль в терминах Ruby);
- одиночное наследование классов;
- множественное наследование примесей;
- диспетчеризацию обработки сообщений относительно одного аргумента (динамический полиморфизм).
- Определите соответствующие функции и/или макросы для работы с перечисленными выше элементами.
Дополнительные требования
Определите поддержку следующих элементов:
- множественное наследование классов (в этом случае поддержку примесей можно не реализовывать);
- диспетчеризацию обработки сообщений в иерархии с множественным наследованием (классов или примесей);
реализуйте аналог call-next-method из CLOS (с фиксированной стратегией диспетчеризации по одному параметру);
- включите вспомогательные методы (before, after) в механизм диспетчеризации;
- обобщенные функции (диспетчеризация по нескольким параметрам);
- поддержка изменяемого состояния на основе транзакционной памяти (можно
испольовать встроенную в Clojure поддержку STM); обеспечьте реализацию принципа
Command-Query Separation на уровне декларации классов
(и/или других элементов объектной модели).
- статическая типизация.
Рекомендации
Подробно ознакомтесь с объектными моделями CLOS, Smalltalk и/или Eiffel