1. 耦合
耦合描述的两个模块之间关系的复杂程度。
1.1. 耦合的种类
由强到弱:
内容耦合>公共耦合>重复耦合>控制耦合>印记耦合(标记耦合)>数据耦合>非直接耦合
1.2. 具体介绍
1.2.1. 内容耦合(Content Coupling)
如果发生下列情形,两个模块之间就发生了内容耦合。
- 一个模块直接访问另一个模块的内部数据;
- 一个模块不通过正常入口转到另一模块内部;
- 一个模块有多个入口。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPmP297D-1606898488486)(D:\笔记图片集\1606898317004.png)]](/https://i-blog.csdnimg.cn/blog_migrate/700f845f293589daff8da10e6001bff2.png#pic_center)
例子:
- GOTO语句, 直接从模块A,跳转到模块B中的响应位置。
1.2.2. 公共耦合(Common Coupling)
一组模块访问同一个公共数据环境(如全局数据结构、共享的通信区、内存的公共覆盖区等)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dhxZnQ6d-1606898488488)(D:\笔记图片集\1606898071052.png)]](/https://i-blog.csdnimg.cn/blog_migrate/0f84ffc9895f8ef9ff02489881d8ffb3.png#pic_center)
1.2.3. 重复耦合
两个模块含有同样逻辑的重复代码
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-juKMZhAd-1606898488490)(D:\笔记图片集\1606898208146.png)]](/https://i-blog.csdnimg.cn/blog_migrate/cd5ba40ca7441dbe37bea1f4ba5eec52.png#pic_center)
1.2.4.控制耦合(Control Coupling)
调用模块向被调用模块传递的信息,控制了被调用模块的内部逻辑。
这样调用模块必须充分理解被调用模块的内部结构,被调用模块也要能解析调用模块传入的参数。
例子:
A模块传给B模块成绩数组和控制开关(1,0)去求平均分或最高分。
若开关为1求平均分,为0求最高分。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dzoLDCNM-1606898488492)(D:\笔记图片集\1606897421089.png)]](/https://i-blog.csdnimg.cn/blog_migrate/4b3951ccb62245861107eae97f2708b4.png#pic_center)
解耦:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7B55IiP7-1606898488493)(D:\笔记图片集\1606897653312.png)]](/https://i-blog.csdnimg.cn/blog_migrate/2e481a8d4b9a72d6ce36ba943160e52a.png#pic_center)
1.2.5.印记耦合(Stamp Coupling)
当被调用的模块可以使用的数据多于真实所需数据时,导致数据访问可能失控,给计算机犯罪提供机会.
被调用模块只是用了数据结构的一部分信息。对于被调用模块,必须对传入参数的结构具有充分的理解
例子:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m17Zvuei-1606898488494)(D:\笔记图片集\1606896567975.png)]](/https://i-blog.csdnimg.cn/blog_migrate/76587cb7d7c70986d53cde43709972a3.png#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMSRrV7s-1606898488496)(D:\笔记图片集\1606896751169.png)]](/https://i-blog.csdnimg.cn/blog_migrate/ecff84324158cbdb4fa4e67d115af30d.png#pic_center)
解耦:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDXGYdrx-1606898488496)(D:\笔记图片集\1606897130430.png)]](/https://i-blog.csdnimg.cn/blog_migrate/a7bfa7ef70a0739a1383cae6b7c26989.png#pic_center)
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)
解释:两个模块之间没有直接的关系,它们之间的联系完全通过主模块的控制和调用来实现。
例子:

子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。
参考
-
https://zhuanlan.zhihu.com/p/22281389
-
PPT
-
软件开发的技术基础
-
https://blog.csdn.net/qq_20480611/article/details/51329688
博客主要介绍了软件开发中耦合的相关知识。耦合描述两个模块间关系的复杂程度,其种类由强到弱依次为内容耦合、公共耦合、重复耦合等。还对每种耦合进行了具体解释,并给出了相应例子,如内容耦合的GOTO语句示例等。

899

被折叠的 条评论
为什么被折叠?



