can и ООП

can - возвращает список всех классов, которые принимают сообщение. Функция режима отладки!
Классы и сообщения … То есть PicoLisp типа CLOS, Common Lisp? Он инкапсулирует код и данные в объекты, как с состоянием, так и с поведением. Объекты взаимодействуют посредством сообщений. Объекты организованы в классы и наследуют поведение от классов и суперклассов. Объекты разных классов могут вести себя по-разному в ответ на одно и то же сообщение. Для этого классы могут определять разные методы для каждого сообщения. То есть, мы имеем классический набор, характеризующий ООП - инкапсуляция, наследование и полиморфизм.
PicoLisp реализует как объекты, так и классы с помощью символов. Локальные данные объекта хранятся в списке свойств символа, в то время как код (методы) и ссылки на суперклассы хранятся в VAL символа (инкапсуляция). Нет формальной разницы между объектами и классами (за исключением того, что объекты обычно являются анонимными символами, содержащими в основном локальные данные, в то время как классы называются внутренними символами с акцентом на определения методов). В любое время классу могут быть назначены его собственные локальные данные (переменные класса), и любой объект может получить индивидуальные определения методов в дополнение к (или переопределяя) определения, унаследованные от его (супер)классов.
PicoLisp поддерживает множественное наследование. VAL каждого объекта — это (возможно, пустой) список ассоциаций символов сообщений и тел методов, объединенный со списком классов. Когда сообщение отправляется объекту, оно ищется в собственном списке методов объекта, а затем (с помощью поиска в глубину слева направо) в дереве его классов и суперклассов. Выполняется первый найденный метод, и поиск останавливается, но может быть явно продолжен с помощью обращения к специальным функциям. Поскольку поиск метода полностью динамический (позднее связывание), тип объекта (т. е. его классы и определения методов) можно изменить даже во время выполнения!
То есть, в PicoLisp своя оригинальная реализация ООП (концепции ОО) и более того, помимо иерархического наследования (вертикального) реализовано “горизонтальное“ с “префиксными классами“ (с более тонкой настройкой поведения …) … То есть тема объектной реализации интересная и требует отдельного рассмотрения.
Subscribe to my newsletter
Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Sergey Shishkin
Sergey Shishkin
Всегда чему-то учусь!