yaojunwei 发表于 2007-4-10 09:48:38

什么是高内聚和低耦合?

接触软件测试,也同时接触一些“高深”词汇,比如高内聚,低耦合等,那么什么是高内聚,什么又是低耦合呢?请哪位大虾解释一下,因为还不怎么明白呢。有资料提供的话更好,先谢过。

rainyday32 发表于 2007-4-10 10:12:05

我不太清楚这两个概念,但是根据我个人的理解:
高内聚也许是说一个模块应该具备足够多的功能
低耦合就是说一个模块应该尽可能少的与其他模块有功能上的交互,这样既利于系统的维护也利于测试~
以上是个人理解,希望有人指正错误之处~

云层 发表于 2007-4-10 10:20:16

概念请看软件工程这本书

xqq1999 发表于 2007-4-11 09:22:55

耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块之间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。,简单地说,理想内聚的模块只作一件事情。

yoyo_zhang 发表于 2007-4-11 10:06:27

高内聚,低耦合在软件工程里有,主要是说模快之间和模块内部之间的关系紧密程度
高内聚就是提高模快内部的关联程度,低耦合当然就是降低模快之间的关联程度
耦合性比较高的话,模块代码不易分离,是不好的编程模式
内聚是越高越好,内聚个人认为是只是实现一个功能,不是很多的功能

98farseen 发表于 2007-4-11 12:43:51

同意楼上,是的,"低内聚高藕合"可以说是编程的一种原则或规范,主要也就是减少模块
间的依赖性,使得程序的可重用性,移植性大大增强
至于解释楼上说的很详细

sindybi 发表于 2007-4-11 12:56:53

耦合性是程序结构中各个模块之间相互关联的度量,取决于各个模块之间接口的复杂程度、调用模块方式以及哪些信息通过接口;
一个内聚程度高的模块应当只完成软件过程中的一个单一的任务,而不与程序的其它部分过程发生联系,(在理想情况下)一个内聚性高的模块应当只做一件事;
内聚性和耦合性是相互关联的。在程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。

zhangchen 发表于 2007-4-11 13:39:18

这是软件工程中的概念 。高内聚、低耦合的模块是设计时追求的目标。
我的理解是:
高内聚:类与类之间的关系而定。高,意思是它们间的关系要简单明了,不要有很复杂的关系。不然运行起来就有可能会出问题。一个类的运行影响到其他的类。

低偶合:类内部的方法而言。把程序的功能尽量分散,别在一个类里只写一个或很好的方法,因为那样会给你的调试等带来很多问题。出了错你都不知道在什么地方。

celamethyst 发表于 2007-4-12 20:14:11

内聚:一个模块内各个元素彼此结合的紧密程度

耦合:一个软件结构内不同模块之间互连程度的度量

对于低耦合,我粗浅的理解是:

一个完整的系统,模块与模块之间,尽可能的使其独立存在。

也就是说,让每个模块,尽可能的独立完成某个特定的子功能。

模块与模块之间的接口,尽量的少而简单。

如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。

这样有利于修改和组合。

对于低耦合,我粗浅的理解是:

在一个模块内,让每个元素之间都尽可能的紧密相连。

也就是充分利用每一个元素的功能,各施所能,以最终实现某个功能。

如果某个元素与该模块的关系比较疏松的话,可能该模块的结构还不够完善,或者是该元素是多余的。

但是,这个也只是针对大部分程序来说的,有特例,如:
对于JAVA语言又是一个特例,就是高耦合,低内聚

shingo0109 发表于 2007-4-15 20:40:56

内聚和耦合,包含了横向和纵向的关系。功能内聚和数据耦合,是我们需要达成的目标。
横向的内聚和耦合,通常体现在系统的各个模块、类之间的关系,而纵向的耦合,体现在系统的各个层次之间的关系。

yyb1976 发表于 2007-12-28 12:09:01

学习了!!

dujun 发表于 2007-12-28 12:11:26

说的都很详细啊

shenyang 发表于 2007-12-28 14:31:10

[转]这是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低。
高内聚:类与类之间的关系而定,高,意思是他们之间的关系要简单,明了,不要有很强的关系,不然,运行起来就会出问题。一个类的运行影响到其他的类。

低偶合:类内部的方法而言。把程序的功能尽量分散,别在一个类里只写一个或很好的方法,因为那样会给你的调试等带来很多问题。出了错你都不知道在什么地方。

puchonghui 发表于 2007-12-28 15:11:22

我记得我那会儿的教材上说的都是
块间联系小
块内联系大

为啥现在都换成这种高深的词汇了。。。-_-

123czq 发表于 2007-12-28 18:16:19

一个函数实现一个独立的功能,这就是高内聚。

耦合的强度依赖于:(1)一个模块对另一个模块的调用;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。等等。

即使是最初级的程序员,在常常的被教导中,他也了解了这句口号的含义:我们的程序要模块化,模块要完成明确的一组关联的服务功能,要求它的各部分是相关的、有机组合起来是完整体(外部程序来看黑盒子),模块的内部各成分之间相关联程度要尽可能高(高内聚);而模块与模块之间又要求是可分拆的、少依赖的(低耦合)。就是俗话说的:该干嘛干吗去!降低各模块的之间的联系,减少“牵一发而动全身”的几率,提高开发效率,降低升级维护成本,也便于进行单元测试,提高软件质量。

    转帖转帖,懒得打字了,唉

123czq 发表于 2007-12-28 18:25:03

再转一篇吧

耦合是指模块之间联系的紧密程度。耦合度越高则模块的独立性越差。按耦合度从低到高依次有7种耦合方式。
非直接耦合(独立运行)
数据耦合(用参数表传递简单数据)
标记耦合(传递数据结构或者一部分)
控制耦合(传递的信息包括控制模块的信息)
外部耦合(模块与软件之外的环境有关)
公共耦合(多个模块引用同一全局的数据区)
内容耦合(访问内部数据,代码重叠或者多个入口)

内聚是指模块内部各元素之间联系的紧密程度内聚度越低模块的独立性越差。按内聚度从低到高依次有7种内聚种类。
偶然内聚(模块完成的多个任务,任务之间的关系松散)
逻辑内聚(模块完成逻辑相关的一组任务)
瞬时内聚(模块的所有任务必须在同一时间间隔内执行)
过程内聚(模块的处理元素相关而且按照特定的次序执行)
通信内聚(模块的所有元素集中在一个数据结构区域上)
顺序内聚(模块的处理元素相关,必须顺序执行)
功能内聚(模块完成单一的功能,各个部分协调工作,而且不可缺少)

泡沫红茶 发表于 2009-3-7 23:48:14

学习了

支持

returnlittle 发表于 2009-7-24 14:43:05

学习了

sunhope800 发表于 2009-8-4 16:00:17

学习了,顶一下!

explor 发表于 2009-12-27 12:54:41

上面有位朋友的理解跟我差不多,
他说:一个函数实现一个独立的功能,这就是高内聚
我再补充一下:多个函数实现各自功能,这就是低耦合。
我的理解:
为什么要把“高内聚,低耦合”这六个字连着读,实际上他们所阐述的原理是一样的,想表达的目的是一致的、也是有联系的。
一个类内一个函数因为高内聚,它实现了一个独立的功能,那么这个函数与同一类的其它函数就实现了低耦合,这就是上面说的他们是目的是一致的。为什么只说低耦合,而不是零耦合呢,因为程序本身在最低层同一个类里的两个函数还是有千丝万缕的联系。就好比我们经常说的一句话,没有最好只有更好是同一个道理(这是题外话)。
总结来说:高内聚就像上面朋友说的是指特定一个功能可以独立存在,一般是指一个函数实现一个功能,低耦合是指函数与函数之间不要存在相互依赖关系,这个关系越少越好。
当然类与类之间也存在这种关系。
页: [1] 2
查看完整版本: 什么是高内聚和低耦合?