耦合的类型

1. 耦合

耦合描述的两个模块之间关系的复杂程度。

1.1. 耦合的种类

由强到弱:

内容耦合>公共耦合>重复耦合>控制耦合>印记耦合(标记耦合)>数据耦合>非直接耦合

1.2. 具体介绍

1.2.1. 内容耦合(Content Coupling)

如果发生下列情形,两个模块之间就发生了内容耦合。

  1. 一个模块直接访问另一个模块的内部数据;
  2. 一个模块不通过正常入口转到另一模块内部;
  3. 一个模块有多个入口。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPmP297D-1606898488486)(D:\笔记图片集\1606898317004.png)]

例子:

  1. GOTO语句, 直接从模块A,跳转到模块B中的响应位置。

1.2.2. 公共耦合(Common Coupling)

一组模块访问同一个公共数据环境(如全局数据结构、共享的通信区、内存的公共覆盖区等)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dhxZnQ6d-1606898488488)(D:\笔记图片集\1606898071052.png)]

1.2.3. 重复耦合

两个模块含有同样逻辑的重复代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-juKMZhAd-1606898488490)(D:\笔记图片集\1606898208146.png)]

1.2.4.控制耦合(Control Coupling)

调用模块向被调用模块传递的信息,控制了被调用模块的内部逻辑。

这样调用模块必须充分理解被调用模块的内部结构,被调用模块也要能解析调用模块传入的参数。

例子:

A模块传给B模块成绩数组和控制开关(1,0)去求平均分或最高分。

若开关为1求平均分,为0求最高分。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dzoLDCNM-1606898488492)(D:\笔记图片集\1606897421089.png)]

解耦:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7B55IiP7-1606898488493)(D:\笔记图片集\1606897653312.png)]

1.2.5.印记耦合(Stamp Coupling)

当被调用的模块可以使用的数据多于真实所需数据时,导致数据访问可能失控,给计算机犯罪提供机会.

被调用模块只是用了数据结构的一部分信息。对于被调用模块,必须对传入参数的结构具有充分的理解

例子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m17Zvuei-1606898488494)(D:\笔记图片集\1606896567975.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMSRrV7s-1606898488496)(D:\笔记图片集\1606896751169.png)]

解耦:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDXGYdrx-1606898488496)(D:\笔记图片集\1606897130430.png)]

1.2.6.数据耦合(Data Coupling)

解释:如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。

例子:

//模块1
public class MathUtil{
    public static void getPow(int x){
        return x*x;
    }
}
//模块2
public class M1{
    public static void main(string[] args){
        int a = 2;
        int aa = MathUtil.getPow(a);
        System.out.println(aa);
    }
}

1.2.7. 非直接耦合(Nondirect Coupling)

解释:两个模块之间没有直接的关系,它们之间的联系完全通过主模块的控制和调用来实现。

例子:

img

子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。

参考

  • https://zhuanlan.zhihu.com/p/22281389

  • PPT

  • 软件开发的技术基础

  • https://blog.csdn.net/qq_20480611/article/details/51329688

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值