Home - ZhenyaKh/object-model GitHub Wiki

Объектная модель

Проектная документация

Сведения

Поле Значение
Авторы Хасина Евгения, Петренко Евгений
Язык Clojure

Требования

Определите для языка Clojure объектную модель.

  1. Обеспечите поддержку следующих элементов:
  • класс;
  • атрибут (свойство, слот);
  • одиночное наследование классов;
  • множественное наследование классов;
  • диспетчеризацию обработки сообщений относительно одного аргумента (динамический полиморфизм).
  1. Определите соответствующие функции и/или макросы для работы с перечисленными выше элементами.

Дополнительные требования

Определите поддержку следующих элементов:

  • диспетчеризацию обработки сообщений в иерархии с множественным наследованием (классов или примесей); реализуйте аналог call-next-method из CLOS (с фиксированной стратегией диспетчеризации по одному параметру);
  • включите вспомогательные методы (before, after) в механизм диспетчеризации;
  • обобщенные функции (диспетчеризация по нескольким параметрам);
  • поддержка изменяемого состояния на основе транзакционной памяти (можно испольовать встроенную в Clojure поддержку STM); обеспечьте реализацию принципа Command-Query Separation на уровне декларации классов (и/или других элементов объектной модели).
  • статическая типизация [не сделана].