UML是瞄准了将在面向对象的语言编写的软件建模的标准,并且齐头并进与Java。 不过,可以将它可能被用来模拟意味着功能的编程范式写入软件? 其中图将给出嵌入式视觉元素上呈现有用吗?
是否有针对函数编程建模语言,更具体的Haskell? 你会推荐放在一起图什么工具?
由OP 2009年9月2日编辑:
我正在寻找的是在代码发生的事情是最直观,最亮表示。 易于遵循的图表,可视化模型并不一定针对其他程序员。 我会很快发展在Haskell一场比赛,但是因为这个项目是我的毕业总结工作,我需要引入某种提议的解决方案的形式化。 我在想,如果有一个相当于UML + Java标准,但Haskell的。 如果我只是坚持到故事板,书面说明,非形式化图(一些粗浅的流程图般的图像),非形式化用例描述?
通过jcolebrand编辑的2012年6月21日:
需要注意的是提问者本来想视觉metphor,现在我们已经有三年了,我们正在寻找更多/更好的工具。 最初的答案而没有真正解决“视觉隐喻设计工具”的概念,所以......这就是新的赏金正在提供。
Answer 1:
我们使用定理证明做形式化建模(核查),如伊莎贝尔或勒柯克。 有时我们使用领域特定语言(如Cryptol)做高层次的设计,推导出“低级别”哈斯克尔实施之前。
通常我们只使用哈斯克尔作为建模语言,并通过重写得到实际执行。
快速检查属性设计文件中也扮演一个角色,类型和模块分解一起。
Answer 2:
我相信Haskell的建模语言被称为“ 数学 ”。 人们常常在学校任教。
Answer 3:
是的,有广泛用于模拟/规范语言/ Haskell的技术。 他们不是视觉。
在Haskell,类型给出部分的规范。 有时候,这种规范完全确定的意义/结果而留下的各种实现方式选择。 超越哈斯克尔与相关类型的语言,如阿格达和勒柯克(等等),类型更常常是有用的作为一个完整的规范。
凡类型是不够的,加正式的规范,这往往需要一个简单的函数形式。 (因此,我认为,答案是Haskell的选择的建模语言是哈斯克尔本身或“数学”。)在这样的形式,你给是为了清楚和简化,而不是所有的效率优化的功能定义。 定义甚至可能涉及不可计算的操作,如在界域功能的平等。 然后,分步,则变换规范成高效计算功能的程序的形式。 每一步保留语义(外延)等等的最终形式(“执行”)是保证在语义上等同于原始形式(“规格”)。 你会看到各种名称,包括“改造计划”,“计划派生”和“程序计算”提到了这个过程。
在一个典型的推导的步骤大多是“等式推理”的应用,数学归纳法(和共同诱导)的几个应用程序增强。 能够执行这种简单实用的理由是在首位函数式编程语言的主要动机,而他们欠其有效性为“真正的函数式编程”的“外延式”的本质。 (术语“外延”和“真正的功能”是由彼得·兰丁的开创性论文的下一个700的编程语言 。)因此,对于曾经是“好等式推理”纯函数式编程的振臂高呼,虽然我没有听到这样的描述几乎因为通常这些天。 在Haskell,外延对应于比其他类型的IO
依赖和类型IO
(例如STM
)。 虽然外延式/非IO
类型有利于正确的等式推理,在IO
/非外延型的设计是坏的不正确的等式推理。
推导,从规格,我在我的Haskell工作中使用尽可能多的特定版本就是我所谓的“语义类型的类态射”(中药)。 这个想法存在通过类型类实例给出了一个数据类型的语义/解释,然后用中医的原则来确定(往往唯一)的大部分或所有类型的功能意义。 例如,我说一个的意思Image
类型是从2D空间中的函数。 那么中医原理告诉我的意思Monoid
, Functor
, Applicative
, Monad
, Contrafunctor
和Comonad
情况下,为对应于功能的实例。 这是在图像上有很多有用的功能非常简洁和令人信服的规格! (该规范是语义功能,加上其语义TCM原则必须坚持标准型类的列表。)然而,我有一个如何来表示图像巨大的空间和语义中医原理消除抽象泄漏。 如果你很好奇,看看这个原则在行动一些例子,检查出纸指称设计类型的类态射 。
Answer 4:
是的,哈斯克尔。
我得到的印象是,想着自己的设计,这是观看的UML为你所做的一个(而油嘴滑舌)的方式,当使用函数式语言程序员不觉得有必要简化其选择的语言了。
Answer 5:
我曾经看过一些视频访谈,并阅读一些采访,与埃里克·梅杰和西蒙佩顿 - 琼斯的喜欢。 这似乎当涉及到建模和理解那些问题域,他们使用类型签名,特别是函数签名。
序列图(UML)可能与功能的组合物。 静态类图(UML)可能与类型签名。
Answer 6:
在Haskell中,您可以通过类型进行建模。
只是写你的功能 - ,讲座和数据签名,没有任何执行开始,并尽量使类型适合。 下一个步骤是快速检查。
如模型排序:
class Ord a where
compare :: a -> a -> Ordering
sort :: Ord a => [a] -> [a]
sort = undefined
然后测试
prop_preservesLength l = (length l) == (length $ sort l)
...
终于实现...
Answer 7:
虽然不建议使用(因为它似乎是不提供下载),但HOPS系统可视化图形一词,这是经常的功能程序的方便表示。
它也可以被认为是一种设计工具,因为它支持记录程序以及构造它们; 我相信,它也可以通过项的重写步骤,如果你想它,所以你可以看到他们展开 。
不幸的是,我相信它不再是积极发展,但。
Answer 8:
我知道我迟到了,但我还是给我的,以防有人回答会发现它很有用。
我想我会去SADT / IDEF0的喜欢的系统性方法。
- https://en.wikipedia.org/wiki/Function_model
- https://en.wikipedia.org/wiki/Structured_Analysis_and_Design_Technique
这些图表可以用直径程序,可在Linux,Windows和MacOS的进行。
Answer 9:
您可以按照第一个数据流处理网络模型实时信号处理:数据流,可视化,和函数式编程由约翰·英树雾都
例如,对于像(Haskell的)代码:
fact n | n == 0 = 1
| otherwise = n * fact (n - 1)
视觉表现是:
Answer 10:
什么是建模与Haskell的数学意义呢? 我认为哈斯克尔整点是,它涉及如此紧密,以数学数学家可以把它捡起来,并运行它。 为什么你会翻译语言到自身?
当与另一种功能的编程语言(F#)工作我用白板上描述大块图,然后使用UML,使用类建模的系统在OO方式。 有在F#的积木(分裂类成是对他们行动的数据结构和功能)略有小姐比赛。 但是对于从业务角度理解它的工作一种享受。 我想补充的头脑,问题是业务/网络导向,不知道如何很好的技术会的东西多一点的财务工作。 我想我可能会捕捉功能无状态的对象,他们应该很好地适应。
这一切都取决于你在工作领域。
Answer 11:
我用USL - 通用系统语言。 我正在学习Erlang和我认为这是一个完美的结合。
太糟糕的文档是非常有限的,没有人使用它。 更多信息这里 。
文章来源: Is there a visual modeling language or style for the functional programming paradigm?