前言

如果你涉及软件开发,可能会经常听到“高内聚,低耦合”这种概念型词语。我在第一次接触这种词语时,也抱有很大的疑问,但我发现百度上大部分都是高大上的词汇解释。

仔细通读这篇文章,你就能理解耦合性和内聚性的概念与关系。

WHY?

Why?如果你使用过面向对象的编程语言,初学者很容易:

把所有代码都写到一个方法里。

当我翻回到我曾经写过的代码后,我绝望了。

比如我们要获取一个用户的信息,我们需要先:

1. 在代码中填写数据库的地址、用户名、密码、表名
2. 加载SQL驱动
3. 执行语句
4. 获得结果

如果你只需要在一个方法里调用用户的信息,你可以把这四步的代码全部写到那个方法中。

但是如果我们有多个方法都要调用数据库呢?

把这段语句写四五六七八九遍?

不不不。不但你会抓耳挠腮,IDE都看不下去了。

如果我们新建一个方法,专门用于读取用户的信息呢?

在这个方法中,是上方执行语句的代码,但不同的是,我们使用其它方法调用该查询方法的时候,传入查询语句,这个方法就能返回给我们想要的值。

你只要将查询代码单独写成一个方法,当其它方法需要查询的时候,只需要调用这个查询方法并传入想查询的数据就可以了。

DO!

由于我不会用其它语言,所以这里使用Java进行演示。

首先看下面这串代码:

public class SimpleDemo {//由姓名获取某个用户的全部信息public void byName() {//1.创建驱动程序类对象Driver driver = new com.mysql.jdbc.Driver();//设置用户名和密码Properties props = new Properties();props.setProperty("user", "root");props.setProperty("password", "toor");//2.连接数据库,返回连接对象Connection conn = driver.connect(url, props);String sql="select * from users where name = 'lilei'";Statement pstmt = conn.createStatement();ResultSet rs=pstmt.executeQuery(sql);System.out.println("结果为:" + rs.next());}//由ID获取某个用户的全部信息public void byID() {//1.创建驱动程序类对象Driver driver = new com.mysql.jdbc.Driver();//设置用户名和密码Properties props = new Properties();props.setProperty("user", "root");props.setProperty("password", "toor");//2.连接数据库,返回连接对象Connection conn = driver.connect(url, props);String sql="select * from users where id = 1";Statement pstmt = conn.createStatement();ResultSet rs=pstmt.executeQuery(sql);System.out.println("结果为:" + rs.next());}//由年龄获取某个用户的全部信息public void byAge() {//1.创建驱动程序类对象Driver driver = new com.mysql.jdbc.Driver();//设置用户名和密码Properties props = new Properties();props.setProperty("user", "root");props.setProperty("password", "toor");//2.连接数据库,返回连接对象Connection conn = driver.connect(url, props);String sql="select * from users where age = 18";Statement pstmt = conn.createStatement();ResultSet rs=pstmt.executeQuery(sql);System.out.println("结果为:" + rs.next());}}

我们使用用户名、ID、年龄读取了三次信息,你会发现一件事:

重复的代码太多!

如果我们稍加修改:

public class SimpleDemo {//执行数据库语句public ResultSet doSQL(String sql) {//1.创建驱动程序类对象Driver driver = new com.mysql.jdbc.Driver();//设置用户名和密码Properties props = new Properties();props.setProperty("user", "root");props.setProperty("password", "toor");//2.连接数据库,返回连接对象Connection conn = driver.connect(url, props);Statement pstmt = conn.createStatement();ResultSet rs=pstmt.executeQuery(sql);return rs;}public void byName() {ResultSet rs = doSQL("select * from users where name = 'lilei'");System.out.println("结果为:" + rs.next());}public void byID() {ResultSet rs = doSQL("select * from users where id = 1");System.out.println("结果为:" + rs.next());}public void byAge() {ResultSet rs = doSQL("select * from users where age = 18");System.out.println("结果为:" + rs.next());}}

利用传值,我们将大部分冗余代码进行了清理。
后语
概念

讲了这么多,你大概猜到耦合是什么意思了:

将一串代码模块化(即封装为不同方法),每个模块(方法)都有自己的功能。
封装方法越多,耦合度越低。模块与模块之间接口的复杂程度和联系越复杂,
耦合度越高。

那么内聚就是:

每个模块(方法)相互分离的情况下,修改了某模块(方法)其中的某些代码,
但并不影响和其它模块的通讯(即高内聚)。每个模块尽可能独立完成自己的功能,
不依赖于模块外部的代码。

总结

“高内聚,低耦合”是面向对象编程的基本原则,
我们能获得更好的维护性和更佳的可读性。

如转载请在文章尾部添加:

