什么时候使用伪代码代替流程图?


9

我是一名学习各种编程技术的学生,并且遇到过伪代码和流程图。我知道这两个都是为了在实际编程之前仔细考虑问题,但是我对此有一些疑问。

  1. 什么时候使用伪代码计划,什么时候使用流程图?还是在实际编程之前同时做这两项更好 特别是对于JAVA中的小型街机游戏,因为这是我的下一个项目。
  2. 我注意到伪代码与实际代码非常相似,而不是流程图。这是否会使伪编码更好,因为您本质上是将伪代码复制/粘贴到程序中(当然,您必须更改伪代码以适合语言。我了解这一部分)。
  3. 在编程时同时使用这两种方法是否可行?特别是前面提到的相同游戏。谢谢。

显然,您不会使用没有流程的流程图-即几乎所有声明性实体。
SK-logic

1
我真的不记得上一次看到编码流程图了。类和数据流图,用例图,是的。但不是流程图。也许它们在游戏开发中更为普遍。
罗伯特·哈维

@ RobertHarvey,FSM图(本质上是流程图)在硬件设计中经常使用
SK-logic

Answers:


7

流程图和伪代码通常具有相同的表达水平,但线性化程度不同。伪代码是线性的(即带有指令的行序列),流程图不是。因此,流程图是较高的抽象级别,在编写伪代码之前或用于文档时使用。

在我看来,流程图比伪代码有两个强大的优势:首先,它们是图形的。许多非技术人员都非常担心结构化文本,而对图形化描述则不那么担心,因此流程图对他们来说会更好。其次,流程图在表达元思考方面要好得多,例如显示与分支相对的执行主线。

您的问题详细:

  1. 对于一个非常复杂的问题,您将首先使用流程图,然后使用伪代码。当您感到足够安全时,两者都是可选的。
  2. 是的,伪代码具有可与真实代码合并的优点。例如,史蒂夫·麦康奈尔(Steve McConnell)强烈建议先用伪代码编写方法,然后再将伪代码保留在代码中作为注释。
  3. 我总是觉得在设计过程中需要绘制流程图表明您的问题分配不足。非平凡的流程图表示复杂的逻辑,应避免付出高昂的代价。

1
流程图也是确保每个决策点都为不太常见的路径和最常见的路径定义动作的好方法。这有助于确保您在拒绝批准或取消订单时知道该怎么办!在极端情况下,通常会有更多的错误,因为人们在测试发现它们时会忘记做这些错误或在质量检查期间匆忙地执行它们。
HLGEM 2012年

2

关于伪代码

老实说,我不使用伪代码。通常,仅编写代码会更快,因此,当我完成代码后,它就是实际的代码。在某些情况下,伪代码可能会有所帮助,但通常您正在处理非常复杂的内容,而只是试图破坏方法或某些内容的结构。在这些情况下,我会在IDE中使用注释来布局结构,直到正确为止。然后,我进入并在注释中编写实际代码。这可以帮助我做一些事情:

  • 通过阅读评论并看到它们之间明显的差距,我可以看到我已经实现和尚未实现的领域。
  • 当我填写真实的代码时,我有一些注释以英语解释我在做什么。(如果它太复杂以至于我需要先编写伪代码,他们可能会需要它)。

在流程图上

代码通常会发生很大的变化,以至于流程图除了更大,更全系统范围的体系结构设计或文档之外,对流程图没有帮助。在那种情况下,我将只在白板上画一张图,以了解事情的要点或向团队中的其他人展示。除非您确实需要流程图来帮助您理解,否则您实际上并不需要他们“正确”执行软件。如今,有许多用于IDE插件可以从代码本身以及类图和其他代码生成流程图(反之亦然)。您需要做一个非常准确的流程图的唯一实时时间是,您无法立即保留整个体系结构以及事物如何在您的脑海中运转,并且需要通过可视化方式进行交流。


0

通常,我在个人项目上工作时不会写流程图(因为项目规模不大),并且大多数输入,输出和过程都很清晰。

但是随着您将开始处理具有不同输入源的复杂大型项目,平面文件,数据库,手动界面等流程图非常方便。

我建议您编写伪代码和UML语法,因为这些工具将帮助您提出更好的类,方法等。有时,在编写伪代码时,您会发现解决程序的不同且更有效的方法。


0

伪代码是为了向那些至少了解代码基础的人快速表达一个想法。流程图为其他人理解相同的事物绘制了漂亮的图画。

流程图通常用于文档目的,因为许多人使用该文档,并且流程图对于非程序员而言比伪代码更易于遵循。在您自己进行的项目中,坚持使用伪代码很好,因为伪代码更加有用,而且创建起来也容易得多,因为您只需要文本编辑器。


0

流程图是一种高度抽象的概念,它们使您可以计划应该如何进行,例如

如果x死y获胜

他们不需要依靠类和方法来设计程序,而伪代码则提供了较低的抽象级别(尽管它确实取决于)

if(isdead(s))y.win()

这样便可以根据您使用的语言将伪代码转换为实际程序。

