Language agnostic UML关系-虚线与实线
这两种关系之间的区别是什么Language agnostic UML关系-虚线与实线,language-agnostic,uml,relationship,class-diagram,Language Agnostic,Uml,Relationship,Class Diagram,这两种关系之间的区别是什么 编辑:如果您能提供一个简单的代码示例来说明差异,那将非常有用 这个网页说得够多了,我想: 下面的文本来自它,但我认为应该足以理解其中的差异 因此,基本上,实线是一种关联,虚线/虚线是一种依赖关系 关联也可以是单向的,其中一个类知道 另一个类和关系,但另一个类没有。 这种关联需要一个开放的箭头来指向 是已知的,并且只有已知的类可以有角色名和 多种多样在本例中,Customer类知道任何 已购买但Product类不知道的产品数 任何顾客。多重性“0..*”表示零或更多
编辑:如果您能提供一个简单的代码示例来说明差异,那将非常有用 这个网页说得够多了,我想: 下面的文本来自它,但我认为应该足以理解其中的差异 因此,基本上,实线是一种关联,虚线/虚线是一种依赖关系 关联也可以是单向的,其中一个类知道 另一个类和关系,但另一个类没有。 这种关联需要一个开放的箭头来指向 是已知的,并且只有已知的类可以有角色名和 多种多样在本例中,Customer类知道任何 已购买但Product类不知道的产品数 任何顾客。多重性“0..*”表示零或更多 依赖关系是两个类之间的弱关系,是 用虚线表示。在本例中,存在一个依赖项 在点和线段之间,因为线段的draw()操作 使用Point类。它表示线段必须知道 点,即使它没有该类型的属性。这个例子也 说明如何使用类图来关注 在上下文中很重要,因为您通常不想显示这样的内容 所有类操作的详细依赖项 由于我的声誉只有8,我无法放置图像本身,但它们仍然可以在我开始提到的网页上找到 [编辑] 我这里没有代码示例,但我个人如何解释它就像一辆车和一扇门一样简单 当一辆车有门(或更多)时,它只是一辆车
Car --- has a --> Door
但是,当您有一个可以打开的门时,door类将具有如下函数
public void openDoor(){
this.open();
}
要使用上述功能,汽车必须创建门的实例
Class Car(){
Door door1 = new Door();
door1.open();
}
这样就创建了一个依赖项
因此,实线只是将一个对象(1)指向另一个对象(2),但当您开始使用该对象(1)时,它将成为一个依赖项
我希望这样就可以了;) 好吧,既然你没有接受第一个答案;让我试试 箭头1:正常关联 UML有不同类型的线和箭头。上面是简单的关联箭头,这意味着一个类可以链接到另一个类。下面我将用代码示例解释每种类型
- 在第一个示例中,您可以看到没有真正指定谁知道谁(谁是关系的所有者)。动物能认识人,人能认识动物。它没有指定,因此对程序员没有真正的帮助
- 在第二个例子中,艺术家可以拥有一把吉他。因为有一支箭,而另一边没有,我们知道吉他不认识艺术家。吉他是一种完全可以独立存在的物体,不需要任何人
- 在第三个例子中,你看到了婚姻。真的很简单;丈夫认识妻子,妻子认识丈夫。在我们的情况下,丈夫只有一个妻子,反之亦然
class Husband{
Wife bestWomanInTheWorld;
public Husband(Wife theWife){
this.bestWomanInTheWorld = theWife;
}
}
因为丈夫总是需要妻子,所以我们将所需的关系放入构造函数中。因为艺术家可以拥有吉他,所以我们会将构造函数保留为空,如下所示:
class Artist{
List<Guitar> guitars;
public Artist(){
}
public AddGuitarToCollection(Guitar newGuitar){
Guitars.Add(newGuitar);
}
}
如果有需要出席的联系、关系、协会等,请a班工作;这是一种依赖。例:丈夫需要妻子存在。汽车需要一个轮子才能成为汽车(和驾驶)。汽车工厂需要一个汽车类来从中制造对象。RSSNewsItem类需要一个XMLReader类来执行任何操作
什么时候使用哪个?
这是我眼中唯一正确的问题;因为谷歌对你的问题给出了很多有效的答案。尽量不要在类图中使用依赖项,因为它通常意味着您不够具体。始终以关联、实现等为目标。仅当需要使用其他类而不维护关系时才使用实现(在我看来)。例子;实用程序类(如XMLReader)
如果您在阅读本完整解释后有任何问题,请随时提问。:-) 虚线表示工具(接口)
solid-means扩展(一个基类)我试图给出两种类型的线的简单示例 在第一张图中,实线显示了关联: 如果类是用Java声明的,这就像
ClassA
将对ClassB
的引用存储为一个属性(它可以传递给构造函数、创建等等)。因此,您可能会看到如下内容:
public class ClassA {
ClassB theClassB = ...
...
}
在第二个图中,它显示了一个依赖关系:
依赖关系比关联弱得多。引用UML的话:
对于类,依赖关系的存在有多种原因:一个类向另一个类发送消息;一个类将另一个类作为其数据的一部分;一
类将另一个作为操作的参数。[…]您使用依赖项
只要您想显示一个元素中的更改可能如何改变其他元素
同样,使用Java,有两个例子:一个ClassB
类型的参数被传递给一个方法,或者一个方法声明一个ClassB
类型的局部变量:
public class ClassA {
...
public void someMethod(ClassB arg1) {...}
...
public void someOtherMethod() {
ClassB localReferenceToClassB = ...
}
...
}
其他方式ClassA
可以依赖于ClassB
,而无需关联(不是详尽的列表):
有一个静态方法,ClassB
调用ClassA
ClassA
public class ClassA { ... public void someMethod(ClassB arg1) {...} ... public void someOtherMethod() { ClassB localReferenceToClassB = ... } ... }
//@assoc The Player(A) has some Dice(B) class Player { Dice myDice; }
//@dep The Player(C) uses some Dice(D) when playing a game class Player { rollYahtzee(Dice someDice); }