你的位置:pcMing工作室 >> 资讯 >> 编程开发 >> 软件工程 >> 详细内容 在线投稿

耦合性与内聚性

排行榜 收藏 打印 发给朋友 举报 来源: javaEye   发布者:jiangduxi
热度153票  浏览36次 【共0条评论】【我要评论 时间:2010年8月14日 17:45

p[+bX2mW I!sY/E01) 耦合性

6L~.o kOE0
  •  耦合性是对一个软件结构内部不同模块间联系紧密程度的度量指标。
  •  决定耦合性高低的主要因素
pcMing工作室Mlj,@T N h(r.p

  由于模块间的联系是通过模块接口实现的,因此,模块耦合性的高低主要取决于模块接口的复杂程度、调用模块的方式以及通过模块接口的数据。模块间的耦合性主要可划分为如下几种类型。

H$o0x2J;GX%`+T0 pcMing工作室*j"i1yCO;v

pcMing工作室h ls:R7VV5N@}C/Lr

K3t S)[Dg5@7v&Nv q0(1) 数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。数据耦合的例子如下所示: pcMing工作室:s(h8ilT

pcMing工作室:pg5T psX ~n

sum(int a,int b)

uj&d'yB6Q3gd0

s7aR"r T$?0{int c; pcMing工作室!cr*~,E%y

2qX3S[W K!P"`0c=a+b;

hU)`:D"W,DYy8h0 pcMing工作室6U0a TUHL%qiAv

return(c); pcMing工作室6S-c2y%`&w6v

*Q.i+V4sF{0} pcMing工作室Qg5?&q%t E2|

h-nfh6Nl"a]j2t0main()

6Z%S)Lw{r k2n.Q0 pcMing工作室4A$U7G^Z?{\)e

{int x,y;

5GT(Y V8d4?mZ+S0

C(VK:wE-G"Pe0 

[9Gq(RZ#|0 pcMing工作室R~tI9Z"uQ

printf("x+y= %d",sum(x,y));

+S(W[\ g0 pcMing工作室^EV| VG6ZI8O

}/*主函数与sum函数之间即为数据耦合关系*/ pcMing工作室g)} ?EH!h

pcMing工作室4h i"~%^l QIu6GN

(2) 公共耦合。若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个模块间就具有了公共耦合关系。 pcMing工作室IXw jx\V

pcMing工作室M-]jLr

pcMing工作室c+`-Y$G"Ar

pcMing工作室/|xY:a2QV/a0F] {+umv

(3) 控制耦合。若模块之间交换的信息中包含有控制信息(尽管有时控制信息是以数据的形式出现的),则称这种耦合为控制耦合。控制耦合是中等程度的耦合,它会增加程序的复杂性。控制耦合的例子如下所示: pcMing工作室`B U EL0X ||

hc6U dW A&c0void output(flag) pcMing工作室X |.T8Mv o6U

HBRodc b;V0{if (flag) printf("OK! "); pcMing工作室 e CQ N$@

pcMing工作室 UkCyq'c

else printf("NO! "); pcMing工作室%e(W$D&UuBA

&S|v8YM z`,}*T/sf0} pcMing工作室0V]b%w"U!Q[DS zE

H z,HP JS8O:`0main() pcMing工作室wo9J'O;E"c

5e.o1^^b;z$`R0{ int flag; pcMing工作室2}4u6z:PG|

s9bXMe!s't"t0output(flag); pcMing工作室mufaq

pcMing工作室 n&@L)[T(i z-?Hc

}/*主函数与output函数之间即为控制耦合关系*/ pcMing工作室.hgq'`D r3T

pcMing工作室G~4{i3Sz4b

Q8F+F} I%t fY0 pcMing工作室7Kx }z%_t

(4) 内容耦合。若一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修改,或通过非正常入口进入到另一模块内部,或一个模块具有多个入口,或两个模块共享一部分代码,则称模块间的这种耦合为内容耦合。内容耦合是所有耦合关系中程度最高的,会使因模块间的联系过于紧密而对后期的开发和维护工作带来很大的麻烦。 pcMing工作室vl t X#g9T

pcMing工作室jC W#^*D^&EF$ao

2) 内聚性 pcMing工作室6Ph-Y?Qe

pcMing工作室:nP { t/L5G

内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标。模块中组成元素结合的越紧密,模块的内聚性就越高,模块的独立性也就越高。理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。模块的内聚性和耦合性是两个相互对立且又密切相关的概念。

$BO*Hp kPt?^~,k0 pcMing工作室D!hj0W$vu3g0_ hwS

  经实践证明,保证模块的高内聚性比低耦合性更为重要,在软件设计时应将更多的注意力集中在提高模块的内聚性上。模块的内聚性主要可划分为如下几种不同的类型。

1C){dPGx0

m_X l3T$olk C0(1) 偶然内聚。若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。 pcMing工作室 J\!k([i2} i

pcMing工作室kF-f.P0d,[i'd#N)~d

(2) 逻辑内聚。这种模块是把几种功能组合在一起,每次调用时,则由传递给模块的判定参数来确定该模块应执行哪一种功能。

M;m }3c Xx\ L0

:X,L9x,D{\ C0 pcMing工作室z^(Nco"F;Q

pcMing工作室mh4SMK[

(3) 时间内聚。若一个模块包含了需要在同一时间段中执行的多个任务,则称该模块的内聚为时间内聚。例如,将多个变量的初始化放在同一个模块中实现,或将需要同时使用的多个库文件的打开操作放在同一个模块中,都会产生时间内聚的模块。

lv+cMmf3Fb5Lzw0 pcMing工作室q6^8xH+d%e|.[

(4) 过程内聚。若一个模块中的各个部分相关,并且必须按特定的次序执行,则称该模块的内聚为过程内聚。在结构化程序中,通常采用程序流程图作为设计软件和确定模块划分的工具,因此,这样得到的模块往往具有过程内聚的特性。 pcMing工作室qU5F5W"cf t@

pcMing工作室$RCh2D*U$v

(5) 通信内聚。若一个模块中的各个部分使用同一个输入数据或产生同一个输出数据,则称该模块的内聚为通信内聚。 pcMing工作室]6{mzr)Z

8i&k:tf|4l!S0(6) 顺序内聚。若一个模块中的各个部分都与同一个功能密切相关,并且必须按照先后顺序执行(通常前一个部分的输出数据就是后一个部分的输入数据),则称该模块的内聚为顺序内聚。 pcMing工作室 ~ USCdbs%_'s6j

b,k"kR+Ak0(7) 功能内聚。若一个模块中各个组成部分构成一个整体并共同完成一个单一的功能,则称该模块的内聚为功能内聚。 pcMing工作室/{jL@@dm)b

pcMing工作室 GQ Ye"?"o-]

4n*_4h Iqs;Vs)g,i0
顶:10 踩:8
对本文中的事件或人物打分:
当前平均分:0.33 (58次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.77 (39次打分)
【已经有38人表态】
5票
感动
7票
路过
5票
高兴
1票
难过
1票
搞笑
2票
愤怒
6票
无聊
11票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】

网络资源