4.3.5 开发过程小结

calendar 程序的完整开发过程,展示了自顶向下设计方法的强大能力。当面临一个复杂 问题而感到无从下手的时候,可以尝试将原始问题分解为若干个子问题,然后再去考虑每个 子问题的解决方案。这个分解过程可以重复进行,从结构图的顶层开始,自顶向下逐步求精, 直至得到所有子问题的精确代码。

自顶向下设计过程可以概括为以下四个步骤:

(1)将问题分解为若干子问题;

(2)为每个子问题设计一个函数接口;

(3)将原问题的算法用各子问题对应的函数接口来表达;

(4)对每个子问题重复(1)~(3)的过程。 经过以上步骤,高层的抽象接口在低层逐步得到细化,最终到达可以直接用 Python 基

本语句实现的层次。 自顶向下设计是编写复杂程序的重要工具,虽然这种方法会导致很多小模块(函数),看上去设计起来有点麻烦,但这其实是事半而功倍的方法。事实上不采用模块化方法是不可 能设计出复杂系统的。

模块化设计和单元测试都是分离关注点原则的具体体现,前者使我们能够设计复杂程 序,后者使我们能够调试复杂程序。作为初学者,应当不断地实践模块化方法,让模块化思 想和方法变成自己的本能思维方式。

最后要说明一点,自顶向下设计是非常强大的编程技术,但并非唯一的编程技术,有时 这种设计方法并不可行。例如,自顶向下设计的第一步是对整个系统进行任务分解,然而在 开发某些应用时,可能无法对整个系统的需求先有充分的理解,只能随着开发的进行,逐渐 获得对系统的理解,这时就不可能采用自顶向下设计。

本书后面还会介绍其他程序设计方法,比如原型方法、面向对象设计等等。程序设计是一个创造性的过程,并不存在什么唯一正确的方法或者一成不变的规则。好的开发者应当掌 握多种设计方法。虽然通过读书学习可以了解程序设计技术,但更重要的是通过实践来掌握 在什么场合应用以及如何应用这些方法。