耦合性(Coupling,dependency,或称耦合力或耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度。
内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。耦合性和内聚性都是由提出结构化设计概念的赖瑞·康斯坦丁所提出。低耦合性是结构良好程序的特性,低耦合性程序的可读性及可维护性会比较好。
耦合性可以是低耦合性(或称为松散耦合),也可以是高耦合性(或称为紧密耦合)。以下列出一些耦合性的分类,从高到低依序排列(常考的已经加粗):
-
内容耦合(content coupling,耦合度最高)也称为病态耦合(pathological coupling)当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。
-
公共耦合/共享耦合(common coupling)也称为全局耦合(global coupling.)指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。
-
外部耦合(external coupling)发生在二个模块共享一个外加的数据格式、通信协议或是设备界面,基本上和模块和外部工具及设备的沟通有关。
-
控制耦合(control coupling)指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;
-
标记耦合/特征耦合(stamp coupling)也称为数据结构耦合,是指几个模块共享一个复杂的数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;
-
数据耦合(data coupling)是指模块借由传入值共享数据,每一个数据都是最基本的数据,而且只分享这些数据(例如传递一个整数给计算平方根的函数)。
-
消息耦合(message coupling,是无耦合之外,耦合度最低的耦合)可以借由以下二个方式达成:状态的去中心化(例如在对象中),组件间利用传入值或消息传递 (计算器科学)来通信。
-
无直接耦合:模块完全不和其他模块交换信息。
耦合性和内聚性二个名词常一起出现,用来表示一个理想模块需要有的特点,也就是低耦合性及高内聚性。耦合性着重于不同模块之间的相依性,而内聚性着重于一模块中不同功能之间的关系性。低内聚性表示一个模块中的各机能之间没什么关系,当模块扩展时常常会出现问题。
以下列出一些内聚性的分类,从高到低依序排列(常考的已经加粗):
-
功能内聚:模块完成单一的功能,各部分在此目标下协同工作,是完成这一功能不可缺少的组成部分。
-
顺序内聚:一个模块的处理元素是相关的且必须顺序执行。
-
通信内聚:一个模块的处理元素集中在一个数据结构的区域上。
-
过程内聚:模块内的处理元素是相关的,而且必须按特定的次序执行。
-
时间内聚:一个模块内各任务的执行与时间有关,所有任务必须在同一时间段内进行。
-
逻辑内聚:一个模块完成逻辑上相关的一组任务。
-
偶然内聚:一个模块完成一组任务, 这些任务之间没有联系或联系很松散。