内容耦合
一个模块直接引用另一个模块的内部代码,典型例子就是:一个模块把所有功能做完,没有任何拆分;
公共耦合
一组模块共同引用一个全局复杂数据项。共同访问一个文件、设备、共享内存等,一旦文件格式发生变化,所有模块就得变动。例如有两个函数或类完成同一个功能,这种冗余也是公告耦合;
外部耦合
一组模块都访问同一全局简单数据项。例如C语言程序中各个模块都访问被说明为extern类型的外部变量;
控制耦合
一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。
实质是在单一接口上选择多功能模块中的某项功能(类似于ioctl函数)。因此,对被控制模块的任何修改都会影响控制模块的逻辑。另外,控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,严重违反了最少知道原则;
标记耦合
模块间通过参数传递复杂的内部数据结构。一旦一个模块需要对数据结构调整,其他模块都要跟着调整。可以通接口封装对这个复杂数据的访问操作;
数据耦合
模块间通过参数传递基本类型的数据,称为数据耦合;
非直接耦合
模块间没有信息传递时,属于非直接耦合。