软件设计中的“自顶而下”和“自下而上”

在切入主题之前先要了解“上”与“下”的含意是什么,这需要从图1中找答案。图中,应用层在最上面,其下依次是框架、平台、库和操作系统层,因此“上”是指靠近应用层,而“下”则是指靠近操作系统层。

图1
     对于一个被设计的软件模块,存在两个视角。一个是从上向下看,这一看,看到的是模块向上层提供的是什么样的接口,或者说“长什么样”;另一个则是从下向上看,即模块的具体实现是什么,是如何通过使用其下的库(或其它的模块)来塑造它自己的“模样”的。
     那一个软件模块的设计之初,是应当自上而下呢,还是自下而上?
     软件设计最为重要的是塑造形象,即打算将软件设计成什么样,这是软件设计阶段真正要做的事。软件设计时,最重要的不是数据结构的组织,而是形象塑造,当形象有了以后,数据结构的组织就是一件很自然的事了。因此,软件设计应当先是“自上而下”。显然,光有自上而下也不行,当塑造好了模块的形象以后,还得“自下而上”地考虑如何去实现被设计模块。自下而上时还可以审视,现有的哪些模块能被将要设计的模块所重用,从而提高现有软件模块的复用性。
     宏观上讲,两种方法各有特点。自上而下更容易把握整体性,但难度更大,成本也相对高;而自下而上则更容易做到复用,进而获得更好的经济性。在进行软件设计审查(注意,不是代码审查)时,审查者需要注意,不能从自下而上的角度去审视被审查的设计,相反,应当采用自上而下的方式,检查被审查的模块是否很好地体现了它的概念或“模样”。

以上转载至http://yunli.blog.51cto.com/831344/339540

中国有句俗语:

形而上者谓之道,形而下者谓之器
在软件设计中也有类似的意思:
自上而下谓之道
自下而上谓之器

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《软件设计中的“自顶而下”和“自下而上”》有367个想法

  1. 有些晕了……个人总感觉自己编写软件的时候没有大局观,总是过于死扣细节,不知道是不是搞ACM搞的后遗症……哎!软件设计难以从大局着手,总是实现了大部分功能才发现,这样做不是最佳的……不过还好能运行,也就不了了之了!

    1. 大型软件先自顶而下从整体把握构架,然后再可以自底而上局部实现,我是这么理解的,也许只有实际做过项目后才能深入理解吧。如果搞OJ的题目,我更喜欢用C,但是做TC是被逼着用C++。

    2. 从大局着手也需要一定的经验才行啊
      你智商再高,没怎么写过大段的代码(5k以上),也难以做好一个软件
      所以,ACM+项目经验才是最重要的

发表评论

电子邮件地址不会被公开。 必填项已用*标注