UML类图中的关联与属性的区别

3

当我阅读《统一建模语言参考手册第二版》时,我发现:

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

关联用于连接具有身份的对象之间的关系。

我想知道是否有简单的例子来解释什么是具有/没有身份?

2个回答

3
起初,不考虑“身份”,想象一下没有它的情况。现在看一个例子:一个类叫做User,有三个属性,其中一个是另一个类Address。请注意HTML标签。
class User {
   String firstName;
   String lastName;
   Address address;
}

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

}

如果您想画出上述情况的UML图,它是一种关联,您会得到这样的结果: |User |---->| Address|
如您所见,尽管User有三个属性,在图表中只显示一个属性,即您在模型中具有另一个类Address的属性。您可以将其他两个属性firstName和lastName显示在User框内。但就关联而言,这就是全部,User和Address。
现在,回到“身份”部分。首先,您应该注意到,在关联的一般公式中不需要讨论身份的问题。就像上面展示的那样,您可以在没有涉及“身份”概念的情况下谈论关联。我怀疑他们在某些特定的语境中谈论了身份问题。例如,如果您再次考虑上面的示例,则firstName和lastName不能具有身份,只有Address才能具有身份。

0

识别对象实例只意味着该实例与其他实例有关联。例如,如果一个阀门具有可以在软件中控制的电磁铁,则可以将其建模为阀门与电磁铁之间存在关联。程序员想要打开一个阀门,然后找到该阀门的电磁铁(这可能发生在初始化时)。这称为遍历关联。然后程序员就拥有了指向电磁铁的指针(至少在C++中是这样),并且可以调用电磁铁的激活方法。

如果电磁铁没有任何被找到的方式,则不存在关系可供遍历。例如,可能存在一个电磁铁服务,在初始化时提供电磁铁ID给阀门。然后阀门可能会调用一个函数,如:

energizeSolenoid(solenoidID);

阀门和电磁铁之间将没有任何关联。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接