【软件工程 | 模块耦合】什么是模块耦合及分类

这篇具有很好参考价值的文章主要介绍了【软件工程 | 模块耦合】什么是模块耦合及分类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念

耦合(coupling)是对两个模块之间联接程度的一种度量。模块间的依赖程度越大,则其耦合程度也就越大;
反之,模块间的依赖程度越小,则其耦合程度也就越小。
很显然,为了使软件具有较好的可维护性和可修改性,模块间的关联程度即耦合程度应越小越好。因为耦合程度越小,表明模块间的独立程度越大,这样在修改一个模块时,对其它模块的影响程度就越小,从而使模块的修改工作局限于一个最小范围之内。

分类

内容耦合

概念

⼀个模块直接修改或操作另⼀个模块的数据,或者直接转⼊另⼀个模块。

例子

模块A中定义了变量a,在模块B中直接使⽤了。这种情况下模块A和模块B就是内容耦合。

公共耦合

概念

两个以上的模块共同引⽤⼀个全局数据项。

例子

定义了⼀个全局变量a,在A、B、C模块中均调⽤了a,这种情况下模块A、模块B、模块C就是公共耦合。

数据耦合

概念

数据耦合是指两个或多个数据元素之间存在相互依赖的关系,其中一个数据元素的变化会影响到其他数据元素的值或状态。在软件开发中,数据耦合是一个非常重要的概念,因为它可以帮助我们更好地理解和设计软件系统

具体例子

1. 订单系统中的数据耦合

在一个订单系统中,订单信息、客户信息、产品信息等数据元素之间存在相互依赖的关系。例如,当一个客户下单时,订单信息中需要包含客户的姓名、地址、电话等信息,同时还需要查询产品信息来获取产品的价格、库存等信息。这些数据元素之间的耦合关系非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。

2. 财务系统中的数据耦合

在一个财务系统中,账户信息、交易信息、报表信息等数据元素之间存在相互依赖的关系。例如,当一个账户发生交易时,交易信息中需要包含账户的余额、交易金额等信息,同时还需要更新账户信息中的余额等数据元素。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。

3. 医疗系统中的数据耦合

在一个医疗系统中,病人信息、医生信息、药品信息等数据元素之间存在相互依赖的关系。例如,当一个病人看病时,医生需要查询病人的病史、药品过敏等信息,同时还需要开具处方来获取药品信息。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。

4. 物流系统中的数据耦合

在一个物流系统中,货物信息、车辆信息、路线信息等数据元素之间存在相互依赖的关系。例如,当一个货物需要运输时,需要查询车辆的状态、路线的情况等信息,同时还需要更新货物信息中的状态等数据元素。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。

5. 社交网络中的数据耦合

在一个社交网络中,用户信息、好友关系、消息信息等数据元素之间存在相互依赖的关系。例如,当一个用户发送消息时,需要查询好友的信息、消息的状态等信息,同时还需要更新消息信息中的状态等数据元素。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。

6. 游戏系统中的数据耦合

在一个游戏系统中,玩家信息、游戏关卡、游戏道具等数据元素之间存在相互依赖的关系。例如,当一个玩家通过一个关卡时,需要查询玩家的信息、关卡的状态等信息,同时还需要更新玩家信息中的经验值、金币等数据元素。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。

控制耦合

概念

⼀个模块在界⾯上传递⼀个信号控制另⼀个模块,接收信号的模块的动作根据信号值进⾏调整。

例子

模块A获取⽤户类型(普通⽤户、⾼级⽤户)传递给模块B,模块B根据不同类型的⽤户提供不同的服务。这种情况下模块A和模块B就是控制耦合。

标记耦合

概念

模块间通过参数传递复杂的内部数据结构。

例子

模块A向模块B传递Object类型的数据。这种情况下模块A和模块B就是标记耦合

启发式规则

尽量用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。
高内聚、低耦合。
(1)改进软件结构,提高软件独立性。模块分解
(2)模块规模适中
(3)力求深度、宽度、扇出、扇入适中。
           深度:表示其控制的层数。
           宽度:同一层次上模块总数的最大值。
           扇出:一个模块直接控制的下级模块的数目。
           扇入:有多少个上级模块直接调用它。
           原则:顶层模块扇出比较大,中间层模块扇出较小,底层模块具有较大的扇入。
(4)尽量使模块的作用域在其控制域内。
         模块的控制域:这个模块本身以及所有直接或间接从属它的模块的集合。
         模块的作用域:受该模块内一个判断所影响的所有模块的集合。
