【问题标题】:Diagramming Programs绘图程序
【发布时间】:2016-01-28 23:59:15
【问题描述】:

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

有没有一种方法可以直观地表示变量和对象的流动方式以及被函数改变的方式?最好是在小范围内、在单个函数内部和整个程序的更大范围内工作的东西。

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

【问题讨论】:

  • 非常有趣的想法;您可能想查看 UML,因为有显示程序流程的图表。但是,要达到这种粒度虽然很有趣,但对于除了最简单的应用程序之外的所有应用程序可能都是不切实际的,因为变量可以采用的不同路径取决于...代码中发生的所有其他事情。
  • 没有a方法,但有很多方法,从老式流程图(控制流和数据流)到UML。在您最喜欢的书店中,与“计算机科学”相比,您更有可能在“软件工程”下找到文献。

标签: functional-programming diagram


【解决方案1】:

我是一个haskeller,所以我将代表函数式编程。我首先想到的是commutative diagrams。这些可用于描述功能和结构如何相互作用;但是,他们宁愿定义不变量/定律而不是行为。

在考虑对 lambda 演算(或基于此的高级语言)求值时,另一个有用的知识是表达式图,如 graph reduction 中所用。它们让你看到你的表达结构,包括分享。当然,这只有在代码是纯净的情况下才有意义,即没有发生突变。

第三种图表,用于可视化数据如何通过函数传递,是不同类型的数据流图,例如用于 arrows 的图表(也可用于普通函数,因为 (->) 是箭头),或 SICP 的 "Henderson diagrams"。这些显示了如何将各个功能“连接在一起”。另一种观点是用于绘制流处理/管道和过滤器样式的图表,例如marble diagrams,它更多地关注时间的概念(与箭头图相反,它确实代表了单个值)。

【讨论】:

    【解决方案2】:

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

    Python 拥有完全在线的Python Tutor

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

    【讨论】:

      【解决方案3】:

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

      这可能会让大型程序变得混乱,但您可以通过图表“遍历”一段数据,看看会发生什么。

      【讨论】:

        【解决方案4】:

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

        我会提到我最常使用的两个图表:

        1. 类图 - 在使用 API 和抽象的 OO 解决方案中,很容易迷失在所有不同的类中。 类图是 OO 解决方案的可视化表示,可以根据我们的需要变得简洁或复杂。专攻 Java,我可以推荐 eclipse IDE 的 ObjectAid 插件 - 它重量轻且易于使用:
        2. 序列图 - 允许我们记录函数/方法之间的调用序列。想想一个图形调用堆栈。非常强大的工具,用于跟踪大型项目中的复杂事务。专攻Java,值得一提的是ObjectAid已经为SDs付费支持。一个不错的用于 SD 的免费 Eclipse 插件是 ModelGoon

        这只是一个非常简短的 UML 图总结。如今,大多数 UML 应用程序都允许从现有代码对图表进行逆向工程,并从图表生成代码。

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

        其他链接:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多