UML类图中的关联与属性

时间:2013-06-13 15:21:12

标签: attributes associations uml class-diagram

在我阅读The Unified Modeling Language Reference Manual Second Edition

  

属性通常用于纯数据值 而不用    身份 ,例如数字和字符串。

     

关联用于对象 之间的连接   身份

我想知道是否有简单的例子说明有/无身份意味着什么?

2 个答案:

答案 0 :(得分:3)

首先,忽略“身份”并考虑没有它的情况。

现在,请看以下示例:一个类,User,有三个属性,其中一个是另一个类Address。

class User {
   String firstName;
   String lastName;
   Address address;
}

class Address {
      String streetName;
      int    streetNumber;
      String postalCode;

}

如果你想绘制上述情况的UML图,这是一个关联,你会有这样的事情:

|用户| ----> |地址|

如您所见,虽然用户有三个属性,但在图表中,您只显示一个属性,即您在模型中有另一个类的地址。您可以在User框中显示另外两个属性firstName和lastName。但是,就协会而言,就是它,用户和地址。

现在,回到“身份”部分。首先,你应该注意到协会的一般表述中不需要对身份的讨论。如上所示,您可以在不参考“身份”概念的情况下谈论关联。我怀疑,他们在一些特定的背景下谈论身份。例如,如果再次考虑上述示例,则firstName和lastName不能具有标识,只有Address可以具有标识。

答案 1 :(得分:0)

识别对象的实例仅意味着与实例存在关联。例如,如果阀门具有可以用软件控制的电子螺线管,则可以将其建模为与螺线管相关联的阀门。程序员想要打开一个阀门然后找到该阀门的电磁阀(这可能在初始化时发生一次)。这称为遍历关联。然后程序员有一个指针(无论如何都是C ++)到螺线管,可以调用螺线管的通电方法。

如果螺线管没有找到任何方法,那么就没有任何关系可以移动。例如,可能存在螺线管服务,其中在初始化时将螺线管ID提供给阀门。然后阀门可以调用如下函数:

energizeSolenoid(solenoidID);

阀门和电磁阀之间没有关联。