三、耦合
1.耦合的定义
模块之间互相依赖的程度。
耦合和内聚的区别:耦合关注的是模块间的依赖程度;内聚关注的是模块内部元素的结合程度。
2.耦合的分类
无耦合:模块间完全没有关系和交互。无耦合的模块意味着所有的功能都是自给自足,什么都得自己做。如果是非常底层的模块,还可以接受,但是非底层模块如果完全无耦合,那么意味着它什么都得自己造轮子,既不利于重用,效率也很低下。
消息耦合:系统之间交互的接口,两个类之间调用的方法都可以称之为消息。消息耦合是耦合程度比较低的一种耦合,因为调用方仅仅依赖被调用方的消息。既不要传递参数,也不要知道消息的内部逻辑,更不需要控制消息的内部逻辑。
数据耦合:两个模块之间通过参数传递基本数据,为数据耦合。
数据结构耦合:数据结构耦合类似于数据耦合,区别是数据耦合传递的是基本数据参数,数据结构耦合传递的是数据结构参数,比如:对象
控制耦合:当一个模块可以通过某种方式来控制另一个模块行为时,称为控制耦合。最常见传入一个控制参数,来控制函数的处理流程或输出,例如:工厂类
外部耦合:当两个模块都依赖于外部的数据格式、通信协议、接口时,则这两个模块为外部耦合。例如:操作系统和外设之间依赖于USB接口。操作系统接收按照USB接口协议输入的信号,鼠标按照USB接口协议来输出入信号,在鼠标插入USB接口之前,操作系统并不能感知将要接入到USB接口上的设备是什么设备。
全局耦合:两个模块共享相同的全局数据时,则为全局耦合。例如:程序中的全局变量、单例对象等。
内容耦合:当一个模块依赖于另一个模块内部的数据成员时,则称为内容耦合。内容耦合是最差的一种耦合方式。这种耦合破坏了模块的封装性。处于内容耦合的模块,就像一根稻草上的蚂蚱,没办法单独修改或优化。最常见的例子就是:某个类有个public的属性,其他类直接使用这个类的这个属性。