Ssylka

Как создать объекты в Scheme?

Можно ли реализовать объектно-ориентированное программирование в функциональном языке Scheme? Статья показывает, что да, используя замыкания и макросы. Scheme не имеет встроенной поддержки ООП, но его модель вычислений на основе окружений позволяет создавать объекты как функции с внутренним состоянием, а также макросами можно расширять синтаксис языка для создания более наглядного ООП.
Как создать объекты в Scheme?
Изображение носит иллюстративный характер

Объекты создаются с помощью функций-конструкторов, которые возвращают замыкания, хранящие данные объекта (поля) и функции-методы для работы с этими данными. Диспетчер сообщений обрабатывает входящие сообщения, вызывая соответствующие методы. Макросы def-keys и defclass упрощают создание объектов. def-keys определяет символы-сообщения, а defclass создает конструктор с полями и методами, организуя объектную модель.

Пример реализации: счётчик с полями имени и значения, который может принимать сообщения для изменения и запроса своего состояния. При этом для каждого объекта в момент его создания, приходится создавать методы, обрабатывающие сообщения этому объекту. При этом методы ещё и занимают память, для каждого объекта. Таким образом объекты получаются большого объёма и медленно создаваемые.

Недостатки подхода: создание методов для каждого объекта, большой объём объектов и невозможность динамического изменения методов в работе программы. Несмотря на это, для небольших проектов такой простой подход вполне может оказаться достаточным. Существуют и более продвинутые решения на Scheme, но они будут рассмотрены в другой раз.


Новое на сайте

18957Анализ ископаемых зубов из Дманиси опровергает теорию о первенстве Homo erectus в... 18956Чем гигантское солнечное пятно AR 13664 спровоцировало мощнейшую бурю за 21 год и скрытый... 18955Крошечный костный выступ подтвердил прямохождение древнейшего предка человека возрастом... 18954Гендерный парадокс и социальная истерия во время первой дипломатической миссии самураев в... 18953Расследование гибели древнего добытчика бирюзы в пустыне Атакама 18952Противостояние Юпитера 10 января открывает сезон лучших астрономических наблюдений 18951Реформа кибербезопасности США через отмену устаревших директив CISA 18950Почему критическое обновление Trend Micro Apex Central требует немедленной установки? 18949Триумф и унижение первой женщины-лауреата Гран-при парижской академии наук 18948Зачем северокорейские хакеры Kimsuky заставляют жертв сканировать QR-коды и как это... 18947Уникальный космический реликт Cloud-9 подтвердил теории о темной материи и неудавшихся... 18946Китайская группировка UAT-7290 атакует телекоммуникационный сектор с помощью... 18945Почему у человечества осталось менее трех суток на спасение орбиты в случае глобального... 18944Как искусственный интеллект и сломанная экономика уничтожают долгосрочное планирование 18943Каким образом Брэд берд переосмыслил «железного человека» Теда Хьюза и сместил фокус...