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

什么是oop(java)中的松耦合和紧耦合,java,oop,Java,Oop,我对java中的松耦合和紧耦合有一些混淆。据我所知,松耦合意味着相互之间的信息最少,而紧耦合意味着依赖性。正如我们所知,松耦合可以通过接口实现和继承实现紧密耦合 例如: 1) (接口)继承并不总是提供紧密耦合,因为您继承的类提供了一种定义的方式,通过它声明为私有、受保护和公共的方法来实现紧密耦合 这方面的一个很好的例子是各种API提供的许多抽象类,它们为您实现了接口的一些锅炉板功能,并允许您关注自己的需求 基本示例包括swing中的“适配器”类,这些类提供接口中所有方法的“无操作”实现。更高级的

我对java中的松耦合和紧耦合有一些混淆。据我所知,松耦合意味着相互之间的信息最少,而紧耦合意味着依赖性。正如我们所知,松耦合可以通过接口实现和继承实现紧密耦合

例如:


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

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

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

确切地说,紧密耦合实际上是一种判断,许多事情显然是紧密耦合的,其他事情显然是松散耦合的,然后在两者之间有一个很大的灰色区域

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

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

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

 A <--knows--> B
这是a和B之间的紧密耦合,因为对这些类所做的每一次更改都会对其他类进行必要的更改

如果您这样做是松散耦合的,那么它们都会通过一些接口暴露自己。(“接口”也可以指抽象类——这是各自的选择。)

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


如果你能用“有一个”关系替换“是一个”关系,你基本上也是这样做的。您将自己(例如,您是A)与具体实现分离,只需要依赖封装的另一端(例如,从B端)。继承确实是一个非常强大的功能,但它经常被误用。

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

简短介绍松耦合和紧耦合

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

紧密耦合

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

 A <--knows--> B
一般答案与区别

松耦合结构
  • 每个处理器都有自己的内存模块
  • 它不会遇到内存冲突
  • 它有信息传输系统
  • 低数据率
  • 便宜点
  • 动态绑定
  • 隐式升级
  • 平台无关
  • 异步通信风格
紧耦合结构
  • 处理器具有共享内存
  • 它会经历更多的内存冲突
  • 它有互联网络
  • 高数据率
  • 更贵
  • 强类型系统
  • 静态绑定
  • 显式升级
  • 平台依赖性
  • 同步通信方式
也可能重复:您的图表表示“B实现A”和“D扩展C”?应注意,“松散”和“紧密”是相对术语。这不是一个或另一个,而是两个极端之间的大量灰色区域。
   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);
   }