【问题标题】:what is loose coupling and tight coupling in oop ( java )什么是 oop ( java ) 中的松耦合和紧耦合
【发布时间】:2013-12-25 02:31:37
【问题描述】:

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

例如:

1) A(接口)

2) C (类)

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

【问题讨论】:

标签: java oop


【解决方案1】:

众所周知,松耦合可以通过接口实现和继承实现紧耦合。

我认为你弄错了。 “耦合”通常是大约 2 个不同的类,它们通过它们的具体类或仅通过某个接口相互了解。

假设 2 个类 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 之间的依赖关系(这就是您所看到的)并不是紧耦合与松耦合的主要内容。有一些相似之处,但松耦合并不意味着您应该实现接口而不是扩展抽象类。不过,通常最好只实现一个接口。

如果您可以将“IS A”关系替换为“HAS A”关系,则基本相同。您将自己(例如,您是 A)与具体实现解耦,只需要依赖于封装的另一方(例如,从 B 方)。继承确实是一个非常强大的功能,但它经常被滥用。

【讨论】:

    【解决方案2】:

    松紧耦合简介

    松散耦合意味着减少直接使用不同类的类的依赖关系。在紧密耦合中,类和对象相互依赖。一般来说,紧密耦合通常是不好的,因为它降低了代码的灵活性和可重用性,并且使更改变得更加困难并阻碍了可测试性等。

    紧耦合

    紧耦合对象是一个需要对其他对象有相当多了解的对象,并且通常高度依赖于彼此的接口。在紧密耦合的应用程序中更改一个对象通常需要更改许多其他对象。在一个小型应用程序中,我们可以轻松识别更改,并且错过任何内容的机会更少。但是在大型应用程序中,并非每个程序员都知道这些相互依赖关系,或者有可能忽略更改。但是每组松散耦合的对象并不相互依赖。

    【讨论】:

      【解决方案3】:

      继承并不总是提供紧密耦合 - 因为您要继承的类提供了一种定义的方式来实现这一点,通过哪些方法将其声明为私有、受保护和公共。

      一个很好的例子是各种 API 提供的许多抽象类,它们为您实现了接口的一些样板功能,并允许您专注于自己的需求。

      基本示例包括 swing 中的“适配器”类,它们提供接口中所有方法的“无操作”实现。更高级的示例实际上提供了接口某些要求的标准实现。

      究竟什么是紧耦合实际上是一个判断要求,许多事物显然是紧耦合的,而其他事物显然是松耦合的——然后在两者之间有一个很大的灰色区域。

      【讨论】:

        【解决方案4】:

        存在三个关注点或层...实现关注点,对象创建关注点和使用关注点。当我们对接口而不是实现进行编程时,我们可以实现松散耦合..意味着实现层中的任何更改都将产生最小的影响在对象创建层上............

        【讨论】:

          【解决方案5】:

          一般答案和区别

          松耦合配置

          • 每个处理器都有自己的内存模块。
          • 不会遇到内存冲突。
          • 它有消息传输系统。
          • 低数据速率。
          • 更便宜。
          • 动态绑定。
          • 隐式升级。
          • 独立于平台。
          • 异步通信方式。

          紧耦合配置

          • 处理器具有共享内存。
          • 它经历了更多的内存冲突。
          • 具有互连网络。
          • 高数据速率。
          • 更贵。
          • 强类型系统。
          • 静态绑定。
          • 显式升级。
          • 平台依赖性。
          • 同步沟通方式。

          【讨论】:

            猜你喜欢
            • 2017-05-09
            • 1970-01-01
            • 2018-11-19
            • 2022-07-06
            • 2013-03-17
            • 1970-01-01
            • 2013-10-09
            • 2013-11-27
            • 1970-01-01
            相关资源
            最近更新 更多