概念问题:到底什么是耦合?

架构设计经常出现“耦合”这个概念,有了耦合,就要解耦。

但是小弟现在越来越晕---
耦合就是两个层之间有依赖关系?看见有解耦的方法就是在相互依赖的两层之间加一层,可是新加的一层不是又和原来的两层有耦合关系了吗?
到底什么是耦合??

耦合是指两个或两个以上的电路元件或电网络的输入与输出之间存在紧密配合与相互影响,并通过相互作用从一侧向另一侧传输能量的现象;概括的说耦合就是指两个或两个以上的实体相互依赖于对方的一个量度。耦合作为名词在通信工程、软件工程、机械工程等工程中都有相关名词术语。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
耦合就是两个层之间有依赖关系?
==
同一个层也可能有依赖关系

看见有解耦的方法就是在相互依赖的两层之间加一层,可是新加的一层不是又和原来的两层有耦合关系了吗?
==
解耦的方式是让设计依赖于抽象,而不是依赖于实现,看看设计模式的原则

到底什么是耦合??
==
A明确地使用B资源

publci class A
{
B b;
}

public class B
{

}

现在A依赖于B

interface IX
{
...
}

public class A
{
IX i;
public A(IX i)
{
this.i = i;
}
}

public class B:IX
{

}

调用的时候,我可以决定用哪个实现接口的类,甚至可以是从配置文件反射生成

A a = new A(new B());
也可能因为某个条件
A a = new A(new C());

这样 A依赖的是抽象的接口IX,而不是具体的类B或者C追问

恕小弟愚昧,弱弱的问下,这里所说的“依赖抽象的接口不依赖现实”,是不是说不管类B,类C编译的版本怎么变,但始终可以调用接口来调用类B,类C,所以类A不用编译了?

追答

1. 如果B发生了修改,那我们可以使用C,因为我们依赖的是接口,而不是具体的类(对象)
打个比方,汽车制造者可以依赖于轮胎这个抽象的东西,但不能依赖于具体的品牌比如"风神轮胎"

2. 当需求改变的时候,我们需要修改的只有Main函数所在的类(甚至它都可能不用修改,只需要修改配置文件就可以)。
重新编译程序的代价很大,打个比方,windows有更新了,只是提供补丁,而不是给一版新的windows吧

软件设计程序的基本思想是,当需求改变的时候,我们的应用程序改变最小

本回答被提问者采纳
第2个回答  2015-04-12
  耦合概念:
  耦合是指两个或两个以上的电路元件或电网络的输入与输出之间存在紧密配合与相互影响,并通过相互作用从一侧向另一侧传输能量的现象。
  解耦概念:
  使耦合分离称为解耦。解耦的目的是使各个自由度上(即各振动模态)的振动相对独立或分离,这样可对隔振效果不佳的自由度独立采取措施而不影响其他自由度方向上的有关性能。当各自由度独立后,可能产生共振的频率比存在耦合时要小,特别在激振能量大的方向上要保证解耦。
  耦合分类:
  1、多场耦合
  现实工程中,物理场是许多的,温度场,引力场,湿度场等等均属于物理场,而我们要解决的许多问题是这些物理场的叠加问题,因为这些物理场直接是相互影响的。
  2、能量耦合
  如变压器的初级与次级之间的能量耦合。
  3、数据耦合
  一个模块访问另一个模块时,彼此之间是通过简单数据参数来交换输入、输出信息的。
  4、标记耦合
  一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。其实传递的是这个数据结构的地址;
  5、控制耦合
  如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
  6、外部耦合
  一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
  7、公共耦合
  若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
  8、内容耦合
  当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。如果发生下列情形,两个模块之间就发生了内容耦合。
相似回答