(5)尽力降低模块接口的复杂度
(6)力求模块功能可以预测文章来源地址https://www.toymoban.com/news/detail-640258.html

到了这里,关于【软件工程 | 模块耦合】什么是模块耦合及分类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 软件工程专业应该学什么?

    软件工程专业应该学什么?

    昨天,我朋友的孩子报考了软件工程专业,问我软件工程到底学啥?所以我给他开列了一个书单。 现在高校开了一堆花名头的专业: 偏技术类:云计算、大数据、人工智能、物联网 偏应用类:电子商务、信息管理 但我个人感觉,会编程语言、会使用开源框架的人一堆,但是

    2024年02月14日
    浏览(11)
  • Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单 em

    Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单 em

       鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更

    2024年02月14日
    浏览(16)
  • 软件工程师,为什么不喜欢关电脑

    软件工程师,为什么不喜欢关电脑

    概述         你是否注意到,软件工程师们似乎从不关电脑,也不喜欢关电脑?别以为他们是电脑“上瘾”,或是沉迷于电脑,这一现象背后蕴含着多种实际原因。         1、代码保存与恢复。         在编写代码过程中,遇到问题时可能会暂时离开去查阅资料或

    2024年02月19日
    浏览(19)
  • 【软件工程_设计模式】——为什么要使用设计模式?

    什么是设计模式? 为什么要使用设计模式? 使用设计模式的原因如下: 提高 代码的可 读性和可维护性 :设计模式是前人根据经验总结出来的,使用设计模式,就相当于是站在了前人的肩膀上。熟悉设计模式的人应该能够很容易读懂运用设计模式编写的程序。 提高代码的 可

    2024年02月07日
    浏览(19)
  • 【计算机考研】「软件工程」VS「电子信息」专硕有什么不同?

    【计算机考研】「软件工程」VS「电子信息」专硕有什么不同?

    就今年的24国考来说,计算机技术(085404)能报的只是比计算机科学与技术少那么一点点(因为“计算机类”它都可以报,只有写计算机科学与技术的报不了)相对于其他天坑专业来说还是好很多的! 本人双非科班出身备考408成功上岸,在这里也想给想考408的学弟学妹们一些

    2024年04月22日
    浏览(17)
  • 嵌入式软件开发工程师未来的薪资待遇是什么情况

    嵌入式软件开发工程师未来的薪资待遇是什么情况

    又去了解过嵌入式的人们,其实都是奔着嵌入式软件开发工程师去的,那么想要成为一名优秀的嵌入式软件工程师可没那么简单,那么怎么才能成为嵌入式软件开发工程师呢?下面一起来了解下。 点击获取1V1嵌入式学习规划,现在还送100G精选学习资料。点击领取 一、嵌入式

    2023年04月19日
    浏览(10)
  • 软件测试工程师面试如何回答测试工作有什么优势和劣势

    软件测试工程师面试如何回答测试工作有什么优势和劣势

    软件测试工程师面试的时候,会遇到很多很奇葩的问题,例如今天要讲的这个问题就是很奇葩:测试工作有什么优势和劣势? 我们做软件测试工作的,为了能够把软件中的明显的缺陷找出来,要读几十遍需求文档,跟开发和产品使劲的沟通,有时候还要拿着竞争对手的产品分

    2024年02月02日
    浏览(17)
  • 软件测试工程师需要达到什么水平才能顺利拿到 20k 无压力?

    软件测试工程师需要达到什么水平才能顺利拿到 20k 无压力?

    最近有粉丝朋友问:软件测试员需要达到什么水平才能顺利拿到 20k 无压力? 这里写一篇文章来详细说说: 作为软件测试人员,首先要具备扎实的测试基础知识。这包括测试方法、测试流程、测试用例设计、缺陷管理等方面的掌握。我们需要了解各种测试类型和级别,如单元

    2023年04月23日
    浏览(18)
  • 【AI Code】LLM加持的软件工程3.0时代:什么是无代码编程?

    目录 什么是无代码编程? 一、LLM技术的发展 二、零代码编程的发展

    2024年02月07日
    浏览(17)
  • 【软件工程】《软件工程》期末复习提纲

    【软件工程】《软件工程》期末复习提纲

    《软件工程》期末复习提纲 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章 第十二章 第十三章 第十四章 小题参考 大题参考 1.在下列选项中,( )不是软件的特征。 A.系统性与复制性         B.可靠性与一致性 C.抽象性与智能性  

    2024年01月17日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包