【软件工程】耦合与内聚、SOLID原则,常用软件图(思维导图,类图、流程图、时序图、状态图)

一、耦合

耦合度是从模块外部考察模块的独立性,用来衡量模块间的相互联系。

主要考察:

  1. 模块相关联的代码和数据量,
  2. 模块间调用的方式
  3. 耦合的类型;
模块间耦合类型含义
独立耦合无直接联系,仅共有上层模块
数据耦合彼此交换数据(参数、返回值)
控制耦合通过参数控制执行逻辑分支
公共耦合全局变量,公共数据/缓存
内容耦合模块存在多入口(功能不单一)和非正常访问

低耦合建议:禁用内容耦合,限制公共耦合,少用控制耦合,推荐数据耦合

二、内聚

内聚是从功能角度来度量模块内的联系,它描述的是模块内的功能联系。

模块内聚程度含义
偶然内聚仅为节省空间才把相同代码挪到一个模块
逻辑内聚相似的功能组成一个新的模块
时间内聚相同时间执行的功能组成一个模块
过程内聚模块内的功能有执行时间顺序要求【中】
顺序内聚内部功能之间彼此有逻辑依赖(输出->输入)【中】
通信内聚模块内功能依赖共同的数据【中】
信息内聚模块内的多个功能基于同一数据结构,每项功能有唯一入口
功能内聚内部所有仅为实现某单一功能,无其他任何冗余

高内聚建议:遵循单一职责原则。

三、SOLID’原则

原则含义备注
单一职责(SRP)一个类只负责一种功能除非功能改变否则不予修改
开放封闭(OCP)对拓展开放,对修改关闭降低加入新的逻辑分支的门槛
里氏替换(LSP)只有子类实例能够替换所有超类实例时,才是IS-A关系否则用组合
接口分离(ISP)使用多个专门的接口,而非单一的总接口不能强迫用户去依赖那些他们不使用的接口
依赖倒置(DIP)上层模块不依赖下层模块,二者都应依赖抽象抽象不依赖实现,实现应依赖抽象
最小知识(LKP)最少知识原则,一个软件单元应当对其他软件单元有尽可能少的了解迪米特法则:门面模式,中介者模式

四、类图中的依赖关系

类图反映各软件单元的组织结构和设计思路。

OOP中,类之间的关系如下:

类型关系名
IS-A泛化(继承),实现
HAS-A关联,聚合,组合
USE-A依赖

各关系的耦合程度:
依 赖 &lt; 关 联 &lt; 聚 合 &lt; 组 合 &lt; 泛 化 &lt; 实 现 依赖&lt;关联&lt;聚合&lt;组合&lt;泛化&lt;实现 <<<<<

下面是具体描述:

依赖(Dependence)

在类A中使用到了另外一个类B,这种使用时临时的、偶然的,代码表现为方法参数局部变量返回值静态方法调用。设计中不应该有双向依赖。

Dependence

关联(Association)

类A使用了类B,其中B是A的成员变量,但B在逻辑上并非类A的组成部分。
具体关系可划分为:单向关联,双向关联,自身关联。

Association

聚合(Aggregation)

类A聚合类B,但类B在某种问题域下可以独立存在
A可以不知道B的生命周期

Aggregation

组合(Composition)

类A组合类B,但类B在某种问题域下不可以独立存在
A必须知道B的生命周期。(要么A负责生成和释放B、或者B在生成和释放的时候通知A)

Composition

泛化(Generalization)

表现为一个类继承自另一个类(或者一个接口继承另一个接口)。

Generalization

实现(Implementation)

表现为一个类实现一个或多个接口。

Implementation

最后,
一张图表示类之间的依赖关系:

relation

五、流程图

流程图从宏观上描述运行过程。
在这里插入图片描述

六、时序图

时序图反映调用关系。
在这里插入图片描述

七、状态图

状态图反映一个软件单元的动态行为。
在这里插入图片描述

八、思维导图

开发可以用思维导图来描述对需求的理解。
在这里插入图片描述

以上便是笔者日常文档中常用的图。

所谓:文不如表,表不如图。
恰当地使用图表来描述,不仅可以更好地理解代码,甚至可以在画图的过程中找到一些难以察觉的BUG。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值