“uses”和“depends upon”的区别是什么?(涉及IT技术)

8
在这篇依赖注入入门指南中,我注意到UML图区分了“使用”和“依赖”的概念。
由于两者都需要在“使用”或“依赖”类中引用某种形式的参考,我想知道:它们之间的真正区别是什么?
2个回答

4
请查看以下关于关系类型的摘录,摘自IBM Rational Software Architect文档
“depends upon”的意思如下:
依赖关系表示一个模型元素(供应商或独立模型元素)的更改可能会导致另一个模型元素(客户端或依赖模型元素)的更改。 供应商模型元素是独立的,因为对客户端的更改不会影响它。 客户端模型元素依赖于供应商,因为对供应商的更改会影响客户端。
“uses” 的意思如下:
使用关系是一种依赖关系,其中一个模型元素需要另一个模型元素(或一组模型元素)的存在才能完全实现或运行。 需要另一个模型元素存在的模型元素是客户端,而需要存在的模型元素是供应商。 虽然使用关系表示持续的需求,但它也表示两个模型元素之间的连接并不总是有意义或存在。
据我所读,“usage”是一个不太严格的“dependency”。

据我所知,“usage”是一种不那么严格的“依赖关系”,但实际上它们是非常不同的。 - BonyT
@BonyT,你能给出你的理解吗? - Andrey Adamovich
如果你使用另一个对象,它的内部变化对你没有任何意义。但是如果你“依赖于”另一个对象,那么它们就很重要了。这就是定义这两个术语的含义。 - BonyT
2
嗯,我不会说“usage”(用法)总是内部的。我声明我使用某些东西,但最后可能不会使用它,但如果所使用的对象已更改,我可能会受到影响。例如,我和我的手机。但如果我依赖于某物,那么我严格要求该物存在,并且当然,如果该物品发生变化,我将受到影响。例如,我和食物。 - Andrey Adamovich
1
@Andrey Adamovich 感谢 +1,但是那些定义只会让我的情况变得更糟。为什么不能解释一下区别,让我也能理解呢? :) - Regex Rookie
@Andrey Adamovich 再次阅读后,事情变得更加清晰,我同意您的评估,“uses”比“depends upon”要宽松一些。 - Regex Rookie

1
“Uses”是指一个类在执行某些操作时引用另一个类。 “Depends on”是指类A在其实现中使用另一个类B(例如作为方法的参数)。在这种情况下,更改类B可能需要更改类A。
请注意,我说了类,但它同样适用于接口。
维基百科上有一篇很好的文章:http://en.wikipedia.org/wiki/Dependency_%28UML%29 例如,您可以在类Driver和公开名为Drive()的接口IVehicle之间建立Uses关系。对Drive实现的更改不需要更改Driver,因此您可以说Driver使用IVehicle。
但是,类Driver依赖于类Hand,因为Driver有两个属性:Hand LeftHand和Hand RightHand。如果这些属性的实现发生了更改,则需要考虑是否需要相应地更新Driver。

手/驱动程序看起来更像是组合关系,而不是纯粹的依赖关系? - Andrey Adamovich
是的,我知道,这并不是一个很好的例子,一直在尝试想出一个类似的更好的例子。 - BonyT
我认为所有的组合都是依赖关系,但是是的-它们更好地被描述为组合。 - BonyT
1
@BonyT 注意“Depends on”的定义使用了“uses”这个词。难怪我无法理解两者之间的区别。暂时点赞。 - Regex Rookie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接