出合理的折衷。某些高质量设计的特点同时也是高质量程序的特点——可靠性。其余的则是设
计所独有的。
以下是设计所独有的一些特点:
智力上的可管理性。对于任何系统来说,智力上的可管理性都是其重要目标之一。它对于
整个系统的完整性是非常重要的,并且会影响程序员们开发和维护系统的难易程度。
低复杂性。低复杂性实际上是智力上的可管理性一部分,由于上述同样的原因,这点也很
重要。
维护的方便性。维护的方便性意味着设计时要为负责维护的程序员着想。在设计中,要不
停地想象维护程序中将会对你的设计提出的问题。应该把维护程序员当作你的听众,同时把系
统设计成明白易懂的。
最小的联系性。最小的联系性指的是按照保持子程序之间的联系最少的原则来设计,应该
利用强内聚,松散耦合和信息隐蔽等作为指导原则来设计系统,使其内部的联系性尽可能少。
最小的联系性可以极大地减小综合、测试和维护阶段的工作量。
可扩充性。可扩充性指的是不必影响系统的内部结构,就可以对系统的功能进行强化,你
可以改变系统的某一部分而不影响其余部分,使得最大可能性变动对系统带来的影响最小。
可重复使用性。 可重复使用性指的是把系统设计成其中许多部分是可以被其它系统借用
的。
高扇入。高扇入指的是对于一个给定的子程序来说,应该有尽可能多的子程序调用它。高
扇入表明一个系统在低层次上充分利用了功能子程序。
低或中等程度扇出。低或中等扇出指的是对一个确定的子程序来说,它所调用的子程序应
该尽可能地少。高扇出(大约7 个以上)说明一个子程序控制了许多其它子程序,因此可能是
很难理解的。而中等扇出则表明一个子程序只把任务交给了数量较少的其它子程序,因此是比
较容易理解的。低扇出(少于4 个)看起来像是一个子程序没有把足够的任务交给其余的子程
序去做,但经验表明并不是这样。一项研究表明有42%只调用一个子程序的子程序是没有错误
的,有32%的调用 2~7 个子程序是没有错误的,而在调用7 个以上子程序的情况中,只有12%
是没有错误的(Card, Church 和Agresi,1986)。由此,Card认为0~2 个扇出是最优的。
可移植性。可移植性指的是把系统设计成很容易转到另外的环境下运行。
简练性。简练性指的是把系统设计得没有任何多余部分。Voltaire曾说过,当一本书不能删
掉,而不是不能添补任何内容时,才可以认为它已完成了。在软件中,这也是非常正确的,因
为当你对系统进行改进时,你不得不对冗余的代码进行开发、评审、测试和维护等等工作,而
且在开发软件的新版本时,新版本也不得不与这些冗余的代码兼容。最有害的观点是“多加入
些又不会有害,怕什么呢?”
成层设计。成层设计指的是尽量分解的层次是成层的,这样你可以在每一个单独的层次上
观察系统,同时也可以使观察的层次是连续的。也就是说当你在某一层次上观察系统时,不会
看到在其它层次上看到的东西。你会经常遇到某些子程序和软件在几个层次上起作用。这样会
使系统很混乱,应尽力避免。
如果在编写一个先进系统时,不得不借用许多旧的、设计得不好的代码,那么你可以在新
系统中建立一个层(layer),与那些旧代码相联接。精心设计这个层使它把旧代码的缺点隐含起
来,从而使新层表现了一整套连续的功能。然后,让程序的其余部分调用些子程序而不是直接