维基少年:儿童编程/自顶向下还是自底向上?
自顶向下和自底向上方法非常适合不同的情况。让我们在这里讨论它们。
使用自顶向下方法,我们从顶级程序开始,然后将其分解成许多不同的模块。划分过程被称为逐步细化。当我们设计每个模块时,我们将发现我们需要什么样的子模块,然后继续编程它们。在对较小的子模块进行编程之后,我们将它们组合到更大的模块中。在图表中,每个细化级别都标记为 LN。
当我们编写更高级别的模块时,我们需要某种占位符来代替较低级别的模块。这些占位符称为桩。它们使我们能够测试更高级别的模块,而无需先编码较低级别的模块。
逐步细化的关键是每个模块最终只应执行一项任务。底层模块可以使用几行代码完成。
自顶向下方法的一个优势是我们首先看到了全貌。当我们编写高级模块时,我们不需要立即关心细节。我们的低级模块是根据高级模块设计的,我们已经非常详细地了解了我们希望用它们实现什么。这确保了高层和低层之间的兼容性。因此,自顶向下方法适用于较大的问题。
自底向上方法顾名思义,从结构的底部开始,慢慢地到达顶部。更准确地说,我们从创建最小的模块开始,将它们组合在一起形成更大的模块,并继续这个过程,直到我们构建了整个东西。这种编程方法在已有预制模块的情况下特别有用。
当我们自顶向下设计时,我们的每个模块都是为上面的模块而设计的。当我们自底向上设计时,我们的每个模块都有其自身的用途。因此,较小的模块可以在多个更大的模块中使用,从而促进代码重用。此外,通用模块比特定模块更容易阅读和理解,因此自底向上方法也增强了代码可读性。
自底向上方法也更简单,因为我们不需要为更高级别的模块编写桩。我们编写一个桩,测试它,然后继续。
但是,与自顶向下方法不同,我们并没有立即看到全貌。当我们编写低级模块时,我们并没有考虑到高级模块。这可能会导致高层和低层模块之间连接不良。它也更难监控和管理项目。因此,自底向上方法更适合较小的问题。
无论我们使用的是自顶向下方法还是自底向上方法,我们都倾向于使用库来帮助我们。库是在编程中可以使用的一组预定义模块。例如,物理引擎使我们能够在应用程序中执行逼真的模拟。使用库可以被视为一种自底向上设计形式。
大多数编程语言都带有一个标准库。标准库可以在我们编写任何程序时使用。例如,ActionScript,Flash 应用程序的编程语言,包含一个用于在计算机屏幕上表示视觉元素的复杂标准库。
现在我们已经为我们的程序绘制了蓝图,我们可以开始编写它的算法了。只有一个问题……什么是算法?