这个故事告诉我们,如果不想让坏事传播开来,就应该把坏事隐藏起来,“家丑不可外扬”就是这个道理。为了尽量避免某个模块的行为去干扰同一系统中的其它模块,在设计模块时就要注意信息隐藏。应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。
模块的信息隐藏可以通过接口设计来实现。一个模块仅提供有限个接口(Interface),执行模块的功能或与模块交流信息必须且只须通过调用公有接口来实现。如果模块是一个C++对象,那么该模块的公有接口就对应于对象的公有函数。如果模块是一个对象,那么该模块的公有接口就是对象的接口。一个对象可以有多个接口,而每个接口实质上是一些函数的集合。'Rogerson 1999'
美国也许是世界上丑闻最多的国家,因为它追求民主,不懂得“隐藏信息”。但美国又是软件产业最发达的国家,模块化设计的方法都是美国人倡导的,他们应该很懂得“隐藏信息”。真是前后矛盾,这些美国佬!
5。2。2 内聚与耦合
内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。模块设计追求强内聚,弱耦合。
一、内聚强度
内聚按强度从低到高有以下几种类型:
(1)偶然内聚。如果一个模块的各成分之间毫无关系,则称为偶然内聚。
(2)逻辑内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。
(3)时间内聚。如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。
(4)过程内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。
(5)通信内聚。如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。
(6)顺序内聚。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。
(7)功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚。
二、耦合强度
耦合的强度依赖于以下几个因素:(1)一个模块对另一个模块的调用;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。
耦合按从强到弱的顺序可分为以下几种类型:
(1)内容耦合。当一个模块直接修改或操作另一个模块的数据;或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。
(2)公共耦合。两个以上的模块共同引用一个全局数据项就称为公共耦合。
(3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。
(4)标记耦合。模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。
(5)数据耦合。模块间通过参数传递基本类型的数据,称为数据耦合。
(6)非直接耦合。模块间没有信息传递时,属于非直接耦合。
如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,坚决避免使用内容耦合。
5。2。3 封闭——开放性
如果一个模块可以作为一个独立体被其它程序引用,则称模块具有封闭性。如果一个模块可以被扩充,则称模块具有开放性。
从字面上看,让模块具有“封闭——开放性”是矛盾的,但这种特征在软件开发过程中是客观存在的。当着手一个新问题时,我们很难一次性解决问题。应该先纵观问题的一些重要方面,同时作好以后补充的准备。因此让模块存在“开放性”并不是坏事情。“封闭性”也是需要的,因为我们不能等到完全掌握解决问题的信息后再把程序做成别人能用的模块。
模块的“封闭——开放性”实际上对应于软件质量因素中的可复用性和可扩充性。采用面向过程的方法进行程序设计,很难开发出既具有封闭性又具有开放性的模块。采用面向对象设计方法可以较好地解决这个问题。
5。3 数据结构与算法设计
学会设计数据结构与算法,可以让我们编写出高效率的程序。也许有人要问,在计算机速度日新月异的今天,为什么还需要高效率的程序?
因为我们的雄心与能力是一起增长的,技术进步最快也快不过人们欲望的增长。计算速度和存储容量上的革新仅仅提供了处理更复杂问题的有效工具,所以高效率的程序永远不会过时。
设计高效率的程序是基于良好的数据结构与算法,而不是基于编程小技巧。大多数计算机科学系在设置课程时,都重视学习基本的软件工程原理,以及数据结构与算法设计。
一般说来,数据结构与算法就是一类数据的表示及其相关的操作(这里算法不是指数值计算的算法)。从数据表示的观点来看,存储在数组中的一个有序整数表也是一种数据结构。算法是指对数据结构施加的一些操作,例如对一个线性表进行检索、插入、删除等操作。一个算法如果能在所要求的资源限制(Resource Constraints)范围内将问题解决好,则称这个算法是有效率(Efficient)的。例如一个资源限制可能是“用于存储数据的内存有限”,或者“允许执行每个子任务所需的时间有限”。一个算法如果比其它已知算法所需要的资源都少,这个算法也被称为是有效率的。算法的代价(Cost)是指消耗的资源量。一般说来,代价是由一个关键资源例如时间或空间来评估的。
毋庸置疑,人们编写程序是为了解决问题。只有通过预先分析问题来确定必须达到的性能目标,才有希望挑选出正确的数据结构。有相当多的程序员忽视了这一分析过程,而直接选用某一个他们习惯使用的,但是与问题不相称的数据结构,结果设计出一个低效率的程序。如果使用简单的设计就能够达到性能目标时,选用复杂的数据结构也是没有道理的。
人们对常用的数据结构与算法的研究已经相当透彻,可以归纳出一些设计原则:
(1)每一种数据结构与算法都有其时间、空间的开销和收益。当面临一个新的设计问题时,设计者要彻底地掌握怎样权衡时空开销和算法有效性的方法。这就需要懂得算法分析的原理,而且还需要了解所使用的物理介质的特性(例如,数据存储在磁盘上与存储在内存中,就有不同的考虑)。
(2)与开销和收益有关的是时间——空间的权衡。通常可以用更大的时间开销来换取空间的收益,反之亦然。时间——空间的权衡普遍地存在于软件开发的各个阶段中。
(3)程序员应该充分地了解一些常用的数据结构与算法,避免不必要的重复设计工作。
(4)数据结构与算法为应用服务。我们必须先了解应用的需求,再寻找或设计与实际应用相匹配的数据结构。'Shaffer 1998'
5。4 用 户 界 面 设 计
某个人总有办法让自己保持心情愉快、信心十足。有一天,他向一名围棋九段和一名乒乓球世界冠军挑战,结果他全胜了。因为他跟围棋九段打乒乓球,跟乒乓球冠军下围棋。用户界面的编程技术是人们熟悉得不得了的事,我决定讲一讲比较陌生的“用户界面设计美学”。
有位爱好书画的博士后请我欣赏钢琴演奏会。我从头到尾只听到“叮叮咚咚”的声音,实在享受不到“高雅”,就请这位朋友指点。他虽然也不懂钢琴,却从欣赏书法的角度设法解释如何欣赏音乐。可是我既不懂书法也不懂音乐,真是坐立不安。“美”似乎真的不可言传。我在读本科时,特别喜欢编写用户界面程序,并且常向同学演示、卖弄。我觉得还不过瘾,就写了一篇“用户界面设计美学”的短
小说推荐
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 最新章:第26章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章
- 超级软件
- 《超级软件》作者:钓鱼超级软件 第一卷 大脑也能装软件序 章 君子以自强不息“李天纵,一起去玩魔兽,哥几个带你练级”下午最后一节课结束以后,教室里的同学都开始吵吵晚上要去哪里玩耍。被叫做李天纵的男生中等身材,外形俊朗阳光,薄薄的双唇紧紧抿着,显得很有性格。他略一犹豫,摇摇头“不了,下次吧,我等会还有
- 最新章:第330章
- 交友软件
- 《交友软件》作者:安颜 文案 论约到自己男神是种什么体验 演技负分智商下线总裁攻x外表冷漠内心狂热美人受 炮友变情人 一个演技负分一个配合表演最后还演到一起去的故事 1v1 狗血有 小虐有 女装有第一章 祁明思第一次在交友软件上看到这个男人(也可能是个男孩)的照片的时候,出于对美的事物的欣赏,默默点
- 最新章:第30章
- 修仙软件
- 作者:稀凤】正文第一章 穿越异界和煦的春光照在千灵峰后山,一阵清风吹过,带着淡淡菊花香,诱人入睡。竹叶斑斑,菊花遍开,昭示这座山峰的灵秀。萧泽尧躺在山丘上睡觉,面朝太阳。来这个世界也有三个多月了,他现在所在的门派是三大正宗的仙门,其他两巨头是神殿和圣谷。混沌初开,天地有别,有仙自然有魔。伫立于三大正
- 最新章:第132章
- 软件帝国
- 《软件帝国》作者:香港大亨[软件帝国 香港大亨 著/书籍介绍:何笑的大脑中有个炼丹炉—炼的不是丹药,而是程序和软件!卡巴斯基很牛?放到何笑的炉子中炼一炼,就可以炼出比卡巴斯基还牛的杀毒软件。网站开发很难吗?额,把网站转移到炼丹炉中炼一晚上,一个更完美的网站系统被开发出来了.这是全新的创意,一个能带给
- 最新章:第268章
- 未来软件
- [未来软件 迪厅肥猫 著]书籍介绍:罗宁,刚刚失恋的他又丢了工作。可谓赔了夫人又折兵。但是这也是他奇遇的开始“你是谁“我是你未来的老婆“我去!真的假的”一部山寨手机!但是软件很牛奔!不但可以跟未来的老婆聊天,还能玩各种各样的‘特殊游戏’于是乎他成了世界上最牛奔的主。喜欢的筒子加群:33629503-
- 最新章:第268章
- 我是杀毒软件
- 好书尽在.w 文案 我游走在黑暗与光明之间,杀戮是我的挚友,邪恶是我的仆从,白骨累累化作我的权杖,鲜血殷殷染红我的披风,阴冷双翼所过之处,死亡的哭号必将震天动地 我是死神 同时也是一个杀毒软件。第一章 杀毒程序小兵 每一次呼吸之间,都像是一万年那么漫长 记忆中的碎片不断组合,重叠,犹如一场场离奇的梦
- 最新章:没有后记的后记
- 都市之超神软件
- 简介:刘小陈意外获得一个来自两千年后的手机软件,从此开始非凡人生!拳打流氓汉!脚踹装逼犯!从来不怂,就是爱干“如果有一天你看见我暴打装逼犯,哥想说,哥打的不是人,是无敌的寂寞”书友兄弟群:98295第1章 叫的这么销魂)齐州市大马路上“啪”当爱疯6被摔在地上那一刻,刘小陈双眸呆滞,不敢相信!这爱疯6
- 最新章:第459章