前言:emmm最近都在赶进度,已经好久没输出了,接下来都使用MakeDown文档写文,推荐大家使用VsCode编译工具,加入Markdown Preview Enhanced插件,创建一个MD文件,复制过去

点击下图显示的图标,就可以预览了,格式我就不修改了,哈哈哈,ヾ( ̄▽ ̄)Bye~Bye~

## 耦合性

### 定义

#### 1/块间联系

模块之间联系越紧密==>其耦合性就越强==>模块的独立性则越差

#### 2/模块间依赖程度

指软件系统结构中各模块间相互联系紧密程度

### 要素

#### 1/模块间接口的复杂性

#### 2/调用的方式

#### 3/传递的信息

### 分类:低->高

#### 无直接耦合

- AB模块间无直接关系

- AB间的联系完全是通过主模块的控制和调用来实现的

- 耦合度最弱,模块独立性最强

- **E.G:模块A实现输出字符串,模块B实现接收int数据,两者之间没有信息传递。这种情况下模块A和模块B就是非直接耦合**

#### 数据耦合

- 指AB模块间有调用关系

- 传递的是简单的数据值,相当于高级语言的值传递

- **E.G:模块A实现两个数的加法操作,模块B实现两个加数的初始化,模块B将两个加数传给模块A,模块A进行相加。这种情况下模块A和模块B就是数据耦合**

#### 标记耦合

- 传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记

- 实质为传递该数据结构的地址

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

#### 控制耦合

- 指AB模块间有调用关系

- 传递的是控制变量,如开关、标志等

- 被调模块通过该控制变量的值有选择地执行块内某一功能

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

#### 公共耦合

- 指通过一个公共数据环境相互作用的那些模块间的耦合

- 公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等

- 若模块只是向公共数据环境输入数据,或是只从公共数据环境取出数据,这属于比较松散的公共耦合

- 若模块既向公共数据环境输入数据又从公共数据环境取出数据,这属于较紧密的公共耦合

- 公共耦合的复杂程序随耦合模块的个数增加而增加

- **E.G:定义了一个全局变量a,在A、B、C模块中均调用了a,这种情况下模块A、模块B、模块C就是公共耦合**

****

**公共耦合会引起以下问题:**

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

2. 使软件的可维护性变差。若一个模块修改了公共数据,则会影响相关模块。

3. 降低了软件的可理解性。不容易清楚知道哪些数据被哪些模块所共享,排错困难。

一般地,仅当模块间共享的数据很多且通过参数传递很不方便时,才使用公共耦合。

****

#### 内容耦合

- 最高程度的耦合,也是最差的耦

- A模块直接访问B模块的内容

- A模块直接使用B模块的内部数据

- B模块通过非正常入口而直接转入A模块内部

- 一个模块有多个入口

- AB模块有一部分代码重叠(该部分代码具有一定的独立功能)

- 可能在汇编语言中出现

- **E.G:模块A中定义了变量a,在模块B中直接使用了。这种情况下模块A和模块B就是内容耦合**

****

## 内聚性

### 定义

#### 1/块内联系

模块的功能强度/紧密程度的度量

#### 2/模块内紧密程度

一个模块内各元素(语名之间、程序段之间)联系的越紧密==>内聚性就越高

### 分类:低->高

#### 偶然内聚/巧合内聚

- 指同一个模块内的各处理元素之间没有任何联系

- 内聚程度最低

- **E.G:A模块中有三条语句(一条赋值,一条求和,一条传参),表面上看不出任何联系,但是B、C模块中都用到了这三条语句,于是将这三条语句合并成了模块A。模块A中就是偶然内聚**

#### 逻辑内聚

- 指同一个模块内执行几个逻辑上**相似**的**功能**,通过参数确定该模块应完成哪一个功能

- **E.G:A模块实现的是将对应的人员信息发送给技术部,人事部和财政部,决定发送给哪个部门是输入的控制标志决定的。模块A中就是逻辑内聚**

#### 时间内聚

- 指同一个模块内将需要**同时执行**的动作组合在一起

- **E.G:编程开始时,程序员把对所有全局变量的初始化操作放在模块A中。模块A中就是时间内聚**

#### 过程内聚

- 指模块内部的处理成分是相关的,而且这些处理必须以特定的次序进行执行

- **E.G:用户登陆了某某网站,A模块负责依次读取用户的用户名、邮箱和联系方式,这个次序是事先规定的,不能改变。模块A中就是过程内聚**

#### 通信内聚/信息内聚

- 指各处理模块都使用**相同**的输入**数据**或者产生相同的输出数据

- 指模块内所有处理元素都在同一个数据结构上操作

- 或所有处理功能都通过公用数据而发生关联(有时称之为信息内聚)

- **E.G:模块A实现将传入的Date类型数据转换成String类型,以及将Date类型数据插入数据库,这两个操作都是对“Date类型数据”而言的。模块A中就是通信内聚**

#### 顺序内聚/过程内聚

- 指一个模块中各个处理元素都密切相关于同一功能且必须**顺序执行**,前一功能元素输出就是下一功能元素的输入

- 顺序内聚的内聚度比较高,但缺点是不如功能内聚易于维护

- **E.G.模块A实现将传入的Date类型数据转换成String类型,然后再将转换好的String类型数据插入数据库。模块A中就是顺序内聚**

#### 功能内聚

- 指模块内所有元素共同完成一个功能,**缺一不可**

- 最强的内聚,与其他模块的耦合是最弱的

- 优点是它的功能明确

- 判断一个模块是否功能内聚,一般从模块名称就能看出。如果模块名称只有一个动词和一个特定的目标(单数名词),一般来说就是功能内聚

