• 软件工程之耦合性


    构成耦合性的七种类型

      一般模块之间可能的连接方式有七种,构成耦合性的七种类型。它们之间的关系为(由弱到强)

    非直接耦合(Nondirect Coupling)

      如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。 。

    数据耦合(Data Coupling)

      如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。由于限制了只通过参数表传递数据,按数据耦合开发的程序界面简单、安全可靠。因此,数据耦合是松散的耦合,模块之间的独立性比较强。在软件程序结构中至少必须有这类耦合。

    印记耦合(Stamp Coupling)

      如果一组模块通过参数表传递记录信息,就是标记耦合。事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。这要求这些模块都必须清楚该记录的结构,并按结构要求对此记录进行操作。在设计中应尽量避免这种耦合,它使在数据结构上的操作复杂化了。如果采取“信息隐蔽”的方法,把在数据结构上的操作全部集中在一个模块中,就可以消除这种耦合。

    控制耦合(control Coupling)

      如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。耦合的实质是在单一接口上选择多功能模块中的某项功能。因此,对所控制模块的任何修改,都会影响控制模块。另外,控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。

    外部耦合(External Coupling)

      一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。例如C语言程序中各个模块都访问被说明为extern类型的外部变量。外部耦合引起的问题类似于公共耦合,区别在于在外部耦合中不存在依赖于一个数据结构内部各项的物理安排。

    公共耦合(Common Coupling)

      若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。

     

      这种耦合会引起下列问题:

     

      1)所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。

     

      2)无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。

     

      3)公共数据名的使用,明显降低了程序的可读性。[Page]

     

      公共耦合的复杂程度随耦合模块的个数增加而显著增加。如图4.14所示,若只是两个模块之间有公共数据环境,则公共耦合有两种情况。

     

      若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,则这种公共耦合叫做松散公共耦合。若两个模块都从公共数据环境中取数据,又都向公共数据环境里送数据,则这种公共耦合叫做紧密公共耦合。只有在模块之间共享的数据很多,且通过参数表传递不方便时,才使用公共耦合。否则,还是使用模块独立性比较高的数据耦合好些。

    内容耦合(Content Coupling)

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

     

      1)一个模块直接访问另一个模块的内部数据;

     

      2)一个模块不通过正常入口转到另一模块内部;

     

      3)两个模块有一部分程序代码重叠(只可能出现在汇编语言中);

     

      4)一个模块有多个入口。

     

      在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,都会造成程序出错。好在大多数高级程序设计语言已经设计成不允许出现内容耦合。它一般出现在汇编语言程序中。这种耦合是模块独立性最弱的耦合。

     

      以上由Myers给出的七种耦合类型,只是从耦合的机制上所做的分类,按耦合的松紧程度的排列只是相对的关系。但它给设计人员在设计程序结构时提供了一个决策准则。实际上,开始时两个模块之间的耦合不只是一种类型,而是多种类型的混合。这就要求设计人员按照Myers提出的方法进行分析,比较和分析,逐步加以改进,以提高模块的独立性。

    找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!
  • 相关阅读:
    组件通信一 父子之间的通信方式
    我常用的tmux命令
    从标准输入流中读取并执行shell指定函数
    弱网测试浏览器及微信开发者工具
    jmeter性能测试实例解析
    jmeter多个线程组的并行和串行
    解析mybatis plus分页不起作用(失败)的问题
    atable 中 数据已更新,但是表格里面不显示改变
    typescript map()和filter()
    C#编程的最佳工具
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/2727492.html
Copyright © 2020-2023  润新知