在 UML 类图中,关联关系和依赖关系有什么区别?
据我所知,关联比依赖关系更牢固,但我不确定它是如何更强的。
任何例子都非常受欢迎:)
关联几乎总是意味着一个对象具有另一个对象作为字段/属性/属性(术语不同)。
依赖关系通常(但不总是)意味着一个对象接受另一个对象作为方法参数、实例化或使用另一个对象。关联在很大程度上暗示了依赖关系。
在 OOP 方面:
关联 --> A has-a C对象(作为成员变量)
依赖 --> A引用B(作为方法参数或返回类型)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
还有一个更详细的答案。
通常,您使用关联来表示类中的字段之类的东西。该链接始终存在,因为您始终可以为其客户询问订单。它实际上不必是一个字段,如果您从更多接口的角度进行建模,它可以仅指示存在将返回订单客户的方法。
引用 UML Distilled 的第 3 版(现在刚刚发布)“如果对一个元素(供应商)的定义的更改可能导致对另一个元素(客户)的更改,则两个元素之间存在依赖关系”。这是一个非常模糊和一般的关系,这就是为什么 UML 对不同形式的依赖有许多刻板印象。在代码术语中,诸如命名参数类型和在临时变量中创建对象之类的事情意味着依赖关系。
...
依赖关系就像当您定义一个将 String(在 Java,C# 中,因为 string 是其中的对象)作为参数的方法时,您的类依赖于 String 类。
关联就像您在类中将字符串声明为属性一样。那么您的代码与字符串类相关联。
String name = null //: is a association.
依赖- 类中的更改会影响其依赖类的更改。示例 - Circle 依赖于 Shape(一个接口)。如果你改变 Shape ,它也会影响 Circle。因此,Circle 依赖于 Shape。
关联- 表示 2 个对象之间存在一定的关系
(一对一,一对多,多对多)
协会有两种类型-
聚合
1)组合- 两个对象之间更强的关联或关系。您正在另一个类 A中创建类 B的对象
public class A { B b; public void setB(){ this.b= new B(); } }
如果我们删除类 A , B 将不存在( B 对象仅在 A 内部创建)。
另一个例子-身体和肝脏。肝脏不能存在于身体之外。
2) 聚合- 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类)
另一个例子——人与车。人有车,但人与车是独立存在的。
在这里:“关联 vs. 依赖 vs. 聚合 vs. 组合”,你有一个很棒的 uml 类图和代码片段。作者给了我们一个关系列表:关联、依赖、聚合、组合在一个地方。
依赖是非常普遍的,降低复杂性就是尽可能地减少依赖。
关联是一种强(静态)依赖。聚合和组合更加强大。
我一直在检查这个答案,因为它并没有留在我的脑海中。阅读接受的答案后,我发现这个更有帮助
关联是指一个对象仅具有到另一个对象的链接并且不使用关系对象方法。以红宝石为例
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 类也需要更改。