首页 新闻 赞助 找找看

解耦 与 耦合 大佬请进

0
悬赏园豆:50 [已解决问题] 解决于 2018-03-15 09:07

对这两个概念理解的不是很透彻,如何生动形象的描述,举个栗子...

筱浬的主页 筱浬 | 小虾三级 | 园豆:601
提问于:2018-03-14 15:30
< >
分享
最佳答案
0

举例:

兄弟两个如果赚的钱都存在一张银行卡里,那么他们如果需要花钱,都必须两人商量好然后从卡里取钱,这叫耦合
有一天兄弟两觉得这样太麻烦了,于是兄弟两个决定自己赚的钱存在自己单独的一张银行卡里,他们花钱都独立了,都不用跟对方商量了,这叫解耦

区别:

 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。

 解耦就是用数学方法将两种运动分离开来处理问题,常用解耦方法就是忽略或简化对所研究问题影响较小的一种运动,只分析主要的运动。
收获园豆:50
ycyzharry | 高人七级 |园豆:25639 | 2018-03-14 18:46
其他回答(5)
0

耦合可以理解为两个物体(比如程序)之间的联系,耦合越紧密,联系就越相应的密切。解耦是指解除两个物体之间的耦合关系。以程序中的代码为例,一个程序,其中的函数引用了另一个程序中的变量(或者说其中一个程序的变量传递给了另外一个程序的函数),这样两个程序之间就有了耦合关系,而把两个程序的函数的参数解除联系就是解耦!

CqLYf | 园豆:202 (菜鸟二级) | 2018-03-14 15:41

谢谢

支持(0) 反对(0) 筱浬 | 园豆:601 (小虾三级) | 2018-03-14 16:36
0

我来说说我的理解。比如做一个简单计算器。假设有:获取算式,计算算式,输出答案这三个步骤。一开始的时候我们把这个三个步骤用c++代码写在一个.cpp文件里,运行这个.cpp文件可以成功的运行。但是三个步骤的代码全都放在一个.cpp文件里,这就是三个功能的代码耦合在一起,输入计算输出都是在一起的。

解耦就是将三个步骤的代码分开,获取算式放到input.h头文件中,计算算式放在compute.h头文件中,输出答案放到output.h头文件中。这样在.cpp文件中引入三个input.h,compute.h,output.h头文件,也可以成功实现计算机功能。这样做的好处的是,将功能代码分开,更加容易管理。比如三个人负责三个步骤的代码管理,他们不用再操作同一个.cpp文件,这样很麻烦。而是每个人都有属于自己.h文件,自己去写自己的就好了。

总结一下,就是多个功能的代码尽可能分开,不要放在一起,他们是通过接口,消息,或者引入来互相交互和协作。

说的不对的地方,请多多指出。

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-14 15:50

谢谢

支持(0) 反对(0) 筱浬 | 园豆:601 (小虾三级) | 2018-03-14 16:36
0

电路学过没?  电路和软件是一样的.电路板在设计的时候也是要分成几块的.

然后电信号是会传染的.比如模块1和模块2如果直接连接在一起.那模块1的电压(比喻!)变化时会影响模块2的运行.

这就叫模块间的耦合(一个模块的变化会影响到另一个模块的运行)

所以电路中有一个组件叫:光耦,通过光信号来在不同模块间传递信息.而不是电信号.这样模块1的电路和模块2的电路就解耦了.

吴瑞祥 | 园豆:29449 (高人七级) | 2018-03-14 15:51

看不懂

支持(0) 反对(0) 筱浬 | 园豆:601 (小虾三级) | 2018-03-14 15:51

谢谢 

支持(0) 反对(0) 筱浬 | 园豆:601 (小虾三级) | 2018-03-14 16:37
0

崔生托红娘给莺莺捎信,这是强耦合。

崔生把信投到邮筒,邮递员(张三、李四或王五)取走信,最后信到了莺莺手里,这就是去耦合了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2018-03-14 15:51

崔生  红娘 莺莺  谁与谁耦合呢? 还是都存在耦合   还是说 通过红娘 存在耦合关系? 去耦合指针对的崔生和莺莺吗

支持(0) 反对(0) 筱浬 | 园豆:601 (小虾三级) | 2018-03-14 15:54
0

耦合就是两个层之间有依赖关系? == 同一个层也可能有依赖关系 看见有解耦的方法就是在相互依赖的两层之间加一层,可是新加的一层不是又和原来的两层有耦合关系了吗? == 解耦的方式是让设计依赖于抽象,而不是依赖于实现,看看设计模式的原则 到底什么是耦合?? == 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

技术专家 | 园豆:230 (菜鸟二级) | 2018-03-14 15:51

谢谢

支持(0) 反对(0) 筱浬 | 园豆:601 (小虾三级) | 2018-03-14 16:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册