高内聚、低耦合

2023-10-26

http://www.cnblogs.com/robnetcn/archive/2012/04/15/2449008.html

起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。


    耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
    耦合性分类(低――高): 无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;内容耦合;
1 无直接耦合:
2 数据耦合: 指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;
3 标记耦合: 指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;
4 控制耦合: 指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;
5 公共耦合: 指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。
6 内容耦合: 这是最高程度的耦合,也是最差的耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。
 
    内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
    内聚性匪类(低――高): 偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚;功能内聚;
1 偶然内聚: 指一个模块内的各处理元素之间没有任何联系。
2 逻辑内聚: 指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
3 时间内聚: 把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
4 过程内聚: 如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。
5 通信内聚: 指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
6 顺序内聚: 指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
7 功能内聚: 这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。
 
    耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
    从系统角度,越接近系统底层的,越具体的,耦合越强,而越高层的,越抽象的,耦合越低。
 
    有个例子很容易明白:一个程序有50个函数,这个程序执行得非常好;然而一旦你修改其中一个函数,其他49个函数都需要做修改,这就是高耦合的后果。
一旦你理解了它,你编写概要设计的时候设计类或者模块自然会考虑到“高内聚,低耦合”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高内聚、低耦合 的相关文章

  • 分享Figma一些非常快速、省时、省力的功能和小技巧

    众所周知 越来越多的大工厂正在使用它figma了 那你的figma它是如何使用的 您是否遇到过一些问题或操作不方便的事情 今天 我想和大家分享Figma一些非常快速 省时 省力的功能和小技巧 因为文章属于直译 所以良心哥在编辑时帮你整理知识
  • UI设计都有哪些设计原则,分享三个给你

    是什么使一个好UI设计容易阅读 是什么让用户轻松浏览 设计师如何创造一个闪亮的UI 任何软件产品的关键部分都是用户界面 好的UI设计 用户甚至会忽略它 如果做得不好 就会成为用户使用产品的绊脚石 为了更有效地设计能够满足用户使用的设计UI
  • “自顶向下,逐步求精“的程序设计方法

    在程序设计中 自顶向下 和 面向对象 是两类最重要也最基本的程序设计方法 今天我们先介绍 自顶向下 逐步求精 的程序设计方法 所谓 自顶向下 即是把一个抽象的 困难的大问题分解为若干个小问题 如果认为小问题仍然不够简单可行 就再进一步分解
  • UI和UI有什么不同,是如何协助的

    UX 用户体验 和UI 用户界面 是一个常用的术语 然而 尽管有复杂的联系 但网页设计的两个领域是两个不同的东西 事实上 有可能有一个用户界面优秀但用户体验差的网站 因此 了解UX和UI良好的网页设计非常重要 这里简要介绍一下 UX和UI它
  • MySQL数据库设计总结

    阅读原文 更多技术干货 请访问腾云阁 规则1 一般情况可以选择MyISAM存储引擎 如果需要事务支持必须使用InnoDB存储引擎 注意 MyISAM存储引擎 B tree索引有一个很大的限制 参与一个索引的所有字段的长度之和不能超过1000
  • log4cplus源码分析

    1 引题 虽然从本科起就学的C 然后在工作的2年时间中也不断的在用C 写代码 虽然基本的语法和一些常用的库函数已经滚瓜烂熟 可是总觉得自己写的代码还不是很专业 特别是看到那些老外们写得代码 从设计 到编码风格 再到各种编程技法的使用有很多都
  • 设计算法来统计一个输入字符串中所包含的整数个数,并输出这些数

    设计算法来统计一个输入字符串中所包含的整数个数 并输出这些数 假设输入的字符既有数字又有非数字的字符 例如 ak123x456 17960 302gef4563 其中连续数字作为一个整体看成整数 例如123 456等 include
  • 用代码生成Glitch Art风格的抖音字体

    最近看到不少文章教大家用 photoshop 实现抖音的 logo 跟字体 我也非常喜欢这种风格的字体 于是趁着晚上的时间 动手用代码实现了下此类风格的字体特效 顺便开发了个小工具 地址见文末 本文主要是从 艺术手法 和 JS 前端 实现
  • 9款超级实用的网页设计工具,快来看看有没有你用过的

    随着网络时代的快速发展 游戏 购物 音乐 影视和社交网站的兴起都表明了网页设计的重要性 网页设计工具作为网页设计师的生产工具 自然要选择好的 让我们分享9个高质量的网页设计工具 让您的设计效率悄然提高 即时设计 即时设计是一款免费的在线 U
  • 探究:kafka生产者/消费者与多线程安全

    目录 1 多线程安全 1 1 生产者是多线程安全的么 1 1 消费者是多线程安全的么 2 消费者规避多线程安全方案 2 1 每个线程维护一个kafkaConsumer 2 2 单 多 kafkaConsumer实例 多worker线程 2
  • 设计模式C++学习笔记之一(Strategy策略模式)

    http www cnblogs com wanggary archive 2011 04 07 2008796 html 无意中 从网上下到一本电子书 24种设计模式介绍与6大设计原则 很好奇这里有24种设计模式 印象中GOF写的 设计模
  • png透明通道分离

    关于photoshop中png打开问题 前面也说到过http blog csdn net shenmifangke article details 52638716 ps在打开png格式图片的时候 实际上是把透明通道应用到了所有通道上 这样
  • 学习笔记(5):MySQL数据库从入门到实战应用-数据完整性

    立即学习 https edu csdn net course play 27328 362521 utm source blogtoedu 实体完整性 要求每张表都有唯一标识符 每张表主键字段不为空且不能重复 唯一性约束 主键约束 标识列
  • App6种常见的数据加载设计

    设计师在进行APP设计的设计时 往往会更加专注于界面长什么样 界面和界面之间怎么跳转 给予用户什么样的操作反馈 却偏偏特别容易忽略掉一个比较重要的环节 就是APP数据加载中的设计 所以会导致我们看到的APP 往往有着华丽的启动界面 然后就是
  • 为什么MVC不是一种设计模式

    比较Backbone和Ext4 x在MVC实现上的差异 大漠穷秋 前言 圣人云 不想做妈咪的小姐不是好码农 每一个码农的心中都有一个终极理想 那就是有一天不用再Coding 在成为妈咪的道路上 设计模式 被认为是一项必备的技能 因此 经常有
  • 2023年正在使用的设计资源网站分享

    这篇文章 也将整理出我今年一直都在使用的设计资源网站 作为设计师一定是离不开优质的资源网站的 我自己的话会每天都花一两个小时的时间去浏览自己的收藏的这些资源网站 哪怕只是简单的浏览 也可以在无形中增加自己对设计的 设计感 即时 AI 画廊这
  • 【数电】如何使用74LS112(或74LS74)构成一个十四分频器(模七计数器)

    IT精英们 大家都学过数字电子技术吧 尽管这东西没用 不过这些基础课程对思维的培养还是很有好处的 我不爱上课 但不代表我不喜欢数电 我们实验课老师为了加强实验难度 把实验题改掉了 用74LS112 或者74LS74 设计一个十四分频器 原来
  • Java语言基础

    01 01 计算机基础知识 计算机概述 了解 A 什么是计算机 计算机在生活中的应用举例 计算机 Computer 全称 电子计算机 俗称电脑 是一种能够按照程序运行 自动 高速处理海量数据的现代化智能电子设备 由硬件和软件所组成 没有安装
  • 非常优秀的网站设计案例,设计师必备

    厚积才能薄发 一个优秀的设计师的天性一定是想要获得更多网站设计灵感 擅于为新项目寻找创意切入点 搜索设计参考资源 最新的设计趋势 今天为大家带来了一组免费可商用的网站设计案例 通过这些网站设计案例 你可以获得 寻找不同风格的网站灵感 配色
  • 电脑快速打开计算器的方法

    大家好 我是爱你三千遍斯塔克 我们平常在运算时 经常要要使用计算器 那么计算器有什么快速打开方法吗 这里有一些参考方法 可供大家进行参考 希望对大家有帮助 希望你喜欢我的内容 记得关注我哦 我会继续为大家带来更好的作 1 win R 打开运

