当您计划使用 Haskell 等函数式编程语言开发系统时,您如何处理分析和设计阶段?
我的背景是命令式/面向对象的编程语言,因此,我习惯于用例分析和使用 UML 来记录程序的设计。但问题是 UML 本质上与面向对象的软件开发方式相关。
我很感兴趣,为将要使用函数式编程开发的系统开发文档和定义软件设计的最佳方式是什么。
当您计划使用 Haskell 等函数式编程语言开发系统时,您如何处理分析和设计阶段?
我的背景是命令式/面向对象的编程语言,因此,我习惯于用例分析和使用 UML 来记录程序的设计。但问题是 UML 本质上与面向对象的软件开发方式相关。
我很感兴趣,为将要使用函数式编程开发的系统开发文档和定义软件设计的最佳方式是什么。
我不是专业人士,但我会尽力回答其中一些问题。
你还会使用用例分析[?]
我不明白为什么不。收集用例,并设计一个您希望公开的满足用例的模块 API。确定用例是需要类型类,还是只需要普通函数。
或者也许是结构化的分析和设计?
我不熟悉这种方法,但从我从 wiki 文章中收集到的信息来看,它看起来可以正常工作。
软件架构师如何定义系统的高级设计以便开发人员遵循它?
我假设他们指定了一个模块以及模块的每个部分应具有的类型。同样,我不是专业人士,所以我不确定在实践中做了什么。
当您应该展示解决方案的设计时,您会向您的客户或新开发人员展示什么?
你向客户展示对他们有意义的东西。如果您的客户足够精明,只需向他们展示类型签名并解释重要功能即可。如果他们不那么精明,那就画漂亮的画,或者你必须做的任何事情。OOP 与现实世界的对象进行比较,而 FP 与......嗯......函数进行比较。向新手说明功能的典型方法是将其描述为一台机器,您可以在其中放入某些东西,然后再取出其他东西。
您如何在不先写完所有内容的情况下记录整个事物的图片?
照片”?只需为重要函数定义类型签名,然后将实现保留为undefined
. 在某个地方有一个包可以为您提供更好的存根,它会在编译时提醒您仍然需要实现哪些部分。
在功能世界中有什么可以与 UML 相媲美的吗?
不?
让我们检查一下这个说法:
UML 本质上与面向对象的软件开发方式相关。
首先,这不是真的。无论实现是什么,您仍然可以在 UML 中对交互、用例、状态和数据模型进行建模。
其次,Haskell 的类型类是面向对象的一种形式:它们在其参数类型上提供多态分派(这允许使用该类型中存在的数据的不同函数实现)。
所以,是的,如果你真的想继续使用 UML,那就继续吧。