gpt4 book ai didi

oop - 如何在 Haskell 中建模类层次结构?

转载 作者:行者123 更新时间:2023-12-03 14:30:40 25 4
gpt4 key购买 nike

我是一名 C# 开发人员。来自世界的 OO 方面,我从接口(interface)、类和类型层次结构的角度开始思考。由于 Haskell 中缺乏 OO,有时我发现自己陷入了困境,我想不出用 Haskell 建模某些问题的方法。

如何在 Haskell 中对涉及类层次结构的真实世界情况进行建模,如下所示:http://www.braindelay.com/danielbray/endangered-object-oriented-programming/isHierarchy-4.gif

最佳答案

Haskell 不使用类和对象,而是使用抽象数据类型。在组织构建和观察信息的方式问题上,这实际上是两种相容的观点。我所知道的关于这个主题的最佳帮助是威廉库克的文章 Object-Oriented Programming Versus Abstract Data Types .他有一些非常清楚的解释,大意是

  • 在基于类的系统中,代码是围绕构建抽象的不同方式组织的。通常,每种不同的抽象构造方式都分配有自己的类。这些方法只知道如何观察该构造的属性。
  • 在基于 ADT 的系统(如 Haskell)中,代码是围绕观察抽象的不同方式组织的。通常,观察抽象的每种不同方式都被分配了自己的功能。该函数知道可以构造抽象的所有方式,并且知道如何观察单个属性,但可以观察任何构造。

  • Cook 的论文将向您展示一个很好的抽象矩阵布局,并教您如何将任何类组织为 ADY,反之亦然。

    类层次结构涉及另一个元素:通过继承重用实现。在 Haskell 中,这种重用是通过一等函数实现的: Primate 中的函数抽象是 Human 的值和实现抽象可以重用 Primate 的任何功能抽象,可以包装它们以修改它们的结果,等等。

    没有精确匹配 在具有类层次结构的设计和具有抽象数据类型的设计之间。如果你试图从一个音译到另一个,你会得到一些尴尬而不是惯用的东西——有点像用 Java 编写的 FORTRAN 程序。
    但是,如果您了解类层次结构的原理和抽象数据类型的原理,您就可以采用一种风格解决问题,并以另一种风格为同一问题制定合理的惯用解决方案。这确实需要练习。

    附录:也可以使用 Haskell 的类型类系统来尝试模拟类层次结构,但这是另一回事。类型类与许多标准示例都可以使用的普通类足够相似,但它们又足够不同,因此也可能存在一些非常大的意外和不合适的地方。虽然类型类对于 Haskell 程序员来说是非常宝贵的工具,但我建议任何学习 Haskell 的人学习使用抽象数据类型设计程序。

    关于oop - 如何在 Haskell 中建模类层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124511/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com