随机推荐

  • JavaScript--修改 HTML 元素

    这些是一些用于修改 HTML 元素的常见方法 1 document createElement element 创建 HTML 元素节点 可以使用这个方法创建一个新的 HTML 元素 例如 document createElement di
  • Docker进阶学习:Compose配置编写规则

    docker compose yaml 是Compose的核心 以下是compose的官方文档地址 https docs docker com compose compose file compose file structure and
  • rabbitmq集群故障处理

    rabbitmq集群故障处理 故障现象 rabbitmq启动失败 手动kill掉rabbit的后台进程 杀完后进程又会自动起来 故障处理 1 手动更改rabbitmq故障节点的erl crash dump为erl crash dump ba
  • JavaScript 的面向对象基础,设计模式中的原型模式(设计模式与开发实践 P2)

    文章目录 1 1 动态类型语言和鸭子类型 1 2 多态 1 3 封装 封装数据 封装实现 封装类型 1 4 原型模式和基于原型继承的 JavaScript 对象系统 C 原型模式 JS 原型模式 在学习 JS 设计模式之前需要了解一些设计模
  • 嵌入式开发课程简介

    最近几年 几乎所有的IT企业对应届毕业生都有抱怨 动手能力太差 编程水平低下 大学期间 老师授课以理论为主 学生缺少各种实践 这造成很多学生就业难 学生找不到工作 而企业招不到合适的人 本课程不仅系统的梳理了一遍工作中常用的知识 更是通过大
  • LLM论文周报|来自清华、MetaAI、Nous Research等机构论文研究

    大模型 LLM 是一种人工智能模型 旨在理解和生成人类语言 它们在大量的文本数据上进行训练 可以执行广泛的任务 包括文本总结 翻译 情感分析等等 LLM的特点是规模庞大 包含数十亿的参数 帮助它们学习语言数据中的复杂模式 这些模型通常基于深
  • 安装搭建悟空CRM 网络错误,请检查您的网络 问题处理

    1 很多朋友在GitHub上面下载的悟空crm最新版程序 进行安装搭建后发现 运行程序打开显示 悟空软件 但是登录进去管理界面的时候就提示说 网络请求失败 请稍候再试 怎么办呢 2 导入服务端根文件夹数据库文件public sql 5kcr
  • Kubernetes 网络概念及策略控制(叶磊)

    本文将主要分享以下 5 方面的内容 Kubernetes 基本网络模型 Netns 探秘 主流网络方案简介 Network Policy 的用处 思考时间 Kubernetes 基本网络模型 本节来介绍一下 Kubernetes 对网络模型
  • SpringBoot 集成MyBatis-Plus提示反序列化异常:cannot deserialize from Object value (no delegate- or property-bas

    SpringBoot集成MyBatis Plus 实现HTPP POST提交实体对象提示如下错误片段 重点错误信息字段 cannot deserialize from Object value no delegate or property
  • ECharts折线图+联动+dataZoom

  • SpringBoot配置数据源DataSource

    使用properties文件配置springboot默认数据源 这种方式十分简单 只用在application properties文件中配置数据库连接属性即可 spring datasource url jdbc mysql localh
  • 7-22 龟兔赛跑 (20分)

    思路 当时间为10的倍数的时候看看兔子的路程有没有乌龟的长 若比乌龟长 则兔子开始休息三十分钟 其中有一个测试点就是注意兔子在休息中时间t到了 代码如下 include
  • ERROR: Invalid requirement: ‘_libgcc_mutex=0.1=main‘ XXX Hint: = is not a valid operator. Did you me

    问题如图所示 我是在GitHub加载environment yml文件时 遭遇这种情况 其实 这也不难解决 其一将environment yml文件中dependencices中 报错的部分依赖项 放到 pip 下 或者将 libgcc m
  • 探索将大语言模型用作推荐系统

    编者按 目前大语言模型主要问答 对话等场景 进行被动回答 是否可以将大模型应用于推荐系统 进行主动推送呢 这篇文章回顾了可以将大模型作为推荐系统的理论基础 并重点描述了基于英文和阿拉伯语的购物数据集微调T5 large模型 探索将LLMs用
  • d3dcompiler_43.dll文件丢失怎么修复,最新修复方法分享

    本教程操作系统 Windows系统 d3dcompiler 43 dll是电脑文件中的dll文件 动态链接库文件 如果计算机中丢失了某个dll文件 可能会导致某些软件和游戏等程序无法正常启动运行 并且导致电脑系统弹窗报错 在我们打开软件或者
  • PyTorch Lightning错误TypeError: lr_scheduler_step() takes 3 positional arguments but 4 were given

    问题 使用PyTorch Lightning时对lr scheduler step定义如下 def lr scheduler step self scheduler metric scheduler step 出错 TypeError lr
  • Ubuntu 安装 cmake

    目录 1 下载cmake安装包 2 开始安装 3 查看cmake版本 参考链接 https blog csdn net qq 27350133 article details 121994229 1 下载cmake安装包 cmake安装包下
  • Jmeter实现websocket协议接口测试

    一 为了方便使用 首先将jmeter设置成中文 有两种方法 1 在Jmeter界面进行设置 Options gt Choose Language gt Chinese Simplified 这种方法在关闭jmeter重启后又会恢复成默认的英
  • 最优化理论·非线性最小二乘

    最优化理论 非线性最小二乘 标签 空格分隔 数学 非线性最小二乘问题是椭圆拟合中最易遇到的优化问题 本文主要对非线性二乘的基本分析做简单介绍 1 什么是最小二乘问题 目标函数能够写为m个函数平方和的优化问题 其中 每个函数 f i x
  • 高内聚、低耦合

    http www cnblogs com robnetcn archive 2012 04 15 2449008 html 起因 模块独立性指每个模块只完成系统要求的独立子功能 并且与其他模块的联系最少且接口简单 两个定性的度量标准 耦合性