首页 > 其他分享 >高内聚与低耦合

高内聚与低耦合

时间:2023-06-24 10:31:55浏览次数:24  
标签:info 原则 接口 模块 内聚 耦合

模块

模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决.

耦合主要描述模块之间的关系, 内聚主要描述模块内部. 模块的粒度可大可小, 可以是函数, 类, 功能块等等.

耦合

模块之间存在依赖, 导致改动可能会互相影响, 关系越紧密, 耦合越强, 模块独立性越差.

比如模块A直接操作了模块B中数据, 则视为强耦合, 若A只是通过数据与模块B交互, 则视为弱耦合.

独立的模块便于扩展, 维护, 写单元测试, 如果模块之间重重依赖, 会极大降低开发效率.

高内聚与低耦合_低耦合

内聚

模块内部的元素, 关联性越强, 则内聚越高, 模块单一性更强. 一个模块应当尽可能独立完成某个功能,

如果有各种场景需要被引入到当前模块, 代码质量将变得非常脆弱, 这种情况建议拆分为多个模块.

低内聚的模块代码, 不管是维护, 扩展还是重构都相当麻烦, 难以下手.

高内聚与低耦合_低耦合_02

接口设计原则

好的接口应当满足设计模式六大原则, 很多设计模式, 框架都是基于高内聚低耦合这个出发点的.

  1. 单一职责原则: 一个类只负责一个功能领域中的相应职责.
  2. 开闭原则: 一个软件实体应当对扩展开放,对修改关闭.
  3. 里氏代换原则: 所有引用基类(父类)的地方必须能透明地使用其子类的对象.
  4. 依赖倒转原则: 抽象不应该依赖于细节, 细节应当依赖于抽象. 换言之, 要针对接口编程, 而不是针对实现编程.
  5. 接口隔离原则: 使用多个专门的接口, 而不使用单一的总接口, 即客户端不应该依赖那些它不需要的接口.
  6. 迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用, 例如外观模式, 对外暴露统一接口.

举几个栗子

外观模式

为系统中多个子系统提供一致的对外调用, 对客户端隐藏子系统细节, 降低其与子系统的耦合.

高内聚与低耦合_低耦合_03

桥接模式

JDBC中的把面向厂商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔离.

// 开发者只需要关注JDBC API, 无需关注不同数据库Driver接口实现
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);

高内聚与低耦合_高内聚_04

适配器模式

引入第三方库(hibernate, log4j), 不应该直接在代码中继承或者使用其实体类.

需要抽出上层统一接口, 然后增加实现类, 对外暴露接口.

// 代码与log4j强耦合, 不推荐
org.apache.log4j.Logger.getRootLogger().info("info");
// 底层可以随意更换log框架
FRLoggerFactory.getLogger().info("info");

高内聚与低耦合_高内聚低耦合_05

标签:info,原则,接口,模块,内聚,耦合
From: https://blog.51cto.com/jowin/6540970

相关文章

  • 软件工程中内聚的分类
    在软件工程中,内聚是用来衡量模块内部功能联系紧密程度的概念。有不同的内聚类型,其中包括偶然内聚、逻辑内聚、过程内聚和通信内聚。下面是对每种内聚类型的简单说明和举例:偶然内聚(CoincidentalCohesion):偶然内聚指的是模块内的元素之间没有明确的功能联系,它们仅仅是因为某种偶然......
  • 最简单理解高内聚低耦合
    低耦合:耦合就是元素与元素之间的连接,感知和依赖量度。这里说的元素即是功能,对象,系统,子系统,模块。例如:现在有方法A和方法B我们在A元素去调用B元素,当B元素有问题或者不存在的时候,A元素就不能正常的工作,那么就说元素A和元素B耦合耦合带来的问题:当元素B变更或者不存在时,都将影响......
  • 什么是高内聚、低耦合
    什么是高内聚、低耦合?起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独......
  • MATLAB代码: 基于人工神经网络的电-气耦合系统快速经济调度的数据驱动方法。
    MATLAB代码:基于人工神经网络的电-气耦合系统快速经济调度的数据驱动方法。该代码基于人工神经网络的数据驱动方法,通过利用基于分段线性化的模型驱动方法的仿真数据,对电-气耦合综合能源系统进行快速经济调度。每个电气总线和气体节点处的负载分布作为输入神经元馈入人工神经网络;最......
  • 智能优化算法应用:麻雀算法优化脉冲耦合神经网络的图像自动分割 -附代码
    智能优化算法应用:麻雀算法优化脉冲耦合神经网络的图像自动分割文章目录智能优化算法应用:麻雀算法优化脉冲耦合神经网络的图像自动分割1.麻雀搜索算法2.PCNN网络3.实验结果4.参考文献5.Matlab代码摘要:本文利用麻雀搜索算法对脉冲耦合神经网络的参数进行优化,以信息熵作为适应度函......
  • 继承中耦合性强的问题以及解决方案
    在面向对象编程中,继承是一个常用的特性,它可以让子类继承父类的属性和方法,并且可以在子类中进行扩展和重写。但是,继承也会带来一些问题,其中之一就是耦合性强导致的问题。本文将从耦合性强的定义、出现问题的原因和解决方案三个方面来讨论这个问题。耦合性强的定义在......
  • 电-气-热综合能源系统耦合优化调度
    电-气-热综合能源系统耦合优化调度关键词:综合能源系统优化调度电气热耦合 仿真平台:MATLAB+CPLEX主要内容:代码主要做的是一个考虑电网、热网以及气网耦合调度的综合能源系统优化调度模型,考虑了电网与气网,电网与热网的耦合,算例系统中,电网部分为10机39节点的综合能源系统,气网......
  • 什么是人工智能领域提问问题的耦合度?
    人工智能领域中,提问问题的耦合度(Coupling)通常指问题与数据之间的联系程度,即问题对数据的依赖程度。具体来说,问题的耦合度越高,说明问题需要更多的信息和背景知识才能得到正确的答案;反之,耦合度越低,问题所需的信息和背景知识越少,答案也更容易得到。例如,对于以下两个问题:(1)计算机......
  • 综合能源耦合微网优化程序matlab 程序基于冷热电联供综合能源耦合模型,采用cchp
    综合能源耦合微网优化程序matlab程序基于冷热电联供综合能源耦合模型,采用cchp,并且含有压缩空气储能,采用粒子群优化求解ID:4690639187575931......
  • 基于阶梯碳交易成本的含电转气-碳捕集(P2G-CCS)耦合的综合能源系统低碳经济优化调度
    原创改进基于阶梯碳交易成本的含电转气-碳捕集(P2G-CCS)耦合的综合能源系统低碳经济优化调度,采用(Matlab+Yalmip+Cplex)考虑P2G设备、碳捕集电厂、风电机组、光伏机组、CHP机组、燃气锅炉、电储能、热储能、烟气存储罐。YID:6865678475135380......