安然写字的地方

耦合内聚

耦合性的分类

耦合性可以是低耦合性(或称为松散耦合),也可以是高耦合性(或称为紧密耦合)。以下列出一些耦合性的分类,从高到低依序排列:

  • 内容耦合(content coupling,耦合度最高) 也称为病态耦合(pathological coupling)当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。
  • 共享耦合/公共耦合(common coupling) 也称为全局耦合(global coupling.)指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程度随耦合模块的个数增加而增加。
  • 外部耦合(external coupling) 发生在二个模块共享一个外加的资料格式、通信协议或是设备界面,基本上和模块和外部工具及设备的沟通有关。 控制耦合(control coupling) 指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;
  • 特征耦合/标记耦合(stamp coupling) 也称为数据结构耦合,是指几个模块共享一个复杂的数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;
  • 资料耦合/数据耦合(data coupling) 是指模块借由传入值共享资料,每一个资料都是最基本的资料,而且只分享这些资料(例如传递一个整数给计算平方根的函数)。
  • 消息耦合(message coupling,是无耦合之外,耦合度最低的耦合) 可以借由以下二个方式达成:状态的去中心化(例如在对象中),组件间利用传入值或消息传递来通信。 无耦合:模块完全不和其他模块交换信息。

内聚性的类型

内聚性是一种非量化的量测,可利用评量规准(英语:rubric (academic))来确认待确认源代码的内聚性的分类。内聚性的分类如下,由低到高排列:

  • 偶然内聚性(Coincidental cohesion,最低) 偶然内聚性是指模组中的机能只是刚好放在一起,模组中各机能之间唯一的关系是其位在同一个模组中(例如:“工具”模组)。
  • 逻辑内聚性(Logical cohesion) 逻辑内聚性是只要机能只要在逻辑上分为同一类,不论各机能的本质是否有很大差异,就将这些机能放在同一模组中(例如将所有的滑鼠和键盘都放在输入处理副程式中)。模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
  • 时间性内聚性(Temporal cohesion) 时间性内聚性是指将相近时间点执行的程序,放在同一个模组中(例如在捕捉到一个异常后呼叫一函式,在函式中关闭已开启的档案、产生错误日志、并告知使用者)。
  • 程序内聚性(Procedural cohesion) 程序内聚性是指依一组会依照固定顺序执行的程序放在同一个模组中(例如一个函式检查档案的权限,之后开启档案)。
  • 联络内聚性/信息内聚/通信内聚(Communicational cohesion) 联络内聚性是指模组中的机能因为处理相同的资料或者指各处理使用相同的输入数据或者产生相同的输出数据,因此放在同一个模组中(例如一个模组中的许多机能都存取同一个记录)。
  • 依序内聚性/顺序内聚(Sequential cohesion) 依序内聚性是指模组中的各机能彼此的输入及输出资料相关,一模组的输出资料是另一个模组的输入,类似工厂的生产线(例如一个模组先读取档案中的资料,之后再处理资料)。
  • 功能内聚性(Functional cohesion,最高) 功能内聚性是指模组中的各机能是因为它们都对模组中单一明确定义的任务有贡献(例如XML字串的词法分析)。

当我们在谈论耦合内聚时,我们谈论的主体是什么呢,一般是模块,这点非常重要,要有限定词,这个是讨论问题的基础

wiki