【发布时间】:2013-06-13 15:21:12
【问题描述】:
当我读完The Unified Modeling Language Reference Manual Second Edition
属性一般用于纯数据值没有 身份,例如数字和字符串。
关联用于对象之间的连接与 身份。
我想知道是否有简单的例子解释有/无身份意味着什么?
【问题讨论】:
标签: attributes associations uml class-diagram
当我读完The Unified Modeling Language Reference Manual Second Edition
属性一般用于纯数据值没有 身份,例如数字和字符串。
关联用于对象之间的连接与 身份。
我想知道是否有简单的例子解释有/无身份意味着什么?
【问题讨论】:
标签: attributes associations uml class-diagram
首先,忽略“身份”,想想没有它的情况。
现在,看下面的例子:一个类 User,具有三个属性,其中一个是另一个类 Address。
class User {
String firstName;
String lastName;
Address address;
}
class Address {
String streetName;
int streetNumber;
String postalCode;
}
如果要绘制上述情况的UML图,也就是关联,就会有这样的东西:
|用户 |---->|地址|
如您所见,尽管 User 具有三个属性,但在图中,您只显示了一个,您的模型中有另一个类 Address。您可以在 User 框内显示其他两个属性,firstName 和 lastName。但是,就关联而言,就是用户和地址。
现在,回到“身份”部分。首先你应该注意,在协会的一般表述中不需要讨论身份。如上所示,您可以在不参考“身份”概念的情况下谈论关联。我怀疑,他们在某些特定的背景下谈论了身份。比如再考虑上面的例子,firstName和lastName不能有身份,只有Address可以有身份。
【讨论】:
识别一个对象的实例仅仅意味着与该实例存在关联。例如,如果阀门具有可以在软件中控制的电子螺线管,则可以将其建模为与螺线管关联的阀门。程序员想要打开一个阀门,然后找到该阀门的螺线管(这可能在初始化时发生一次)。这称为遍历关联。然后程序员有一个指向螺线管的指针(无论如何都是C++),并且可以调用螺线管的通电方法。
如果没有找到螺线管的任何方式,那么就没有遍历的关系。例如,可能有一个螺线管服务,其中螺线管 ID 在初始化时提供给阀门。然后阀门可能会调用一个函数,例如:
通电螺线管(螺线管ID);
阀门和螺线管之间没有关联。
【讨论】: