【发布时间】:2010-11-16 21:12:22
【问题描述】:
在UML类图中,关联关系和依赖关系有什么区别?
据我所知,关联是比依赖关系更强的关系,但我不确定它是如何更强的。
任何例子都会受到欢迎:)
【问题讨论】:
标签: uml
在UML类图中,关联关系和依赖关系有什么区别?
据我所知,关联是比依赖关系更强的关系,但我不确定它是如何更强的。
任何例子都会受到欢迎:)
【问题讨论】:
标签: uml
关联几乎总是意味着一个对象具有另一个对象作为字段/属性/属性(术语不同)。
依赖通常(但不总是)意味着一个对象接受另一个对象作为方法参数、实例化或使用另一个对象。 依赖关系非常隐含在关联中。
【讨论】:
在 OOP 术语中:
Association --> A has-a C 对象(作为成员变量)
依赖 --> A references B(作为方法参数或返回类型)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
还有一个more detailed answer。
【讨论】:
What is the difference between dependency and association?:
一般来说,您使用关联来表示类似字段的内容 在一个班级。链接始终存在,因为您可以随时询问 为其客户订购。它实际上不必是一个字段,如果你是 从更界面的角度建模,它可以仅仅表明 存在将返回订单客户的方法。
引用 UML Distilled 的第 3 版(现在刚刚出版)“a 如果更改定义,则两个元素之间存在依赖关系 一个元素(供应商)可能会导致另一个元素(供应商)发生变化 客户)”。这是一个非常模糊和笼统的关系,这就是为什么 UML 有许多用于不同形式的依赖的原型。 在代码术语中,诸如命名参数类型和创建 临时变量中的对象意味着依赖。
...
【讨论】:
依赖关系就像当你定义一个以String(在Java,C#中,因为string是其中的对象)作为参数的方法时,你的类依赖于String类。
关联就像你在你的类中声明一个字符串作为一个属性。 那么您的代码与字符串类相关联。
String name = null //: is a association.
【讨论】:
依赖关系 - 类的变化会影响其依赖类的变化。示例 - Circle 依赖于 Shape(一个接口)。如果你改变 Shape ,它也会影响 Circle。所以,Circle 依赖于 Shape。
关联-表示2个对象之间存在一定的关系
(一对一,一对多,多对多)
联想有两种类型-
聚合
1) 组合-更强的关联或两个对象之间的关系。您正在另一个 class A
中创建一个 class B 的对象public class A { B b; public void setB(){ this.b= new B(); } }
如果我们删除类 A ,B 将不存在(B 对象仅在 A 内部创建)。
另一个例子 - 身体和肝脏。肝脏不能存在于身体之外。
2) 聚合 - 两个对象之间较弱的关联类型。
public class A {
B b;
public void setB(B b_ref){
this.b= b_ref;
/* object B is passed as an argument of a method */
}
}
即使你删除A类,B也会存在外面(B在外面创建并传递给A类)
另一个例子 - Man & Car 。人有车,但人与车是独立存在的。
【讨论】:
这里:"Association vs. Dependency vs. Aggregation vs. Composition",你有一个很棒的 uml 类图和代码 sn-ps。 作者给了我们一个关系列表:关联、依赖、聚合、组合在一个地方。
【讨论】:
依赖是非常普遍的,降低复杂性就是尽可能地减少依赖。
关联是一种强(静态)依赖。聚合和组合更加强大。
【讨论】:
我一直在检查这个答案,因为它并没有留在我的脑海中。阅读the accepted answer 后,我发现这一篇更有帮助
【讨论】:
关联是指一个对象仅具有到另一个对象的链接并且不使用关系对象方法。以红宝石为例
class User
has_one :profile
end
user = User.first
profile = user.profile
profile.sign_out
这意味着你可以从用户那里得到一个配置文件对象,但用户不要在自己内部使用配置文件的方法(不依赖于配置文件的接口)。
依赖表示用户链接到另一个对象并在自己内部调用该对象的方法
class User
has_one :profile
def personal_info
profile.info
end
end
这里如果 Profile 的 info 方法将被更改或重命名,我们的 Dependent User 类也需要更改。
【讨论】: