问题描述
我目前正在学习创建 uml 图,尤其是类图,并且在理解过程中的某些概念时遇到了一些困难,这是问题
- 多重性总是双面的吗?就像当我有这个类时,PP 类是买家类,而 Cart 是保存买家订单信息的类,我分配 1 - 1 多重性,因为 1 个买家总是有 1 个购物车,反之亦然,在 Cart 中有明确定义(在我的代码中)我有一个类型为 PP 的变量,但是在 PP 类内部根本没有购物车变量,所以多重性错误吗?我应该在 PP 中分配 1 边多重性而在购物车中没有吗?或者在类中拥有变量并不重要?我对理解这一点很困惑
非常感谢
解决方法
qwerty_so 已经提供了简洁准确的答案。不过,我想补充一些想法来完成这张图。
1
在一个关联中,总是至少有 2 边,并且每一边都有多重性:第一个图说一个 PP 总是有 1 个购物车,而购物车总是有 1 个 PP。如果您的意思是“有时”而不是总是,请将其更改为 0..1
一个 n-ary association 中可以有 2 个以上的边:那么你将有 n 个多重性。
当图中的一侧没有表示多重性时,这并不意味着没有多重性,而是我们不知道多重性是什么(或者对于我们想要展示的内容并不重要)图中)。
现在您关于多重性以及如何实现它的问题引发了另一个话题:
(在我的代码中)清楚地定义了我有一个类型为 PP 的变量,但是在类 PP 中根本没有购物车变量,所以多重性错误吗?
这是 navigability 的问题:如果在 Cart
的实现中您有一个 PP
变量,这意味着您可以轻松地从给定的 Cart
导航到关联的 PP
。如果您在 Cart
实现中没有 PP
变量,则很难找到对应的 Cart
,因此无法导航。可导航性用空心箭头表示。
多样性和适航性是两个正交的概念。
2
如果您同时拥有依赖项和关联,您通常会显示关联。没有必要也显示依赖关系,因为它是由关联隐含的。但是,如果您想同时显示两者(但使用虚线和空心箭头)(例如,如果您想为每个都添加一些解释性注释),这并没有错。
现在,如果在 PP
实现中有一个 ShippingAddress
,这不仅是可导航性的问题,也是关联端所有权的问题。因此您可以使用 ShippingAddress
旁边的 dot notation。
如果您没有关联,而是使用另一个类作为操作的参数或返回类型,那么您可能需要显示 s simpe «use»
dependency。
-
多重被定义在需要的地方。如果没有给出,则它是未定义的,可以是从零到无穷大的任何值。这取决于你是否定义。原因之一是简单,如果你只想表明“它相关的”。对于完整的模型(如果需要),您必须在所有边上指定多重性。
-
依赖关系仅仅是一个弱的关系。如果仅在参数或传递用一些类使用依存关系。你的第二个画面是错误的,你应该吸取的依赖(开放箭头的虚线)向下,因为
PP
用途/取决于ShippingAddress
,而不是周围的其他方式。