《代码大全》 第六章 模块化设计 高级结构设计 读书笔记

常见要隐藏的信息

容易改动的区域

对硬件有依赖的地方

输入和输出

非标准语言特征

难于设计和实现的域

状态变量

数据规模限制

商业规则

复杂的数据

复杂的逻辑


面向对象设计的步骤是: 
·   识别对象及其属性,它往往是数据。 
·   确定对每个对象可以做些什么。 
·   确定每一个对象可以对其它对象做些什么。 
·   确定每个对象对其它对象来说是可见的部分——哪一部分是开放的,哪一部分是专用
的。 
·   确定每个对象的公共接口。 


当你编写程序快结束时,你非常希望能有机会再重新编写一次,因为在编写过程中你对问题又有了更深的理解。这对设计也是同样适用的,只不过在设计中这个循环的周期更短,带来的好处也更大,因此,你完全可以在设计过程中进行几次往返。


定义成只有通过解决它或者部分解决它,才能给出明确定义的问题。这个似是而非的定义事实上暗示着你不得不首先“解决”这个问题,对其有一个清楚的定义和理解,然后再重新解决一遍,以获得正确的解决办法。(关于险恶问题的一个富于戏剧性的例子便是托卡马大桥的设计。在修建大桥时,主要考虑的便是它应该能承受设计载荷并能抗12 级大风。然而,没人想到风在吹过桥时会产生“卡门旋涡”——一种特殊的空气动力学现象,从而使桥产生横向简谐振动。结果,在1940  年的一天,只在7 级风的作用下,桥便因振动而坍塌了。 )


一种很有效的启发工具就是硬算(暴力穷举)。不要低估它。一个有效的硬算解决方案总比优雅却不能解决问题的方案要好。


受迎的设计特点 

以下是设计所独有的一些特点: 
智力上的可管理性。对于任何系统来说,智力上的可管理性都是其重要目标之一。它对于整个系统的完整性是非常重要的,并且会影响程序员们开发和维护系统的难易程度。 

低复杂性。低复杂性实际上是智力上的可管理性一部分,由于上述同样的原因,这点也很重要。


维护的方便性。维护的方便性意味着设计时要为负责维护的程序员着想。在设计中,要不停地想象维护程序中将会对你的设计提出的问题。应该把维护程序员当作你的听众,同时把系统设计成明白易懂的。 


最小的联系性。最小的联系性指的是按照保持子程序之间的联系最少的原则来设计,应该利用强内聚,松散耦合和信息隐蔽等作为指导原则来设计系统,使其内部的联系性尽可能少。最小的联系性可以极大地减小综合、测试和维护阶段的工作量。 


可扩充性。可扩充性指的是不必影响系统的内部结构,就可以对系统的功能进行强化,你可以改变系统的某一部分而不影响其余部分,使得最大可能性变动对系统带来的影响最小。 

高扇入。高扇入指的是对于一个给定的子程序来说,应该有尽可能多的子程序调用它。高扇入表明一个系统在低层次上充分利用了功能子程序。 低或中等程度扇出。低或中等扇出指的是对一个确定的子程序来说,它所调用的子程序应该尽可能地少。


简练性。简练性指的是把系统设计得没有任何多余部分。Vol ta i re 曾说过,当一本书不能删掉,而不是不能添补任何内容时,才可以认为它已完成了。在软件中,这也是非常正确的,因为当你对系统进行改进时,你不得不对冗余的代码进行开发、评审、测试和维护等等工作,而且在开发软件的新版本时,新版本也不得不与这些冗余的代码兼容。最有害的观点是“多加入些又不会有害,怕什么呢?” 


成层设计。成层设计指的是尽量分解的层次是成层的,这样你可以在每一个单独的层次上观察系统,同时也可以使观察的层次是连续的。也就是说当你在某一层次上观察系统时,不会看到在其它层次上看到的东西。你会经常遇到某些子程序和软件在几个层次上起作用。这样会使系统很混乱,应尽力避免。 

标准化技求。标准化技术是深受欢迎的。一个系统使用的奇特的、非标准的技术越多,当别人第一次读它时就会越感到可怕,也越难理解。应该通过采用常用的、标准化的技术使得人们在阅读它时是一种熟悉的感觉。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值