“自上而下”的设计从某个很高的抽象层次开始。你定义出基类或其他不那么特殊的设计元素。在开发这一设计的过程中,你逐渐增加细节的层次,找出派生类、合作类以及其他更细节的设计元素。
“自下而上”的设计始于细节,向一般性延伸。这种设计通常是从寻找具体的对象开始,最后从细节之中生成对象以及基类。
自上而下策略和自下而上策略的最关键区别在于,前者是一种分解(decomposition)策略而后者是一种合成(composition)策略。前者从一般性问题出发,把该问题分解成可控的部分。后者从可控的部分出发,去构造一个通用的方案。
自上而下设计的强项是它简单,因为人们是很善于把一些大食物分解为小的组件,而程序员更是精于此道。
自上而下的另一个强项是你可以推迟构建的细节。软件系统常常受到构建细节变化的骚扰,因此,尽早知道应该把这些细节隐藏在继承体系的底层类中,是非常有益的。
自下而上的一个强项是通常能够较早找出所需的功能,从而带来紧凑的、结构合理的设计。
自下而上的一个弱项是很难完全独立的使用。