跳转到内容

维基少年:儿童编程/自顶向下还是自底向上?

来自维基教科书,开放的世界开放的书籍
维基少年:儿童编程
设计你的解决方案 自顶向下还是自底向上? 编写你的算法

自顶向下和自底向上方法非常适合不同的情况。让我们在这里讨论它们。

自顶向下方法

[编辑 | 编辑源代码]

使用自顶向下方法,我们从顶级程序开始,然后将其分解成许多不同的模块。划分过程被称为逐步细化。当我们设计每个模块时,我们将发现我们需要什么样的子模块,然后继续编程它们。在对较小的子模块进行编程之后,我们将它们组合到更大的模块中。在图表中,每个细化级别都标记为 LN

当我们编写更高级别的模块时,我们需要某种占位符来代替较低级别的模块。这些占位符称为。它们使我们能够测试更高级别的模块,而无需先编码较低级别的模块。

逐步细化的关键是每个模块最终只应执行一项任务。底层模块可以使用几行代码完成。

自顶向下方法的一个优势是我们首先看到了全貌。当我们编写高级模块时,我们不需要立即关心细节。我们的低级模块是根据高级模块设计的,我们已经非常详细地了解了我们希望用它们实现什么。这确保了高层和低层之间的兼容性。因此,自顶向下方法适用于较大的问题。

自底向上方法

[编辑 | 编辑源代码]

自底向上方法顾名思义,从结构的底部开始,慢慢地到达顶部。更准确地说,我们从创建最小的模块开始,将它们组合在一起形成更大的模块,并继续这个过程,直到我们构建了整个东西。这种编程方法在已有预制模块的情况下特别有用。

当我们自顶向下设计时,我们的每个模块都是为上面的模块而设计的。当我们自底向上设计时,我们的每个模块都有其自身的用途。因此,较小的模块可以在多个更大的模块中使用,从而促进代码重用。此外,通用模块比特定模块更容易阅读和理解,因此自底向上方法也增强了代码可读性

乐高积木使用自底向上方法,从底部开始,堆砌越来越多的积木,直到到达顶部。

自底向上方法也更简单,因为我们不需要为更高级别的模块编写桩。我们编写一个桩,测试它,然后继续。

但是,与自顶向下方法不同,我们并没有立即看到全貌。当我们编写低级模块时,我们并没有考虑到高级模块。这可能会导致高层和低层模块之间连接不良。它也更难监控和管理项目。因此,自底向上方法更适合较小的问题。

APE 是 Flash 的物理引擎。

无论我们使用的是自顶向下方法还是自底向上方法,我们都倾向于使用来帮助我们。库是在编程中可以使用的一组预定义模块。例如,物理引擎使我们能够在应用程序中执行逼真的模拟。使用库可以被视为一种自底向上设计形式。

大多数编程语言都带有一个标准库。标准库可以在我们编写任何程序时使用。例如,ActionScript,Flash 应用程序的编程语言,包含一个用于在计算机屏幕上表示视觉元素的复杂标准库。

我们现在可以开始了吗?

[编辑 | 编辑源代码]

现在我们已经为我们的程序绘制了蓝图,我们可以开始编写它的算法了。只有一个问题……什么是算法?

华夏公益教科书