Как можно использовать классы типов для реализации постоянства, самоанализа, идентификации, печати, - PullRequest
3 голосов
/ 08 февраля 2012

В обсуждении Мифы об объектно-ориентации , Тим Суини описывает то, что он считает хорошей альтернативой всеобъемлющим фреймворкам, которые мы все используем сегодня.

Кажется, он больше всего интересуется типами очков:

мы можем использовать конструкции, такие как классы типов, для определения функций (таких как постоянство, самоанализ, идентичность, печать) ортогонально набирать конструкции, такие как классы и интерфейсы

Мне до некоторой степени знакомы классы типов как «типы типов», но я не уверен, как именно они будут применяться к вышеупомянутым проблемам: постоянство, печать, ...

Есть идеи?

1 Ответ

1 голос
/ 09 февраля 2012

Моим лучшим предположением было бы повторное использование кода с помощью методов по умолчанию и ортогональное определение путем отделения реализации класса типа от самого типа.

По сути, когда вы определяете класс типов, вы можете определить реализации по умолчанию для методов.Например, класс Eq (равенство) в Haskell определяет /= (не равно) как not (x == y), и этот метод будет работать по умолчанию для всей реализации класса типа.Аналогичным образом в другом языке вы можете определить класс типов со всем написанным кодом персистентности (Save, Load), за исключением одного или двух методов.Или на языке с хорошими способностями отражения вы можете заранее определить все методы сохранения.На практике это похоже на множественное наследование.

Теперь, другое дело, что вам не нужно прикреплять класс типа к вашему типу в том же месте, где вы определяете свой тип, вы можете сделать это позже и в другом месте.Это позволяет хорошо отделить логику персистентности от исходного типа.

В моей любимой статье всегда есть несколько хороших примеров того, как это выглядит на языке ООП: http://www.stefanwehr.de/publications/Wehr_JavaGI_generalized_interfaces_for_Java.pdf. Их описание реализаций по умолчанию иРеализации ретроактивного интерфейса - это, по сути, те же языковые возможности, которые я только что описал.

Отказ от ответственности: Я действительно не знаю Haskell, поэтому я могу ошибаться в некоторых местах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...