对于游戏,我建议先使用流程图,然后设计类和方法,编写伪代码,最后将其转换为程序


0

我会考虑您正在编写的代码的性质。如果是:

  1. 高度迭代/递归
  2. 分支方式复杂
  3. 在您要代表的几个系统中实现

在前两种情况下,伪代码变得比大图片图越来越难阅读。另一方面,大部分是线性的代码使图表变得无聊得令人厌烦,这实际上使该过程变得更加难以理解,因为它炸了多少。

对于第三种情况,流程图更擅长表示跨越系统边界并代表整个过程的过程。


0
  1. 您应该使用自己喜欢的任何方式。就是说,我的印象是,这些天流程图没有被广泛地用于勾画程序控制。一方面,与伪代码相比,它们通常是非结构化的。使用诸如UML之类的类依赖图在更高层次上描述您的体系结构更为常见。同样,如果您的应用程序具有状态机,则绘制(类似于流程图的)状态机图是必不可少的。
  2. 我认为你是对的。一种工作方式是将伪代码作为注释写在源文件中,然后在其中插入实际的实现行。
  3. 同样,使用任何您认为合适的东西。如果不确定,请尝试两种方法。我希望您的实践会很快汇聚到对您最有用的方面。除非我试图解开特别复杂的执行顺序,否则我个人认为流程图没有用。

0

可以编写Java时为什么还要编写伪代码?我发现Java,良好的IDE和Javadoc是解决编程问题的最简单方法-至少是面向对象的。(并且,街机游戏应该是OO。)为此,我们从头开始设计语言。它简单明了。(也许对于许多目的来说太简单了,但是,这是我所见过的最好的东西。)Javadoc中的超文本以及通过IDE在代码本身中的超文本构成了比您甚至都无法理解的“图表”一张大纸。Java代码与任何伪代码一样简单,而且更加严格。并且一旦您对它进行了“图解”和“伪”编码,该程序就会真正运行!


1
java和其他语言可能会很冗长。“ public static void main ..”或“ system.out.println”或带有驼峰符号的很长的标识符,很长时间就在那里。n然后捕获了2b的异常。并且调用任何库都可以wind。我记得10年前打开文件。类似于new BufferedReader(new InputStreamReader(System.in));现在显然更容易了mkyong.com/java/… 但实际上,您调用的任何库都可能会遇到麻烦,而不是像您可以想象的那样简洁的伪代码
barlop

同样使用Java或任何语言,您会遇到编译错误。没有一个带有伪代码。您可以专注于设计而不会分心。伪代码的注释可以更简短,因为伪代码在头脑中更清晰。您不仅可以只考虑一种语言,而且您可能会看到啊,我将使用另一种语言。编写起来更快捷,更省力(无需编译-甚至非常流利的编译错误),因此更少的编写时间使重新设计变得更加容易。
barlop

@barlop:它对我有用,但可能不适用于每个人。我在类中遗漏了很多代码(例如“ BufferedReader”),直到需要它或需要知道是否可以使它工作为止。即使拥有了它,它也很好地隐藏在我不需要考虑整体设计的类中。编译器错误很容易修复,可以避免重大的设计缺陷,例如在无法获得正确类实例的地方使用错误的类。我承认,我已经以这种方式“设计”了只能用Java编写的软件,但是OP 正在使用Java。
RalphChapin 2013年

假设您要打开一个文件,您看到openfile(“ c:\ blah \ file”)的伪代码比Java短吗?还是那个打印“ dfdfd”比java做的短?我还没有完成伪代码和多个类的页面。部分原因是因为我年龄还没有编写大型程序b)部分原因是我认为我不会,我想我会写一些伪代码然后将其实现。任何其他伪代码(如果有)将是更高级别的。我可能会列出所有类和方法,包括构造函数。所以我知道什么类是什么,我可以得到它的一个实例..
barlop

所以我不会处于使用错误类的情况,但是无论如何,如果是我的程序,我会在笔记中写下什么类是什么..类是相当高级的。如果我不记得它,我会做个说明。伪代码是关于什么意思的全部内容,因此,如果您打算创建类等等的实例并编写了bleh,那么这只是一种书写上的错字,但这并不妨碍您的设计。(如果您是为自己写的,因为“ cos,您就知道您的意思,并且像是在使用blah)。
barlop

0

如果您对if语句感到非常困惑,并且试图理解这一点,则可以使用流程图。或者,如果您想了解循环,请查看计数器的效果。如果您正在学习,它会有所帮助。

感觉有点限制性,因为您必须在框中输入简短的声明。而且,如果您的程序是非常线性的,并且循环和ifs都很琐碎,那么我认为它没有用。

伪代码在设计程序时很有用,而不必分散语法正确性的注意力,并且不会引起某些语言的冗长困扰。编写起来更快,这也使得重新设计代码变得更加容易。而且,您可以按照自己的想法进行简明扼要的编写,令人愉悦的编写,花费更少的心思才能投入使用(无需或几乎不用调试),并且可以更加专注于全局和设计。

因此,对您自己有用。

它们也可以用来与他人交流。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.