java - 什么是oop中的松耦合和紧耦合(java)

标签 java oop

我对 java 中的松耦合和紧耦合有些困惑。我知道松耦合意味着彼此之间的信息最少,而紧耦合意味着依赖。我们知道松耦合可以通过接口(interface)实现和继承实现紧耦合。

例如:

1)A(接口(interface))<-------------------- B(类)

2) C (类) <-------------------- D (类)

假设这四个类是我整个应用程序的一部分,在 B 或 D 中进行更改不会对应用程序产生任何影响(从运行的角度来看)。从 A 或 C 中删除任何方法或变量需要对应用程序进行如此多的更改。好的分数是 2-2,但在 C 或 A 中添加新方法是不同的。如果我在 C 中添加新方法不会影响应用程序,但在添加 A 时,至少我必须在 B 和所有实现接口(interface) A 的类中重写此方法。所以至少在这种情况下它是如何松散耦合的。 我的疑问是,继承是否总是紧密耦合。我了解到继承是 OOP 的强大工具之一。用于设计类是否遵循“是一种关系”然后使用继承。 松散耦合意味着彼此之间的信息较少。 A和C都不知道将来要实现或扩展哪个类,但是添加B和D后现在B不依赖于A,因为它的所有方法都是抽象的,但是D也可以覆盖继承特性。

最佳答案

as we know loose coupling can achieve through interface implementation and inheritance make tight couple.

我想你弄错了。 “耦合”通常是关于 2 个不同的类,它们通过具体类或仅通过某些接口(interface)相互了解。

假设 2 个类 A 和 B 需要相互通信。

 A <--knows--> B

A 中的方法会有一些参数 B,而 B 中的方法有一个类型为 A 的参数。喜欢

 class A {
     public void talkTo(B b) {}
 }    

现在这就是 A 和 B 之间的紧密耦合,因为您对这些类所做的每一次更改都会使其他类发生必要的更改。

如果松散耦合,它们都会通过某个接口(interface)暴露自己。 (“接口(interface)”也可以表示抽象类 - 这是各自方面的选择。)

   IA  <-- A
     ^     |
      \   /
        X           < loose coupling between the A side and the B side
      /   \
     v     |
   IB  <-- B     < pretty tight coupling betwen IB and B

它们之间的通信通过这些接口(interface)进行

   class A implements IA {
        public void talkTo(IB b);
   }
   class B implements IB {
        public void talkTo(IA a);
   }

A 和 IA 之间的依赖关系(这就是您所看到的)并不是紧耦合与松耦合的主要关系。有一些相似之处,但松散耦合并不意味着您应该实现接口(interface)而不是扩展抽象类。不过,通常只实现一个接口(interface)会更好。

如果您可以将“IS A”关系替换为“HAS A”关系,那么您所做的基本上是一样的。您将自己(例如,您是 A)与具体实现解耦,只需要依赖封装的另一端(例如,来自 B 端)。继承确实是一个非常强大的特性,但它经常被误用。

关于java - 什么是oop中的松耦合和紧耦合(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20445939/

相关文章:

java - Android 资源未找到异常

java - 显示错误值的 Int 变量 - Android

java - 我无法从列表中检索数组值

Java UTF-8 差异

php - 单个抽象函数/抽象重载的多个方法签名

oop - 对象作为 lisp 中自身的参数

java - 用 Java 编写台球游戏 - 如何定义球并移动它们(通过 Graphics g)?

c++ - 多层继承在 C++ 中有意义吗?

java - 用 Switch 打击,降低圈复杂度 java

Java 签名右移