智能虚拟控件的耦合是对控件间互联程度的度量。耦合依赖于控件件接口的复杂性、引用或进入控件所在的点以及什么数据通过接口传递。
1.耦合的分类
按耦合强度,耦合也可分为七类:非直接耦合、数据耦合、特征耦合、控制耦合、外部耦合、公共耦合、内容耦合。在设计中,应设计尽可能低的耦合的控件。控件间的简单连接可使系统易于理解,并且当错误发生于某个位置并在系统中传播时更少的受“连锁反应”的影响。图9-5是一个不同类型控件耦合的例子。
图9-5 不同类型控件耦合的例子
在低级别耦合上,如图9-5所示,控件a和b是不同控件的从属控件,相互之间无关,因而没有直接耦合发生;控件c是控件a的从属控件并通过常规的参数表访问,数据通过该列表传递,只要存在简单的参数表(例如,传递简单数据存在项一对一的对应),这部分结构中就体现了低耦合(数据耦合);当数据结构的一部分(而不是简单的参数)通过控件接口传递时就会出现数据耦合的一个变体——特征耦合,这种情况出现在控件b和a之间。
在中度级别耦合上,耦合的特性是在控件间传递控制。控制耦合在大多数控件设计中非常普遍,如图9-5所示。在这里“控制标记”(在从属控件或上级控件中控制决策的变量)在控件d和e之间传递。
高级别耦合一般发生在控件连接到系统外部环境的场合,例如,I/O将控件耦合到特定设备、格式和通信协议上。外部耦合是重要的,但应该局限在结构中少量的控件上。高耦合还发生在许多控件引用一个全局数据区时。公共耦合就像这种模式的名称一样,在图9-5中,控件c、g和k每一个都访问一块全局数据区中的数据项(例如,一个磁盘文件或一个全局可访问的内存区),控件c初始化该项,以后控件g重新计算并使用该项,此时假如出现了错误,并且g错误地更新了该项,在以后的处理中,控件k读取该项,试图处理它而失败了,引起系统异常终止。引起系统异常终止的表面原因是控件k,而实际的原因在于控件g。
最高层次的耦合是内容耦合,出现在一个控件使用在另一个控件的边界中维护的数据或控制信息的情况下,其次,出现在分支并跳转到控件中时,这种模式的耦合能够并且应该避免。
2.耦合的度量
控件耦合提供了一种对一个控件与其他控件、全局数据和外部环境耦合的连接的指示。以上给出了耦合定性的描述。
Dhama提出了一个包含数据和控制流耦合、全局耦合和环境耦合的对模块耦合的度量,同样,该度量可以用来拼搭控件耦合。根据Dhama的定义,计算控件耦合需要的度量按上述三种耦合类型的每一种来定义。
1)对数据和控制流耦合:
di=输入数据参数的个数
ci=输入控制参数的个数
do=输出数据参数的个数
co=输出控制参数的个数(www.xing528.com)
2)对全局耦合:
gd=用作数据的全局变量的个数
gc=用作控制的全局变量的个数
3)对环境耦合:
w=被调用控件的个数(扇出)
r=调用所考虑的控件的个数(扇入)
使用这些度量,一个控件耦合指标mc以下面方式定义
mc=k/M
其中,k=1,一个比例常数;而
M=di+a×ci+do+b×co+gd+c×gc+w+r
其中a=b=c=2
有些研究人员指出,k、a、b、c的值可以进行调整。
mc的值越高,整体控件耦合越低。为了让耦合度量随着耦合度的上升而上升,可用如下改进的耦合度量定义
C=1-mc
其中,耦合度在最小值0.66到接近1的最大值之间非线性上升。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。