在UML类图中,关联关系和依赖关系之间有什么区别?
据我所知,关联是比依赖更强的关系,但是我不确定它如何更强。
任何例子都将不胜感激:)
Answers:
通常,您使用关联来表示类中的字段之类的内容。该链接始终存在,因为您可以随时为其客户索取订单。它实际上不必是一个字段,如果您从更多界面的角度进行建模,它仅表明存在一种可以返回订单客户的方法。
引用第三版UML Distilled(现在刚刚发布)的话:“如果一个元素(供应商)的定义更改可能导致另一个元素(客户)的更改,则两个元素之间存在依赖关系”。这是一个非常模糊和笼统的关系,这就是为什么UML对于不同形式的依赖关系有许多构造型的原因。用代码术语来说,诸如命名参数类型和在临时变量中创建对象之类的东西都意味着依赖。
...
用OOP术语:
协会- > 甲具有-一个Ç对象(作为成员变量)
依赖关系-> A引用B(作为方法参数或返回类型)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
还有一个更详细的答案。
依赖性就像您定义一个将String(在Java,C#中,因为string是其中的对象)作为参数的方法时,您的类依赖于String类。
关联就像在类中将字符串声明为属性时一样。然后您的代码与字符串类相关联。
String name = null //: is a association.
依赖-类中的更改会影响其类中的更改。示例-圆取决于形状(界面)。如果更改Shape,它也会影响Circle。因此,Circle依赖于Shape。
关联-表示2个对象之间存在一定的关系
(一对一,一对多,很多对多)
协会有2种类型-
聚合
1)组合-2个对象之间的关联或关系更强。您正在另一个A类中创建B类的对象
public class A { B b; public void setB(){ this.b= new B(); } }
如果我们删除类A,则B将不存在(仅在A内部创建B对象)。
另一个示例-Body&Liver .Liver不能存在于Body外部。
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类)
另一个例子-Man&Car。人有汽车,但人与汽车独立存在。
在这里:“关联性,依赖性,聚合性和组合性”,您会发现带有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方法将被更改或重命名,则我们的从属用户类也需要更改。