oop - 如何使用类型类来实现持久性、内省(introspection)、身份、打印、

标签 oop types programming-languages language-design theory

The Myths of Object-Orientation 的讨论中, Tim Sweeney describes他认为这是我们今天使用的无所不包框架的一个很好的替代方案。

他似乎对类型类最感兴趣:

we can use constructs like typeclasses to define features (like persistence, introspection, identity, printing) orthogonally to type constructs like classes and interfaces



我非常熟悉类型类作为“类型的类型”,但我不确定它们将如何应用于上述问题:持久性、打印、......

有任何想法吗?

最佳答案

我最好的猜测是通过默认方法重用代码,并通过将类型类实现与类型本身分离来进行正交定义。

基本上,当您定义类型类时,您可以定义方法的默认实现。例如 Eq Haskell 中的(平等)类定义 /= (不等于)为 not (x == y)默认情况下,此方法将适用于类型类的所有实现。以类似的方式在其他语言中,您可以定义一个类型类,其中除了一两个方法之外,所有持久性代码都编写( SaveLoad )。或者,在具有良好反射能力的语言中,您可以预先定义所有持久性方法。在实践中,它有点类似于多重继承。

现在,另一件事是您不必在定义类型的同一位置将类型类附加到您的类型,您实际上可以稍后在不同的位置执行此操作。这允许持久化逻辑与原始类型很好地分离。

我最喜欢的论文中有一些关于 OOP 语言的好例子:http://www.stefanwehr.de/publications/Wehr_JavaGI_generalized_interfaces_for_Java.pdf .他们对默认实现和追溯接口(interface)实现的描述与我刚才描述的语言特性基本相同。

免责声明:我真的不了解 Haskell,所以我可能在某些地方错了

关于oop - 如何使用类型类来实现持久性、内省(introspection)、身份、打印、,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9195849/

相关文章:

ios - XCTestCase子类实例化的过程是怎样的?

javascript - 使用 require/new 在 node.js 中实例化一个新对象

arrays - SWIFT - 如何获取数组的类型?

.net - 如何识别类型是否是自定义结构?

excel - Application.EnableEvents = False 不工作

python - 延迟库允许打包函数访问多少信息?

oop - Go中扩展类型的访问方法

将 8 字节 char 数组转换为 long

programming-languages - 用编程语言进行测试的通常很短的解决方案的问题

programming-languages - x>y && z==5 - 这个表达式的部分是如何调用的?