在java.as中,我对松耦合和紧耦合有一些混淆,我知道松耦合意味着相互最少的信息,而紧耦合意味着dependency.as可以通过接口实现和继承来实现紧密耦合。
例如:
1) A(接口)<
2) C(类)<
假设这四个类是我整个应用程序的一部分,更改B或D不会对应用程序产生任何影响(从运行的角度来看)。从A或C中删除任何方法或变量都需要在应用程序中进行如此多的更改。好的分数是2-2,但是在C或A中增加新的方法是不同的.如果我在C中添加的新方法对应用程序没有影响,但是在添加A时,至少我必须在B和实现接口A的所有类中重写这个方法。那么,至少在这个场景中,它是如何松散耦合的。我的疑问是,继承总是紧密耦合,如果一个类遵循“是关系”,然后使用继承,那么继承是OOP.for设计的有力工具之一。松散耦合意味着彼此之间的信息更少。A和C都不知道将来要实现或扩展哪个类,但是在添加B和D之后,B不再依赖于A,因为它所有的方法都是抽象的,但是D也可以覆盖继承特性。
发布于 2013-12-07 20:01:39
继承并不总是紧密耦合--因为您要继承的类提供了一种定义的方法,通过它声明为私有、受保护和公共的方法。
这方面的一个很好的例子是各种API提供的许多抽象类,它们为您实现了接口的一些锅炉板功能,并允许您专注于自己的需求。
基本示例包括swing中的“适配器”类,这些类提供接口中所有方法的"no-op“实现。更高级的示例实际上提供了接口某些需求的标准实现。
确切地说,什么是紧密耦合实际上是一个判断调用,许多东西显然是紧密耦合的,其他东西明显是松散耦合的--然后在两者之间形成一个大的灰色区域。
发布于 2013-12-07 20:18:20
众所周知,松耦合可以通过接口实现和继承来实现紧密耦合。
我觉得你搞错了。“耦合”通常是两个不同的类,它们通过具体的类或者仅仅通过一些接口来相互了解。
假设两个A类和B类需要相互结合。
A <--knows--> B
方法在A中有一些参数B,而在B中的方法有一个A类型的参数,例如
class A {
public void talkTo(B b) {}
}
这是A和B之间的紧密耦合,因为您对这些类所做的每一项更改都可以使另一个类中的更改成为必要。
如果您这样做,松散耦合,他们都暴露自己通过一些接口。(“接口”也意味着抽象类--这是一种选择。)
IA <-- A
^ |
\ /
X < loose coupling between the A side and the B side
/ \
v |
IB <-- B < pretty tight coupling betwen IB and B
他们之间的交流通过这些接口
class A implements IA {
public void talkTo(IB b);
}
class B implements IB {
public void talkTo(IA a);
}
A和IA之间的依赖(这就是您所看到的)并不是紧耦合和松耦合的主要问题。虽然有一些相似之处,但松散耦合并不意味着您应该实现一个接口而不是扩展一个抽象类。不过,通常情况下最好只实现一个接口。
如果你可以用“有A”的关系代替“是A”关系,你做的本质上是一样的。您将自己(例如,您是A)与具体的实现解耦,并且只需要依赖封装的另一方(例如从B端)。继承确实是一个非常强大的特性,但它经常被滥用。
发布于 2014-09-25 14:15:17
短引脚松紧耦合
松散耦合意味着减少直接使用不同类的类的依赖关系。在紧密耦合中,类和对象是相互依赖的。一般来说,紧密耦合通常是不好的,因为它降低了代码的灵活性和可重用性,并且使更改变得更加困难,并且阻碍了可测试性等。
紧耦合
紧密耦合的对象是一个需要了解其他对象的对象,并且通常高度依赖于彼此的接口。在紧密耦合的应用程序中更改一个对象通常需要对许多其他对象进行更改。在一个小的应用程序中,我们可以很容易地识别更改,而且错过任何东西的可能性也很小。但在大型应用程序中,并不是每个程序员都知道这些相互依赖关系,或者存在忽略更改的可能性。但是每一组松散耦合的对象并不相互依赖。
https://stackoverflow.com/questions/20445939
复制相似问题