zoukankan      html  css  js  c++  java
  • 模块的耦合和内聚

    概述

           模块的划分是软件结构化方法中提出来的想法,结构化方法的思想是,一个大问题分解成多个中问题,每个中问题再分解为多个子问题,直至可以容易的解决为止,这些划分出来的块就是我们说的模块,模块有大有小,大到系统的架构,小到一个类一个方法,换句话说,我们学过的系统三层架构中的每一层都可以称为一个模块,三层架构是基于结构化思想得来的,我们编写的每一个函数,也可以说是一个模块,至于下面描述的模块,我们不要将其定死在一个实体上,应该怎么好理解,就把其当成什么。

            在划分模块的时候,根据模块和模块之间的关系(耦合),以及模块内部之间的关系(内聚),我们来判断划分的模块是否为优。下面来具体说耦合和内聚的具体分类


     

    耦合

             模块之间互相连接的紧密程度的度量。各个模块之间的复杂程度、调用模块的方式以及哪些信息通过接口



    内容耦合

             如果一个模块直接访问另一个模块的内部数据,或者一个模块不通过正常入口转到另一模块内部,或者两个模块有一部分程序代码重叠,或者一个模块有多个入口,则两个模块之间就发生了内容耦合。

     

    公共耦合

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



     

    外部耦合

             一组模块都访问统一全局简单变量而不是统一全局数据结构,而且不是通过参数表传递该全局变量的信息

             外部耦合和公共耦合的区别

                     外部耦合不存在依赖于一个数据结构内部各项的物理安排    

     

    控制耦合

             如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合


     

    标记耦合

             如果一组模块通过参数表传递记录信息,就是标记耦合。共享某一数据结构的子结构

     

    数据耦合      

     

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

     

    非直接耦合

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

     


     

    内聚

             模块内部各个元素彼此结合的紧密程度的度量


     

    偶然(巧合)内聚

             当几个模块内凑巧有一些程序段代码相同,又没有明确变现出独立的功能,把这些代码独立出来建立的模块即为偶然内聚模块,模块的各成分之间毫无关系,也就是说模块完成一组任务,这些任务之间没有关系

             缺点:模块的内容不易理解,不易修改和维护

     

    逻辑内聚

             这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的控制型参数来确定该模块应执行哪一种功能。

              逻辑内聚表明了各部分之间在功能上的相关关系

     

    时间内聚

             如果一个模块完成的功能必须在同一时间内执行(系统初始化),但这些功能只是因为时间因素关联在一起

     

    过程内聚

             使用流程图作为工具设计程序的时候,常常通过流程图来确定模块划分。把流程图中的某一部分划分出组成模块,就得到过程内聚模块

     

    通信内聚

             如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块时通过数据流图来定义的。如果一个模块的所有成分都操作同一数据集或生成同一数据集

     

    顺序(信息)内聚

             这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项能有一个唯一的入口点。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚

     

              信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓,当把程序某些方面细节隐藏在一个模块中时,就增加了模块的独立性     

     

    功能内聚

             一个模块中各个部分都是为完成一项具体功能而协同工作,紧密联系,不可分割的,则称该模块为功能内聚模块。功能内聚模块时内聚性最强的模块


    总结    

            模块的内聚和耦合,我们主要的抓点就是:耦合是多个模块之间的关系;内聚是一个模块内部各成员的关系。然后根据这个依据,再分析就非常容易了 

            结构化方法不但应该应用在我们的软件开发上,更应该应用在我们生活中的方方面面

  • 相关阅读:
    【转载】python字符格式化
    【python】生产者消费者问题优化
    【python】pickle文件读写的insecure问题
    【工具使用】sublime设置换行符为unix风格
    【python】CGI部署问题解决
    【python】引用c的dll
    【多线程】Python进程,队列和锁相关的一些问题
    【Python】下载图片,标识之后转发出去
    【Python】PIL在window64位机制上引用异常问题解决
    【Python网页分析】httplib库的重定向处理
  • 原文地址:https://www.cnblogs.com/pangblog/p/3370809.html
Copyright © 2011-2022 走看看