高内聚低耦合

高内聚低耦合是模块设计的基本原则。模块设计就像四世同堂居家过日子,妯娌婆媳吃大锅饭、柴米油盐不分你我很容易伤和气;如果亲兄弟明算账,每顿饭都AA又太显得生分,不利于和谐,因此把握好一个度很关键。一个系统是由不同模块构成的有机统一体,系统的外在功能是由系统内部各个模块之间相互协作、相互关联实现的。我们在划分模块时,如果各个模块纠缠在一块,结构混乱、层次不清晰,就不利于管理和维护;如果模块过于独立,模块间的相互关联和交互少了,就像肉架子上的一块块肉一样,无法构成一个相互关联的有机系统,充其量也只能算一个库。

模块的耦合度和内聚度是考核模块设计是否合理的参考标准。模块的内聚度指模块内各元素的关联、交互程度。从功能角度上看,就是各个模块在实现各自功能的时候,要自己的事自己做,自己的功能自己实现,尽量不麻烦其他模块。一个模块要想实现高内聚,首先模块的功能要尽可能单一,一个功能由一个模块实现,这样才能体现模块的独立性,进而实现高内聚。在模块实现过程中,遵循着“自己动手,丰衣足食”的基本原则,要尽量调用本模块实现的函数,减少对外部函数的依赖,这样可以进一步提高模块的独立性,提高模块的内聚度。

与模块内聚对应的是模块耦合。模块耦合指的是模块间的关联和依赖,包括调用关系、控制关系、数据传递等。模块间的关联越强,其耦合度就越高,模块的独立性就越差,其内聚度也就随之越低。不同模块之间有不同的关联方式,也有不同的耦合方式。

● 非直接耦合:两个模块之间没有直接联系。

● 数据耦合:通过参数来交换数据。

● 标记耦合:通过参数传递记录信息。

● 控制耦合:通过标志、开关、名字等,控制另一个模块。

● 外部耦合:所有模块访问同一个全局变量。

我们在设计模块时,要尽量降低模块的耦合度。低耦合有很多好处,如可以让系统的结构层次更加清晰,升级维护起来更加方便。在C语言程序中,我们可以通过下面的常用方法降低模块的耦合度。

● 接口设计:隐藏不必要的接口和内部数据类型,模块引出的API封装在头文件中,其余函数使用static修饰。

● 全局变量:尽量少使用,可改为通过API访问以减少外部耦合。

● 模块设计:尽可能独立存在,功能单一明确,接口少而简单。

● 模块依赖:模块之间最好全是单向调用,上下依赖,禁止相互调用。

总之,模块的高内聚和低耦合并不是一分为二的,而是辩证统一的:高内聚导致低耦合,低耦合意味着高内聚。简单理解就是:模块划分要清晰,接口要明确,有明确的输入和输出,模块间的耦合性小。在实际编程中,只有坚持这些原则,不断地对自己的代码进行重构和迭代,才能设计出更高质量的代码,迭代出更易管理和维护的系统架构。

高内聚低耦合设计原则相关推荐

  1. 怎样理解高内聚低耦合?

    在网上查了很多相关的资料不能更好地去帮我们理解高内聚与低耦合.以我自己的理解总结以下几点: 什么是高内聚: 在我们开发项目中的时候,需要有很多的模块,但模块与模块间肯定会存在相互调用.高内聚指的就是模 ...

  2. 8.18 模块设计原则:高内聚低耦合

    8.18 模块设计原则:高内聚低耦合 模块内聚 定义(软考) 块内联系:模块内各元素的关联.交互程度 从功能角度:自己的功能自己实现,不麻烦其它模块 如何实现高内聚 功能内聚:模块的功能尽可能单一 模 ...

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

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

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

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

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

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

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

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

  7. python模块化设计耦合度_模块化开发——高内聚低耦合

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

  8. 高内聚低耦合通俗理解_带你从入门到精通——「高内聚低耦合」

    如果这是第二次看到我的文章,欢迎订阅z哥的公号(跨界架构师)哦~ 本文长度为2871字,建议阅读8分钟. 坚持原创,每一篇都是用心之作- 下面的这个场景你可能会觉得很熟悉(Z哥我又要出演了): Z哥: ...

  9. 高内聚低耦合是什么含义,怎么实现?

    一.含义 高内聚低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低. 目的:使程序模块的可重用性.移植性大大增强. 通常程序结构中 ...

最新文章

  1. 【Linux】 -bash-4.2#问题和Cannot allocate memory
  2. SpringMVC @RequestBody ajax传递对象数组
  3. Apache Cassandra和Apache Ignite:关系并置和分布式SQL
  4. 关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库
  5. mysql 的数据库实例理解_理解数据库和实例
  6. oracle并发执行max,跪求大量并发执行insert into select语句的方案
  7. arduino tft 方向_ESP32在Arduino环境下玩转 LVGL,ESP32移植LVGL详细教程
  8. 容器编排技术 -- Kubernetes kubectl create quota 命令详解
  9. VIM:使用js高亮对json文件着色
  10. 读张满胜之《英语语法新思维初级教程》
  11. 一维搜索算法——黄金分割法原理与实现
  12. HTML5---canvas 指针时钟-clock
  13. Qt编写安防视频监控系统58-子模块2窗口信息
  14. .h和.c文件的区别到底是什么(精确讲解)
  15. 使用flex时的自动换行
  16. MySQL加索引及导数导致的问题
  17. wp微信小程序终极版开源下载
  18. 新增市场竞争激烈,中国移动被迫推出限制性超低价5G套餐
  19. Kaggle 新手入门必看,手把手教学
  20. 架构分析:「转转云平台」的 Kubernetes 实践

热门文章

  1. [基于归纳的算法设计][4] 社会名流问题
  2. TranslateAnimation的onAnimationEnd(Animation animation)竟然在TranslateAnimation完成前执行
  3. 智能传感器类型功能及应用
  4. 【MySQL】47 条SQL语句性能优化策略
  5. VTK--交互方式vtkInteractorStyleTrackballCamera
  6. 65w氮化镓充电器不适配笔记本电脑的情况。
  7. 看完就懂:GPU和显卡的关系,GPU和CUDA有什么关系?
  8. Python list列表添三种加元素的方法
  9. 自媒体文章怎么写?这4点你要知道
  10. 网络营销【淘宝宝贝主图】设计思路太原郭文军解说