 原作者来自AdlerED个人技术博客:https://www.stackoverflow.wiki/

什么是耦合性和内聚性?相关推荐

  1. 程序的耦合性和内聚性

    耦合性(Coupling,dependency,或称耦合力或耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度. 内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反 ...

  2. 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解!

    前言 如果你涉及软件开发,可能会经常听到"高内聚,低耦合"这种概念型词语.我在第一次接触这种词语时,也抱有很大的疑问,但我发现百度上大部分都是高大上的词汇解释. 仔细通读这篇文章, ...

  3. 模块独立(耦合性与内聚性)

    模块独立性指模块不依赖其他模块独立完成功能的程度.模块独立程度的两个定性标准度量是耦合和内聚. 耦合性衡量不同模块彼此之间相互依赖(连接)的紧密程度,耦合要低,即每个模块与其他模块的关系要简单:内聚性 ...

  4. 软件设计之耦合性与内聚性的区别

    耦合性 耦合性也叫块间联系,指软件系统结构中各模块间相互联系紧密程度的一种度量. 模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的 ...

  5. 【架构】软件代码的耦合性和内聚性,以几个简单小例子说明

    1. 起因 这篇文章应该算作前两篇文章的后续思考. 在前两篇文章中,考虑到了分层的方法,参考了别人的代码架构. [架构]工程代码结构(附带NXP.ST官方demo) [架构]嵌入式软件架构设计 模块化 ...

  6. 程序的耦合性与内聚性的概念 以及 “高内聚,低耦合”

    一.耦合性 耦合性也叫块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传 ...

  7. 简单的说一下 软件的 内聚性 和 耦合性

    内聚性,又称块内联系.指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量. 内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标.模块中组成元素结合的越紧密,模块的内 ...

  8. 软件的内聚性和耦合性

    来源:http://hi.baidu.com/rooot/blog/item/30db2308b5380ed763d98617.html 模块的独立程度是评价设计好坏的重要度量标准.衡量软件的模块独立 ...

  9. 计算机耦合分类,耦合性 (计算机科学)

    关于与"耦合性 (计算机科学)"名称相近或相同的条目,请见"耦合". 耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种软件度量, ...

最新文章

  1. 前端也要学系列:设计模式之装饰者模式
  2. Xamarin XAML语言教程构建进度条ProgressBar
  3. python推荐系统-python 新闻推荐系统(基于新闻内容推荐)
  4. 4-字符转换及所在位置
  5. [转] Android SDK manager 无法获取更新版本列表
  6. 进销存excel_EXCEL进销存系统升级版,自动库存更新,利润毛利分析一键操作
  7. 多因子量化投资模型策略深度研究
  8. 南京师范大学2021年硕士研究生入学考试高等代数试卷及参考答案
  9. 在计算机f有关快捷键,电脑快捷键大全
  10. android 多个style,Android style详解
  11. 鸿蒙子系统解读-分布式任务调度篇
  12. pytorch之---relu,prelu,leakyrelu
  13. recovery教程
  14. 国产FPGA(紫光同创)—— 数据采集及千兆以太网传输(一)
  15. 树莓派Linux入门教程
  16. 【渝粤题库】陕西师范大学500019 电路分析
  17. EXCEL上固定表头表尾
  18. 实现ECharts双Y轴左右刻度线一致
  19. 多边形游戏-动态规划(Java)
  20. 全球生态遥感监测数据

热门文章

  1. MySql中Explain的Extra列
  2. 真无线耳机哪个牌子好用?2023便宜好用的无线耳机推荐
  3. 1000个常用建模材质,提高效率
  4. xff(x-forwarded-for)介绍,某些ctf题目中的利用
  5. 写一个APP控制第三方播放器播放,以及获取正在播放的歌曲信息
  6. 所有的错误都是精心包装的礼物
  7. 自学前端第二十二天:perspective视觉
  8. 【Linux】基本的指令(终章)
  9. Windows系统下获取主板各区域温度的命令
  10. 传Google将推WiFi手机 支持Google Talk