绘图程序

时间:2016-01-28 23:59:15

标签: functional-programming diagram

我倾向于成为一名视觉思想家。因此,如果我可以想象通过程序的数据流,我可以更好地了解其中发生的事情,如果我正在阅读发生了什么的文本故事(伪代码)。

有没有办法直观地表示变量和对象流过的方式并被函数更改?最好是小规模,单个功能内部以及整个程序规模较大的东西。

例如用于教授句子图表的英语课程。电气工程师有电路图。计算机科学中是否有同等学历?

4 个答案:

答案 0 :(得分:8)

我是一个哈斯克勒,所以我会代表函数式编程。我想到的第一件事是commutative diagrams。这些可以用来描述函数和结构如何相互作用;然而,他们宁愿定义不变量/定律而不是行为。

在考虑评估lambda演算(或基于其的高级语言)时,另一件有用的事情是graph reduction中使用的表达式图。它们让您看到表达式的结构,包括共享。当然,只要代码是纯粹的,即没有发生突变,这才有意义。

第三种用于可视化数据如何通过函数传递的图表是不同类型的数据流图,例如用于arrows的数据流图(也可用于正常函数,因为{{ 1}}是箭头),或SICP的"Hendersion diagrams"。这些显示了各个功能如何“插在一起”。另一个观点是用于绘制流处理/管道和过滤器样式的图表,如marble diagrams,它更侧重于时间概念(而且,与箭头图相反,确实代表单个值)。

答案 1 :(得分:4)

有一些自动化解决方案。这两个都显示了计算的每一步中计算机内存中的内容。

Python的Python Tutor完全在线。

python tutor sample.

对于Haskell,请参阅ghc-vis。这个需要安装。

ghc-vis sample

答案 2 :(得分:3)

我也倾向于成为一名视觉思想家。很多时候,当我试图完成一个项目或者我在代码中找不到错误时,我会把它带回到框图中。

这可能会让大型节目变得混乱,但你可以随波逐流。通过图表得到的数据,看看会发生什么。

答案 3 :(得分:0)

B Clay Shannon提到了UML图表,所以我会拿起手套。 UML diagrams已经出现了很长一段时间,是SW开发社区中公认的工具,易于使用和理解。

我会提到我倾向于使用最多的2个图表:

  1. 类图 - 在使用API​​和抽象的OO解决方案中,它很容易在所有不同类中丢失。 类图是OO解决方案的直观表示,可以根据我们的需要使其简洁或复杂。专注于Java,我可以为eclipse IDE推荐ObjectAid插件 - 它重量轻且易于使用: enter image description here
  2. 序列图 - 允许我们记录函数/方法之间的调用序列。想想图形调用堆栈。在大型项目中跟踪复杂事务的非常强大的工具。专注于Java,值得一提的是ObjectAid已经支持SD。适用于SD的免费Eclipse插件是ModelGoonenter image description here
  3. 这只是UML图表的一个非常简短的总结。今天的大多数UML应用程序允许从现有代码中反向工程图,并从图中生成代码。

    这意味着您可以使用UML记录遗留代码,并在功能设计阶段使用UML,在开始处理功能实现时可以从中生成代码。

    其他链接: