耦合是啥?高耦合又是什么?以及为什么要说他。

自然框架 2011-01-05 08:00:30

耦合是什么?就是两个“元素”之间的关联、制约、调用关系。

有几个关键点。

1、不能是一个,至少也得是两个。

2、要谈耦合,必须说二者有关系的部分,不能去说二者无关的部分。

3、不要谈耦合色变。在大多数情况下,耦合是不可避免的,只能尽量减少相互的影响。

4、如果是一个,我们可以谈谈是否违反了“单一职责”,但是我们不要谈论“耦合”。当我们把这“一个”分成了“多个”之后,在来谈耦合。




耦合,当一个“元素”发生了变化,其他的“元素”如何调整才能够适应这个元素的变化。

这里的“元素”指的又是什么呢?这个就多了,可以是类(class),可以是函数,可以是人,可以是事物,也可以是零件。

高耦合又是什么?高是一个形容词,形容关联关系非常密切,一个变化后其他的受到的影响非常的大。

低耦合就是影响的程度非常小。


=========================

举例子的时间到了。

我们对电脑硬件都很熟悉吧,那么我们就以pc机的主板、内存、cpu为例来说一下。

我有一台老电脑,里面用的是DDR1的内存,内存坏掉了,到市场上一打听,发现内存都已经是DDR3了。我想买DDR3,但是老主板不支持,想要用DDR3的内存,就必须换主板。可是换主板的话,原来的cpu也用不了了。

不过还有一个好消息,虽然我不能用DDR3的内存,但是我可以使用其他品牌、其他厂商、不容容量的DDR1 的内存,只要是DDR1的就可以更换。

内存升级换代了,主板也要做调整,否则就不能使用新的内存,这就是高耦合。

内存没有升级换代,那么就可以更换其他品牌、厂商和容量的内存,这就是低耦合。


可能你有点晕,怎么一回低一会高?

先说低耦合吧。为什么可以更换其他品牌、厂商和容量的内存的内存呢?因为内存厂商和主板厂商,都准寻同一个标准(接口)——DDR(1代)。大家都准寻这个标准来生产,那么生产出来的就可以互相替换。我想升级内存可以更换容量,比如单条512K的内存和单条1G的内存。

那么到后来怎么又不行了呢?标准(接口)发生了变化。赖以生存的东东变了,于是就杯具了。


谈论耦合,目的是为了能够把一个大的模块分成几个小的模块,互相独立发展,但是之间又必须准寻一定的标准。也就是他们互相调用(或者单项调用)的方式。


就是这个标准要如何定义,各个模块如何实现,要达到什么样的程度。就拿上面的例子来说,想当初内存的标准为什么不直接定义成DDR3的形式?我对硬件不太了解,相必有其原因吧,可能是技术上的,可能是经济上的,也可能是盈利方面的。这个就不多说了,总之想要一步到位,一下子做的完美,几乎是不可能的。量力而行吧。


以上是我的拙见,让大家见笑了。欢迎多多指教。


============

对于内聚,我还没吃透,就不说了。




...全文
5516 44 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
自然框架 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 jxyxhz 的回复:]
楼主我记得你在博客园上说过,你不再写软文了!

多写点实际应用的技术问题吧。

就像吉日一样,把他的框架以技术来分享,然后推广。。

不过我也有点不是很认同他,每篇博文都不深入,讲到关键点又是他的淘宝网址。
[/Quote]

这就是他的特点呀,想要深入吗?交钱先。

另外,我的自然框架没有技术来推广吗?

这个也不算是软文吧,我的一个想法。

自然框架里的QuickPager分页控件,就涉及到耦合的问题,好多人都是这个分页控件耦合度很高。

说一下我的想法。

其实我觉得如果能够把主板的设计,主板接口设计,主板与内存、cpu等配件如何通讯的话,那么对以软件设计来说,也是一个很大的提高的。

hl362496158 2011-01-07
  • 打赏
  • 举报
回复
很多时候都忽略这个了
小_虎 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 microtry 的回复:]
呵呵,小虎说的那个吉日啊,有一次我在他的博文下发了个不同见解,他居然把我的回复给删了
[/Quote]

呵呵,如果你关注博客园的话,就会知道,推荐的博客有好多是真的分享技术的。也有好多是写软文的。
阿非 2011-01-06
  • 打赏
  • 举报
回复 1
你举的例子也非常不恰当, "我并非一心反驳,只是技术探讨 况且我们又不是头一次探讨 :) "

软件的设计理念很多都是参考的硬件工艺的设计理念,

因为硬件工艺的设计理念要领先软件的设计理念太多,我没办法准确使用量词来描述具体差异。

主板恰恰是一个耦合度低的设计

内存的卡槽 就是定义好的接口,只要符合接口 它就会正常工作,而不会去考虑内存的厂商

同时也不会去考虑内存的大小 128M-2G 皆可。

因为制作工艺的进步,内存的性能改变了,这个时候需要做的是重新定义接口

(这里很关键的是重新定义,而不是修改现有接口)

重新定义接口的工作自然是由主板完成的 ,重新定义接口是因为需要主板提供与之前不同的支持

而这个事情它不是耦合造成的,它是抽象的问题。
阿非 2011-01-06
  • 打赏
  • 举报
回复
1、不能是一个,至少也得是两个。

4、如果是一个,我们可以谈谈是否违反了“单一职责”,但是我们不要谈论“耦合”。当我们把这“一个”分成了“多个”之后,在来谈耦合。
--------------------------------------------------------------------
这两条互相矛盾,但这并不是重点。

耦合 可能发生在两个模块中也可能发生在一个模块中

模块在这里不是最小单位,粒度划分不是最细的,所以会有模块内的耦合。

举个模块内耦合的极端例子 “上帝类”

模块内的耦合就是两个或多个功能间的依赖

模块与模块之间也是一样

正是强依赖造成的耦合度高,解耦的终极目标是非直接耦合 也就是模块与模块间没有依赖

面向对象最基本的就是 依赖于抽象不依赖于细节(实现)


bluedoctor 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 dobzhansky 的回复:]
软件工程里头从来就没有快速开发这一说
任何产品级的软件也都不是快速开发出来的
就中国有这'必须快速开发'这变态玩意儿.
[/Quote]
说的很实在啊!
缪军 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 jxyxhz 的回复:]
[/Quote]
呵呵,小虎说的那个吉日啊,有一次我在他的博文下发了个不同见解,他居然把我的回复给删了
jiaweihan_001 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jyk 的回复:]
引用 5 楼 koukoujiayi 的回复:
拜读了!很不错!
就我所做的实际应用,高耦合还是低耦合不是要考虑的!
真正关心的是开发的速度!


赞同。

pc机里的cpu是可以自己更换的,但是笔记本里的cpu是不可以自己更换的。

那么对于用户来说,笔记本与cpu就是紧耦合,但是这个并不影响笔记本的销售。

如果笔记本增加了可以自己换cpu的功能,也未必会提高自己的销量……
[/Quote]
很好,继续关注,继续学习
wanghui0380 2011-01-06
  • 打赏
  • 举报
回复
哎,博客园的水让你和吉日搅浑了,现在又跑着来搅了

上贴已经说了,请限定好你的环境和上下文。

没环境没上下文,你谈啥耦合,聚合?你跟老p在那里扯,就是不停的偷换上下文。

额,
这么说把

往大了说,从全宇宙滴范围看,我和全宇宙都是耦合滴,没有宇宙就没有我,我打个喷嚏就可以影响全世界的温度,气候

往小了说,我和老婆是内聚滴,你家出啥事跟我家没关系,我和我老婆该怎么过就怎么过


这种不分环境,不分上下文的讨论又啥意义??
bzhyan 2011-01-06
  • 打赏
  • 举报
回复
up !!!!!!!!!!!!!!!!!!!!11
子夜__ 2011-01-06
  • 打赏
  • 举报
回复
其实最终的目的 在于 解耦
Dobzhansky 2011-01-06
  • 打赏
  • 举报
回复
软件工程里头从来就没有快速开发这一说
任何产品级的软件也都不是快速开发出来的
就中国有这'必须快速开发'这变态玩意儿.
ycproc 2011-01-06
  • 打赏
  • 举报
回复
拜读 。。。
小_虎 2011-01-06
  • 打赏
  • 举报
回复
楼主我记得你在博客园上说过,你不再写软文了!

多写点实际应用的技术问题吧。

就像吉日一样,把他的框架以技术来分享,然后推广。。

不过我也有点不是很认同他,每篇博文都不深入,讲到关键点又是他的淘宝网址。
journey_q 2011-01-06
  • 打赏
  • 举报
回复
khjian 2011-01-06
  • 打赏
  • 举报
回复
封装变化点
jeven_xiao 2011-01-06
  • 打赏
  • 举报
回复
支持支持 好文章~
Valefish 2011-01-06
  • 打赏
  • 举报
回复
耦合:层次间的关联度
低耦合就是模块之间的关联少,越独立耦合度越低
高内聚就是模块的内容针对干的事情少,功能越单一内聚越高

你先要搞清楚为什么要分层吧.
缪军 2011-01-06
  • 打赏
  • 举报
回复
以目标导向的(OO)思维更有利于"自然而然的"解决问题,这也就是sp1234所强调的,2楼也提到了这个意思;
而不是指着代码硬要辩论说他是什么内聚什么耦合又或者是什么模式,
我看楼主要阐述的思想其实本质上和sp1234的没什么冲突
加载更多回复(19)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