UML可用于建模功能程序吗?

时间:2010-03-16 20:33:16

标签: functional-programming uml

更具体地说,你如何使用图表来模拟功能程序,或使用功能样式(没有类)开发的功能程序,而不是文本表示,它是否有可能,有人可以请我指向最近的应用程序会这样做(开源,免费,如啤酒,如果你愿意)

9 个答案:

答案 0 :(得分:34)

功能程序员通常没有很多图表用途。许多函数式程序员(但不是全部)发现写下 types 是封装OO程序员在UML图中设置的设计关系的好方法。

因为可变状态在功能程序中很少见,所以没有可变的“对象”,因此绘制它们之间的关系通常不是有用的或必需的。虽然一个函数可能会调用另一个函数,但这个属性对于系统的整体设计通常并不重要,而只对执行调用的函数的实现不重要。

如果我非常需要绘制功能程序图,我可能会使用concept map,其中类型或函数扮演概念的角色。

答案 1 :(得分:14)

UML不仅仅是类图,你知道吗?

大多数其他图表类型(用例图,活动图,序列图......)完全适用于纯函数式编程风格。如果您只是不使用属性和关联并将“class”解释为“相关函数的集合”,即使类图仍然有用。

答案 2 :(得分:11)

UML是不同类型建模的概要。如果您正在谈论对象图(类图),那么您将找不到适合您所需用途的任何东西。但是,如果您正在讨论交互图(活动图)或需求图(用例图),他们当然会帮助您并成为UML基础的一部分。

答案 3 :(得分:8)

功能程序员有自己的UML版本,称为Category Theory

(这有一定的道理,但它只需要通过幽默来阅读。

答案 4 :(得分:4)

要使用图表而不是文本表示来建模功能程序,您可以使用与ViskellLuna

中编程的符号相似的符号

enter image description here

答案 5 :(得分:2)

UML是一种对象方法,因为在图形层面上,您无法定义功能建模。一个技巧是直接在模型中添加约束和注释,而不是在图级别中添加。我的意思是您可以直接在元模型中编写关于每个模型元素的完整功能文档,并仅使用UML编辑器显示对象视图。 这可能是愚蠢的,但我发现这个使用法语的演示完全在同一主题上并使用EclipseUML Omondo: OCL和UML 2.2(法语3mn演示):http://www.download-omondo.com/regle_ocl.swf

此演示说明如何直接在元模型级别的方法上添加约束。这个演示的有趣之处在于,为整个项目使用单个模型允许足够灵活地扩展传统UML并避免使用SysML,BPMN,DSL附加模型,因为所有信息都建立在UML 2.2元模型的顶部。我不知道它是否会成功,但这个举措非常有趣,因为降低了建模的复杂性并开辟了新的领域!!

答案 6 :(得分:1)

我猜你可以创建一个名为noclass的类,并将函数作为方法。此外,您可能希望将noclass拆分为多个类别的函数。

答案 7 :(得分:0)

我实际上没有尝试用UML建模大型系统然后进行功能实现,但我不明白它为什么不能工作。

假设实现将是Haskell,我将首先使用类图定义类型及其关系。通过主参数将函数分配给类,但请记住,这只是UML的一个人工制品。如果创建一个虚构的单例对象只是为了保存所有函数更容易,那也没关系。如果应用程序需要状态,那么我在状态图或序列图中建模时没有问题。如果我需要一个自定义monad用于特定于应用程序的排序语义,那么这可能会成为一种刻板印象;目标是描述应用程序在域名中的作用。

重点是UML 可以用于模拟程序的功能实现。你必须记住一个映射到实现(并且记录它不会有害),并且拟合远非精确。但它可以做到,甚至可能增加价值。

答案 8 :(得分:0)

我意识到这是一个老线程,但我不是在这里理解这个问题。

一个类只是一个概念的抽象,它以更人性化的方式将它的方法的功能联系在一起。例如,WaveGenerator类可能包含Sine,Sawtooth和SquareWave方法。这三种方法都明确与类Generator相关。但是,这三个人也都是无国籍人。如果设计正确,则不需要在方法之外存储状态信息。这使得它们成为无状态对象 - 如果我理解正确的话 - 使它们成为函数范例中核心概念的不可变函数。

从概念的角度来看,我认为

之间没有任何区别

让Envelope Sine = ...

让Envelope Generator.Sine = ...

除了后者可能提供更深入了解功能目的的事实。