软件设计松散耦合性.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件设计松散耦合性

松散耦合性 所谓耦合性指的是两个子程序之间联系的紧密程度。耦合性与内聚性是不同的。内聚性是指一个子程序的内部各部分之间的联系程度,而耦合指的是子程序之间的联系程度。研究它们的目的是建立具有内部整体性(强内聚性),而同时与其它子程序之间的联系的直接、可见、松散和灵活的子程序(松散耦合)。子程序之间具有良好耦合的特点是它们之间的耦合是非常松散的,任一个子程序都能很容易地被其它子程序调用。火车车箱之间的联接是非常容易的,只要把两节车箱推撞到一起,挂钩就会自动挂上,想象一下,用螺栓把它们固定到一起,或者只有特定的车厢之间才能联接到一起,那么事情将会有多么麻烦。火车车厢之间的联接之所以非常容易,是因为它们的联接装置非常简单。同样,在软件中,也应该使子程序之间的耦合尽量简单。在建立一个子程序时,应尽量避免它对其它子程序有依赖性,应该使它们像商业上的伙伴一样相互分离,而不要使它们像连体婴儿一样密不可分。类似 Sin()的函数是松散耦合的,因为它所需要的只是一个传递进去的角度值。而类似 InitVars(varl,varZ,var3,??,varN)的函数则是紧密耦合的,因为调用程序事实上知道函数内部做什么。依靠使用同一全局变量联系在一起的子程序之间,其耦合程度则更高。5.4.1 耦合标准 以下是几条估计子程序间耦合程度的标准: 耦合规模。所谓耦合规模是指两个子程序之间联系的数量多少。对于耦合来说,联系的数量越少越好,因为一个子程序的接口越少,那么在把它与其它子程序相连接时,所要做的工作也越少。一个只有一个参数的子程序与调用它的程序间的耦合程序,要比有 6 个参数的子程序与调用它的程序间的耦合程度松散得多。一个使用整型参数的子程序与其调用程序之间的耦合程度,也要比一个使用有 10 个元素数组或者结构化数据的子程序与其调用程序之间的耦合程度松散得多。同样,使用一个全局变量的子程序与使用十二个全局变量的子程序相比,其耦合程度也要松散得多。密切性。密切性指的是两个子程序之间联系的直接程度。联系越直接越好,两个子程序之间联系最密切的是参数表中的参数。当两个程序直接通讯时,这个参数就像接吻时的嘴唇。联系密切程度稍低的是作用于同一全局数据的两个子程序。它们之间交流的直接性稍低。全局变量就像是两个子程序之间的爱情,它可能消失在信中,也可能到你想要它到的地方。联系程度最低的是作用于同一数据库记录或文件的两个子程序,它们都需要这个数据但却又羞于通知对方,这个被分享的数据就像是在课堂上传阅着的一张写有“你喜欢我吗?请回答‘是’还是‘不是’”的纸条。可见性。可见性是指两个子程序之间联系的显著程度。编程不像是在中央情报局中工作,不会因为行动隐蔽而受到表彰,它更像是作广告,干得越是大张旗鼓,受到的表彰也就越多。在参数表中传递数据是明显的,因而也是好的。而通过改动全局数据以便让别的子程序来使用它,则是一个隐蔽的联系因而也是不好的。对全局数据联系进行注释以使其更明显,可能稍好些。 灵活性。灵活性是指改变两个子程序之间联系的容易程度。形象地说,你更喜欢电话上的快速插口装置,而不会喜欢用电烙铁把铜线焊到一起,灵活性可能有一部分是由其它耦合特性决定的,但也有一些区别。比如,有一个按照给定的被雇用日期和被雇用部门,寻找雇员的第一个监工的子程序,并命名它为 LookUpFirstSupervisor()。同时,还有一个对变量 EmpRec 进行结构化的子程序,变量 EmpRec 包括雇用日期、雇用部门等信息,第二个子程序把这个变量传 给第一个子程序。从其它观点来看,两个子程序之间的耦合是非常松散的。因为处于第一个和第二个子程序之间的变量 EmpRec 是公共的,所以它们之间只有一个联系。现在,假设需要用第三个子程序来调用子程序 LookUpFirstSupervisor(),但这个子程序中不含 EmpRec,却含有雇用部门和雇用日期信息。这时 LookUpFirstSupervisor()就不是那么友好了,它不情愿与第三个子程序进行合作对于调用 LookUpFirstSupervisor()的子程序来说,它必须知道 EmpRec 的数据结构。它可以使用一个仅有两个域的变量 EmpRec,但这又需要知道 LookUpFirstSupervisor()内部结构,即那些仅供它使用的域,这是一个愚蠢的解决方法。第二个方案是改动 LookUpFirstSupervisor,使它自带雇用部门和雇用日期信息,而不是使用 EmpRec。不管采用哪种方案,这个子程序都不像最初看起来那么灵活了。如果愿意的话,一个不友好的子程序也是可以变为友好的。这种情况可以通过让它明确带有雇用部门和日期信息,而不再使用 EmpRec 来达到这一目的。简而言之,如果一个子程序越容易被其它子程序调用,那么它的耦

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档