Functional programming UML可以用来建模功能程序吗?

Functional programming UML可以用来建模功能程序吗?,functional-programming,uml,Functional Programming,Uml,更具体地说,您如何使用图表(而不是文本表示)对函数式程序或使用函数式(无类)开发的程序进行建模?是否有可能?是否有人能告诉我最近的应用程序可以这样做(开源,免费,如啤酒,如果您愿意的话)UML是不同类型建模的概要。如果您谈论的是对象图(类图),那么您不会找到任何适合您所需用途的东西。但是如果你谈论的是交互图(活动图)或需求图(用例图),它们当然会帮助你,并且是UML基础的一部分。UML不仅仅是类图 大多数其他图类型(用例图、活动图、序列图……)完全适用于纯功能编程风格。如果你不使用属性和关联,不

更具体地说,您如何使用图表(而不是文本表示)对函数式程序或使用函数式(无类)开发的程序进行建模?是否有可能?是否有人能告诉我最近的应用程序可以这样做(开源,免费,如啤酒,如果您愿意的话)UML是不同类型建模的概要。如果您谈论的是对象图(类图),那么您不会找到任何适合您所需用途的东西。但是如果你谈论的是交互图(活动图)或需求图(用例图),它们当然会帮助你,并且是UML基础的一部分。

UML不仅仅是类图


大多数其他图类型(用例图、活动图、序列图……)完全适用于纯功能编程风格。如果你不使用属性和关联,不将“类”解释为“相关函数的集合”,那么即使是类图也会很有用。

函数式程序员通常对图表没有太多的用处。许多函数式程序员(但不是全部)发现,写下类型是将OO程序员放入UML图中的设计关系封装起来的好方法

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


如果我觉得非常需要绘制一个功能性程序的图表,我可能会使用一种类型或功能扮演概念角色的方法。

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


这个演示解释了如何在元模型级别直接在方法上添加约束。这个演示的有趣之处在于,对整个项目使用单一模型可以足够灵活地扩展传统的UML,避免SysML、BPMN、DSL等附加模型,因为所有信息都构建在UML2.2元模型之上。我不知道它是否会成功,但这项计划非常有趣,因为它降低了建模的复杂性并开辟了新的领域

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

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


主要的一点是,UML可以用来为功能实现的程序建模。您必须记住一个到实现的映射(记录它不会有什么坏处),而且它的适合性还远远不够精确。但这是可以做到的,甚至可能增加价值。

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


(这是有一定道理的,但阅读时要带点幽默感)。

我意识到这是一条古老的线索,但我不理解这里的问题

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

从概念的角度来看,我看不出两者之间有什么区别

让包络正弦=

让信封生成器.Sine=


除了后者可能提供对函数用途的更深入了解之外。

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

要使用图表而不是文本表示对函数程序进行建模,可以使用类似于在或中编程的符号


UML中不存在“需求图”(它来自SysML)不,UML一直都是对象。一切都是对象,交互图是对象的模型,除非你把一个函数当作一个对象?几年前,我用一个c#delegate(一个真实的对象)试过了,但没有成功。我建议大家阅读一下。应该符合你的兴趣。谢谢,我会看一看,可惜你得付钱:)不过,我开始明白原作者的观点了。如果您只是对一组相关函数进行建模,那么您实际上并不是在“建模”,而是在组织。我并不反对它仍然有用,但是