一、什么是耦合度

耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计及编码质量评价的一个标准。耦合的强度依赖于以下几个因素:(1)一个模块对另一个模块的调用;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。

耦合按从强到弱的顺序可分为以下几种类型:

(1)内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。类与类之间直接调用或继承关系都是属于这种耦合。

(2)公共耦合。两个及两个以上的模块共同引用一个全局数据项就称为公共耦合。

(3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。

(4)标记耦合。模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。

(5)数据耦合。模块间通过参数传递基本类型的数据,称为数据耦合。

(6)非直接耦合。模块间没有信息传递时,属于非直接耦合。

二、为什么要低耦合

了解什么是耦合及耦合的分类后,我想大家对为什么要降低耦合度已经有一定的认识,并且多数开发人员也大概尝尽了高耦合带来的苦头。道理很简单,耦合度很高的情况下,维护代码时修改一个地方会牵连到很多地方,如果修改时没有理清这些耦合关系,那么带来的后果可能会是灾难性的,特别是对于需求变化较多以及多人协作开发维护的项目,修改一个地方会引起本来已经运行稳定的模块错误,严重时会导致恶性循环,问题永远改不完,开发和测试都在各种问题之间奔波劳累,最后导致项目延期,用户满意度降低,成本也增加了,这对用户和开发商影响都是很恶劣的,各种风险也就不言而喻了。

为了预防这些问题的发生,其中一个重要手段就是降低代码的耦合度。但也不可能有绝对的零耦合,比如基于J2EE编程那就必须和JDK耦合,而且高耦合也不是一无是处,如果在设计前期预料到某功能后期基本不用修改,那么即使高耦合了也关系不大。但是,在还没有能力设计出基本不用修改的代码前,还得要求以低耦合为标准。那么怎样才能最大限度地降低耦合度呢?下面介绍降低耦合度的几种方法。

三、降低耦合度的方法

1、少使用类的继承,多用接口隐藏实现的细节。 java面向对象编程引入接口除了支持多态外, 隐藏实现细节也是其中一个目的。

2、模块的功能化分尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少。(其实这是高内聚的一种说法,高内聚低耦合一般同时出现,为了限制篇幅,我们将在以后的版期中讨论)。

3、遵循一个定义只在一个地方出现。

4、少使用全局变量。

5、类属性和方法的声明少用public,多用private关键字,

6、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度。

7、尽量不用“硬编码”的方式写程序,同时也尽量避免直接用SQL语句操作数据库。

8、最后当然就是避免直接操作或调用其它模块或类(内容耦合);如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。

关于降低耦合,小编也发现了比较好的一个帖子,可以参考:http://blog.csdn.net/tianyaxingge/article/details/6696114

java多态 降低代码耦合性_如何降低耦合度相关推荐

  1. java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...

    Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...

  2. java中接口降低耦合性_如何降低一个程序的耦合性

    耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间接口的复杂程度.调用模块的方式以及哪些信息通过接口. 一般模块之间可能的连接方式有七种,构成耦合性的七种类型.它们之间的关系为(由弱到 ...

  3. 21 利用分布式消息队列降低系统耦合性

    国内某大型互联网企业经常因为对同行的产品进行微创新,然后推岀自己的产品而遭人诟病,不讨论这种做法是否合适,我们分析这些产品,发现大多数都比原创产品有 更好的用户体验.这些产品常常后来居上,更速度地推岀 ...

  4. 耦合性(或称“耦合度”)

    耦合性(或称"耦合度") 英文 : coupling 耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间接口的复杂程度.调用模块的方式以及哪些信息通过接口. 一般模 ...

  5. java 耦合性_软件工程中的耦合性和解耦合性是什么意思?

    我也来通俗地讲一讲,说的不好请勿喷. 简单概括:耦合就是程序中的一部分跟其他部分之间的关系.解耦合就是把必要的耦合理顺,同时尽量减少不必要的耦合(这一句其实就是高内聚低耦合的通俗解释). 如何看待耦合 ...

  6. c++代码健壮性_复活Navex-使用图查询进行代码分析(上)

    从了解到修复 Navex, 其中花了一年多, 从对自动化代码审计一无所知到学习PL/Static Analysis, 翻阅十几年前的文档, 补全Gremlin Step, 理解AST, CFG, DD ...

  7. java 用程序代码解释继承_关于初级java程序员笔试题

    关于初级java程序员笔试题 Sun 认证Java程序员考试内容涉及Java所有相关知识.编程概念及applet开发技巧.下面是小编整理的关于初级java程序员笔试题,欢迎大家参考! 第一题:判断题 ...

  8. java逆向生成代码有哪些_利用mybatis逆向工程生成代码

    在做项目过程中,当面对很多表时,手动编写Mapper.xml.Mapper.java和pojo无疑是要人命,还容易出错,导致对数据库操作时各种异常.这就陷入了写bug,改bug的旋涡. 针对这一痛点, ...

  9. java打出的代码如何保存_如何使用java代码导出word

    前言: 导出word的需求其实在日常工作中用到的地方还不少,于是想写一篇文章好好记录一下,在导出之前,需要了解一下关于浏览器如何处理servlet的后台数据.具体可以了解一下http通信下载行为在se ...

最新文章

  1. origin做主成分分析图_如何用SPSS做主成分分析?学习资料集锦
  2. php 函数变量的顺序,PHP实现参数的自定义顺序调用 | 剑花烟雨江南
  3. vs点击方法跳不到对于的地方_内脏脂肪怎么测?这个方法也太方便了!| EASD 2020...
  4. 排序算法之十 希尔排序(C++版本)
  5. 使用遇到的问题_喷淋塔使用过程中遇到的问题以及解决方法
  6. java 美元符号_$ -----JavaScript 中美元符号 $ 的作用
  7. 第三次作业--结对编程
  8. UE发生GPU崩溃D3D丢失,真的跟硬件有关系。
  9. 【设计模式系列】--单例模式
  10. phpstorm官方下载地址
  11. 作为程序员,到底是老板对你怎么了,让你竟然写下这么既奇葩无语又崩溃的代码注释,笑哭...……
  12. java中图片排版,如何快速排版PPT中的图片?这样做真实而不失美感
  13. 30行代码实现微信朋友圈自动点赞
  14. 低轨卫星传播特性仿真与分析
  15. 六个免费网站统计平台工具对比推荐 你的网站统计用哪个
  16. 不用修改注册表和组策略也能在 Win11 报名教师资格证
  17. 金蝶计算机快捷键,(完整版)金蝶软件快捷键
  18. 用HTML写一个2023跨年动画代码(烟花+自定义文字+背景音乐+雪花+倒计时)
  19. 解决联想电脑网络连接后网页出现“未连接到互联网”的问题
  20. python获取财务数据_「净利润增长率」使用python获取股票“净利润同比增长率”等“上市公司成长能力”数据 - seo实验室...

热门文章

  1. 清华大学自动化系科技营暨清华大学自动化系智能机器人挑战赛 | 无线电轨比赛实施方案
  2. FastDFS使用教程
  3. 职业高中计算机专业要学些什么,职业高中电子专业主要学什么
  4. 一款增强的3D carousel控件
  5. 基于stm32f429的手写识别_【连载】STM32开发指南--第五十一章 手写识别实验
  6. 阿拉伯整数转成人民币表示
  7. 如何实现一个 Paxos
  8. jboss7 ClassNotFoundException
  9. Android通过打开相册图片获取图片路径
  10. 摄影测量后方交会-前方交会(C#)