【问题标题】:How does pure functional language(haskell) users make Design?what alternative to uml they use? [closed]纯函数式语言(haskell)用户如何进行设计?他们使用什么替代 uml? [关闭]
【发布时间】:2017-01-31 19:57:48
【问题描述】:

假设haskell 没有概念对象(即使它有关键字class) Haskell 开发人员如何设计他们的代码?它们如何代表交互/实体?他们有 uml 的替代品吗?或等效的课程?(或者他们甚至在乎吗?)

【问题讨论】:

  • 我认为这个问题可以颠倒过来——我对 Java 程序员如何设法将所有东西硬塞进类感到困惑:)。一般来说,人们在 Haskell 中花费更多的时间来思考函数以及从一种事物到另一种事物的转换。除此之外,按照 SO 标准,这个问题现在似乎有点宽泛且无法回答。也许您可以添加一个您无法想象在 Haskell 中完成的特定示例?
  • @Alec 我不是在争论是否使用对象,我只是想知道设计是如何表达的,我对函数式编程没有任何反对
  • 你一定误解了我的评论——我并没有提出支持或反对函数式编程的观点,只是因为难以传达范式的不同之处。我仍然认为这个问题没有一个例子就无法真正回答......
  • 我很高兴在我的答案中添加给定 uml/类架构的“翻译”
  • 这是一个有趣的问题。也许 Haskell 开发没有广泛的标准设计过程。大多数Haskellers通常谈论与数学和形式语义的联系肯定“有帮助”,这比代码风格更客观,代码风格是最好的语言习语/模式等等。一些 Haskellers(包括我,老实说)对 UML 的非正式性质感到有点不舒服。此外,架构文档适用于大型开发组——我不确定 Haskell 开发组(在同一个项目中)在全球有多大。

标签: haskell purely-functional


【解决方案1】:

我不知道绘制或描述建筑的任何正式(化)概念。

不过,您可以构建应用程序

最基本的方式是利用类型系统的表现力:

  • newtypes 中包装简单类型 - 或使用type 同义词 - 区分IntAge 值,例如newtype Age = Age Int
  • 将更复杂的类型组合为现有的产品,例如data Person = Person { name :: String, age :: Age}
  • 或使用求和类型data Employee = Chef Person | Waiter Person

所有这些数据类型——可以做得更精细——都可以通过记录语法或镜头来访问/修改*。我倾向于将数据类型视为我编写的应用程序的骨架——并使用编译器来忠实于我在启动时的想法,并且从不使用unsafeXX 函数颠覆类型。

缺乏OO/封装

我从来没有 - 没有必要将函数附加到对象(我认为完全错误,但这不在此处讨论)。

基本形式的封装可以通过newtype 和模块及其导出来完成。

多态性

使用类型类已经可以完成很多工作,如果您还没有使用过它们,它们有点像接口(但输入更少) - 但是您可以使用类型系列等高级功能完成更多工作。


结论

因此,如果我想绘制我的程序的结构/体系结构,我会从我的数据类型作为框开始,并在它们之间使用箭头作为函数。并且可能对容器类型使用“特殊”框。

*:从技术上讲,通常不会修改东西,而是从旧值创建新值,因为(几乎)一切都是不可变的。

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2020-06-13
    相关资源
    最近更新 更多