Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 说一个对象有依赖关系是什么意思?_Oop_Object_Dependencies - Fatal编程技术网

Oop 说一个对象有依赖关系是什么意思?

Oop 说一个对象有依赖关系是什么意思?,oop,object,dependencies,Oop,Object,Dependencies,我一直在读到对象x有依赖关系。有些人说这很糟糕,有些人在某些情况下还行,但我一开始不明白这意味着什么。我看到了: 但我一开始并不理解依赖性的概念。这个标签实际上给出了一个很好的定义,但希望能有一个例子。“依赖性”可以表示许多不同的东西,这取决于上下文(双关语) 在这种情况下,它实际上意味着“我需要什么特定的‘对象’(可能来自许多对象)来完成工作?” 例如,组件需要“打印”的内容。依赖项为“打印”,但请求的对象可以打印到HP Laserjet 9200、Oki点阵或.pdf文件 换言之,您可以在

我一直在读到对象x有依赖关系。有些人说这很糟糕,有些人在某些情况下还行,但我一开始不明白这意味着什么。我看到了:

但我一开始并不理解依赖性的概念。这个标签实际上给出了一个很好的定义,但希望能有一个例子。

“依赖性”可以表示许多不同的东西,这取决于上下文(双关语)

在这种情况下,它实际上意味着“我需要什么特定的‘对象’(可能来自许多对象)来完成工作?”

例如,组件需要“打印”的内容。依赖项为“打印”,但请求的对象可以打印到HP Laserjet 9200、Oki点阵或.pdf文件

换言之,您可以在这里用“plug-in”代替“dependency”,并保持相同的含义


“希望这能有所帮助.

当谈到依赖项注入时,我通常会说类而不是对象具有依赖项

A
依赖于类
B
,如果它要求类
B
存在并且可能以某种方式工作。例如,如果类
A
调用了
newb()
,则它依赖于类
B
。如果类
B
消失或更改,您的类
A
可能会中断

在某些语言中,您可以通过允许类依赖于
接口来打破依赖关系。如果您依赖于接口
I
,而
B
实现了
I
,那么B可以消失,被同样实现
I
C
取代,而
A
根本不需要更改。例如,您可以在操作系统中使用一个驱动程序,如果更换磁盘,您可能会得到一个实现“磁盘驱动器”接口的新驱动程序,但是您的操作系统仍然以相同的方式与磁盘通信,而不知道它是什么类型的磁盘


依赖项注入是让您依赖于接口而不是类,基本上不是说
new B()
,您只需要声明您想要一个实现
I
的对象,并为您注入一个合适的实现。你的类
A
不必知道类
B
C
甚至存在。

如果你说“类A”对接口I(由类B和C实现)有“依赖性”,那么我同意。我将更进一步地说,该类通过需要一个接口来“发布”依赖项。但是这个概念适用于那些甚至没有Java意义上的“接口”的语言。也许“协议”和“插件”可能更好,“接口”和“实现”的术语更通用。@palsm4没错,需要接口是更好的措辞,特别是当涉及依赖注入时。我在这里对“接口”的理解有点松散,因为它是一个通常可以理解的概念,即使它在所有语言中的实现方式并不相同。