非直接耦合
数据耦合
标记耦合
控制耦合
外部耦合
公共耦合
内容耦合
强独立性 弱
下面举例说明以上各种耦合:
a.非直接耦合(Nondirect Coupling)在这种情况下,两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。例如在实数的运算中,有两个模块分别完成几个实数的求和,求乘积功能,这两个模块之间没有直接联系,只有在主模块调用中有执行的前后顺序而已,这个例子即属于非直接耦合。
b.数据耦合(Data Coupling)即一个模块访问另一个模块时,彼此之间是通过数据参数来交换输入,输出信息的,这种耦合为数据输入,输出信息的这种耦合为数据耦合。如有两个模块,其中A完成两个烽的比较,求出其中最大的并返回该值,模块B是完成了个数的比较,求出其中最大的并返回该最大值,为完成四个数的比较,模块B调用模块A即可完成,在这种调用关系中,模块A的运算结果作为一个参烽参加B的运算,这两个模块之间即发生数据耦合。数据耦合是松散的耦合,模块间的独立性比较强。
c.标记耦合(Stamp Coupling),即一组模块通过参数传递记录信息,这就是标记耦合。事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。
d.控制耦合(Control Coupling)即一个模块通过开关标志,名字等控制住处明显的控制,选择另一模块的功能,这就是控制耦合,如下 图所示,这一种耦合实质是在单一接口上实现选择多功能模块中的某项功能,如程序设计中用到多路选择结构即是最好的例子。
Switch (x)
A
B
C
e.外部耦合(External Coupling)即一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递全局数据结构,而且不是通过参数表传递全局变量的信息。如C语言中都访问被说明为extern类型的外部变量的各个模块之间即发生外部耦合。外部耦合引起的问题类似于下面要介绍的公共耦合,区别在于外部耦合中不存在依赖于一个数据结构内部各项的物理安排。
f.公共耦合(Common Coupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就是公共耦合。公共的数据环境可以是全局的数据结构,共享的通信区,内存的公共覆盖区等。如几个模块对同一个数据库的查询就属于这种耦合。公共耦合可以分为松散的公共耦合和紧密的公共耦合,其中松散的公共耦合是单向 *** 作,如两个或多个模块对同一个文件的读 *** 作;而紧密的公共耦合是双向的 *** 作,如两个或多个模块对同一文件的读写 *** 作。下面用图表示松散的和紧密的公共耦合。
公共数据公共数据
模块A模块B模块A模块B
松散的数据耦合紧密的数据耦合
g.内容耦合。即有下列情况时即出现内容耦合。 (1)一个模块访问另一个模块数据;
(2)一个模块不通过正常入口而转到另一个模块的内部; (3)两个模块有一部分代码重叠; (4)一个模块有多个入口。
模块a
模块b
a. 一个模块访问另一个模块数据
b. 两个模块有一部分代码重叠
c. 一个模块有多个入口
2、 为每种类型的模块内聚
举例说明:A模块需要调用身份z号,给把整个人的所有身份信息数据结构(包含身份z号,姓名,年龄,住址,电话等),A模块仅仅只需要调用身份z号。A模块实际上使用的数据,大于大确实需要的数据,这就出现了特征耦合。
特征耦合是指两个都与同一个数据结构有关的模块发生的耦合。由于同时使用同一个数据结构,当数据结构变动时,必然影响这两个模块,从而增加模块间的依赖性,降低模块独立性。
扩展资料
当一个子系统(或类)发生变化时对另一个子系统(或类)的影响很小,则称它们是松散耦合的;反之,如果变化的影响很大时,则称它们是紧密耦合的。
耦合的强弱取决于模块间接口的复杂性、引用模块的位置和数据的传送方式等。设计时应尽量使模块问的耦合度小,模块间的耦合度直接影响系统的可理解性、可测试性、可靠性和可维护性 。
耦合的强弱取决于模块的划分是否合理以及模块之间接口的复杂程度。因此,划分模块时应尽量做到:
1、排除模块之间不必要的联系。
2、减少模块之间必不可少的联系的数量 。
3、松散模块之间联系的紧密程度 。
松散耦合松散耦合意味着减少直接使用其他类的类的依赖关系。在紧密耦合中,类和对象相互依赖。通常,紧密耦合通常是不好的,因为它降低了代码的灵活性和可重用性,并且使更改变得更加困难并阻碍了可测试性等。
紧密耦合对象是一个需要非常了解其他对象的对象,并且通常高度依赖于彼此的接口。在紧密耦合的应用程序中更改一个对象通常需要更改许多其他对象。在小型应用程序中,我们可以轻松识别更改,并且错过任何内容的机会都更少。但是在大型应用程序中,这些相互依赖关系并非总是每个程序员都知道,否则就有可能忽略更改。但是每组松散耦合的对象都不相互依赖。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)