- 功能内聚模块的一个重要特点是:他是一个“暗盒”,对于该模块的调用者来说,只需要知道这个模块能做什么,而不需要知道这个模块是如何做的

- **E.G.模块A实现将新注册的用户信息(用户名,密码,个性签名)全部转换成String类型并插入数据库**

****

## 高内聚,低耦合的系统的优势?

更好的重用性,维护性,扩展性

## 高内聚低耦合是否意味着内聚越高越好,耦合越低越好?

### 真正好的设计是在高内聚和低耦合间进行平衡,也就是说高内聚和低耦合是冲突的。

### 从内聚上

最强的内聚:一个类只写一个函数==>类的数量急剧增多==>其它类的耦合特别多==>整个设计就变成了“高内聚高耦合”==>由于高耦合,整个系统变动同样非常频繁

### 从耦合上

最弱的耦合:一个类包含所有的函数,这样类完全不依赖其它类,耦合性是最低的==>内聚性很低==>整个设计就变成了“低耦合低内聚“==>由于低内聚,整个类的变动同样非常频繁

## 软件设计时,如何做好高内聚低耦合?

### 从内聚上

在模块划分时,要遵循“一个模块,一个功能”的原则,尽可能使模块达到功能内聚

### 从耦合上

建立模块间尽可能松散的系统,在设计上我们应采用以下原则:若模块间必须存在耦合,应尽量使用数据耦合,少用控制耦合,慎用或有控制地使用公共耦合,并限制公共耦合的范围,尽量避免内容耦合。

参考文献:

python模块化设计耦合度_模块化开发——高内聚低耦合相关推荐

  1. 耦合关系从强到弱顺序_软件设计要求—“高内聚低耦合”

    耦合度 一.什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 耦合度(Coupling)是对模块间关联程度的度量.耦合的强弱取决与模块间接口 ...

  2. c语言如何实现高内聚低耦合_如何实现高内聚低耦合?高内聚低耦合的现实例子...

    下面要给大家分享的是一个高内聚低耦合例子,那么编程应该如何实现高内聚低耦合呢?一起来看看下面的实例吧! 案例: 在一个学校里面,有着老师若干名,依次编号. 有学生若干名,依次编号. 现在的话,是要求要 ...

  3. c语言如何实现高内聚低耦合_怎么理解高内聚低耦合

    本文转自:http://www.cnblogs.com/hegezhou_hot/archive/2010/09/18/1830306.html 一.上章回顾 在上篇中我们讲解了几类UML2.0语言新 ...

  4. python模块化设计耦合度_什么是程序设计中的高内聚、低耦合?

    开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...

  5. 知识篇: 面向对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法...

    面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...

  6. java 高内聚低耦合_高内聚低耦合是矛盾的吗?

    随着PMTalk版本的不断迭代,到现在我们已经迭代到5.0了,上线了3年班,在这漫长的时间里,一个产品会在研发中.产品设计有什么问题呢? 这里的问题主要是包含三类 1.技术人员不断变换,代码规范层次不 ...

  7. 浅谈面向对象开发原则:高内聚,低耦合

    软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低 ...

  8. 软件设计之——“高内聚低耦合”

    耦合度 一.什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 耦合度(Coupling)是对模块间关联程度的度量.耦合的强弱取决与模块间接口 ...

  9. 软件设计之——高内聚低耦合

    耦合度 一.什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 耦合度(Coupling)是对模块间关联程度的度量.耦合的强弱取决与模块间接口 ...

最新文章

  1. mysql主键始终从小到大_Mysql从入门到入神之(四)B+树索引
  2. 批评“古风”歌词“狗屁不通”就是不尊重?我们又都成了“垃圾听众”
  3. jquery的disabled
  4. 为不同目录设置Forms身份验证
  5. 「服务端」node服务的监控预警系统架构
  6. Flume实操(三)【实时读取目录文件到HDFS案例】
  7. 奥鹏计算机基础18秋在线作业答案,18秋华师《计算机基础》在线作业1(标准答案).doc...
  8. Vue - 去除控制台“你正在开发模式下运行Vue”的警告
  9. OpenShift 4 - Knative教程 (6) Eventing之Channel和Subscription
  10. 进程互斥的硬件实现方法
  11. python学习笔记10-匿名函数lambda
  12. fedora20配置静态ip
  13. 民商法领域的论文选题求推荐?
  14. 【学习笔记】密码学入门(3) 密钥,随机数,PGP软件
  15. uniapp中上传图片到OSS服务器,上传图片upload修改为同步请求、以及h5和APP端压缩图片
  16. iGoogle创新设计大赛
  17. 在动态表格中智能搜索框JS实现(layui的智能搜索不能手动输入的问题解决)
  18. powerdesigner中把用例关系线设置成直线
  19. 微信图片太模糊如何弄清晰?微信图片过期怎么恢复原图
  20. @kubernetes(k8s)label标签的使用及service代理模式

热门文章

  1. 水利部:去年土地出让金270亿投向农田水利
  2. html5看上去很美!
  3. 一文搞懂Java日志级别,重复记录、丢日志问题
  4. 收集 Linux 相关专业术语发音
  5. 【转】汽车零件产品开发过程A样件、B样件和C样件的区别?
  6. 小米推出最新“全家桶”,为上市献礼?
  7. javac环境变量配置csdn_Java环境变量配置超详细教程
  8. Oracle数据库查询优化建议
  9. [MacOS] FFmpeg生成QuickTime可播放h265视频
  10. 夜间照相参数_如何在夜间拍照(不会模糊)