在关于The Myths of Object-Orientation的讨论中,Tim Sweeney describes他认为是我们今天所有人都使用的无所不包的框架的一个很好的替代方案。
他似乎对类词组最感兴趣:
我们可以使用像类型类这样的结构来定义功能(比如持久性,内省, 身份,印刷)正交类型构造类似和类 接口
我熟悉类型类作为“类型的类型”,但我不确定它们将如何应用于前面提到的问题:持久性,打印,......
有什么想法吗?
答案 0 :(得分:1)
我最好的猜测是通过默认方法和正交定义重用代码,方法是从类型本身分离类型类实现。
基本上,在定义类型类时,可以定义方法的默认实现。例如,Haskell中的Eq
(相等)类将/=
(不等于)定义为not (x == y)
,并且此方法默认适用于类型类的所有实现。在其他语言中,您可以使用类似的方式定义一个类型类,其中包含所有持久性代码(Save
,Load
),但一个或两个方法除外。或者,在具有良好反射功能的语言中,您可以提前定义所有持久性方法。在实践中,它有点类似于多重继承。
现在,另一件事是你不必在你定义类型的同一个地方将类型类附加到你的类型,你可以在以后和不同的地方实际执行。这允许持久性逻辑与原始类型很好地分离。
OOP语言中的一些好例子是我最喜欢的论文:http://www.stefanwehr.de/publications/Wehr_JavaGI_generalized_interfaces_for_Java.pdf。他们对默认实现和追溯接口实现的描述基本上与我刚才描述的语言功能相同。
免责声明:我真的不知道Haskell,所以我可能错了地方