在UML类图中,关联关系和依赖关系之间有什么区别?
据我所知,关联是一种更强大的关系,而不是依赖关系,但我不确定它是如何更强大的。
任何例子都非常受欢迎:)
答案 0 :(得分:54)
关联几乎总是暗示一个对象将另一个对象作为字段/属性/属性(术语不同)。
依赖通常(但并非总是)暗示对象接受另一个对象作为方法参数,实例化或使用另一个对象。 关联非常隐含依赖。
答案 1 :(得分:44)
What is the difference between dependency and association?:
通常,您使用关联来表示类似字段的内容 在课堂上。链接总是在那里,因为你总是可以问一个 订购其客户。如果你是的话,它实际上不一定是一个领域 从更多的界面角度建模,它只能表明 存在将返回订单客户的方法。
引用第3版UML Distilled(现在刚出来)“a 如果更改了定义,则两个元素之间存在依赖关系 一个元素(供应商)可能会导致另一个元素的变化( 客户)“。这是一个非常模糊和一般的关系,这就是原因 UML对不同形式的依赖有很多刻板印象。 在代码术语中,例如命名参数类型和创建 临时变量中的对象意味着依赖。
...
答案 2 :(得分:36)
以OOP术语:
协会 - > 有一个 C 对象(作为成员变量)
依赖 - > A 引用 B (作为方法参数或返回类型)
int optindex = -1;
c = getopt_long(argc, argv, shortopts, longopts, &optindex);
if (optindex == -1) {
for (optindex = 0; longopts[optindex].name, ++optindex) {
if (longopts[optindex].val == c) break;
}
if (longopts[optindex].name == NULL) {
// the short option was not found; do something
}
}
答案 3 :(得分:22)
依赖关系就像定义一个方法,它接受一个String(在Java中,C#,因为string是其中的一个对象)作为参数,然后你的类依赖于String类。
关联就像在类中声明字符串作为属性一样。 然后你的代码与字符串类相关联。
String name = null //: is a association.
答案 4 :(得分:13)
依赖 - 类中的更改会影响其依赖类的更改。示例 - 圆取决于Shape(接口)。如果更改Shape,它也会影响Circle。因此,Circle依赖于Shape。
关联 - 表示2个对象之间存在某种关系
(一,一,多,多)
协会有两种类型 -
聚合
1)构成 - 更强的关联或2个对象之间的关系。您正在另一个 A类
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&车。男人有车而男人&汽车是独立存在的。
答案 5 :(得分:9)
这里:"Association vs. Dependency vs. Aggregation vs. Composition",你有一个很棒的vade mecum与uml类图和代码片段。 作者给出了一个关系列表:关联,依赖,聚合,组合在一个地方。
答案 6 :(得分:3)
依赖性非常普遍,降低复杂性就是尽可能减少依赖性。
关联是强(静态)依赖关系。聚合和组合甚至更强。
答案 7 :(得分:2)
我一直在检查这个答案,因为它没有留在我的脑海中。阅读the accepted answer后,我发现这篇文章更有帮助
答案 8 :(得分:-1)
关联是指一个对象仅具有到另一个对象的链接,而不使用关系对象方法的情况。例如红宝石
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方法,则还需要更改我们的从属用户类。