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

  • 本文关键字:耦合 oop java java oop
  • 更新时间 :
  • 英文 :


我对java中的松耦合和紧耦合有一些困惑。因为我知道松耦合意味着彼此的信息最少,而紧耦合意味着依赖性。正如我们所知,松耦合可以通过接口实现和继承来实现紧耦合。

例如:

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

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

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

正如我们所知,松耦合可以通过接口实现和继承来实现紧耦合。

我认为你错了。"耦合"通常是关于两个不同的类,它们通过具体的类或通过某个接口相互了解。

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

如果你可以用"HASA"关系代替"IS A"关系,那么你基本上也是这样做的。您将自己(例如您是A)与具体实现解耦,并且只需要依赖封装的另一端(例如来自B端)。继承确实是一个非常强大的功能,但它经常被滥用。

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

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

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

究竟什么是紧密耦合,在很大程度上是一种判断,许多事情显然是紧密耦合的,其他事情显然是松散耦合的,然后是介于两者之间的一大片灰色地带。

简介松散和紧密耦合

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

紧密耦合

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

有三个问题或层次。。。实现关注点,对象创建关注点和使用关注点当我们编程到接口而不是实现时,我们可以实现松耦合。。表示实现层中的任何更改对对象创建层的影响最小。。。。。。。。。。。。

一般答案&差异

松散耦合配置

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

紧密耦合配置

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

最新更新