Class 图多重性和依赖性实现
Class Diagram Multiplicity and Dependency implementation
我目前正在学习创建 uml 图,尤其是 class 图,并且在理解过程中的某些概念时遇到一些困难,这里是问题
- 多重性总是双面的吗?就像我有这个 classes,PP class 是买家 Class,Cart 是 class 来保存买家订单信息,我分配 1 - 1 多重性因为1 个买家总是有 1 个购物车,反之亦然,在购物车中明确定义(在我的代码中)我有一个类型为 PP 的变量,但在 class PP 中根本没有购物车变量,多重性也是如此错误的?我应该只在 PP 中分配 1 面多重性并在购物车中有 none 吗?还是在 class 中包含变量并不重要?我对这个理解很困惑
- 关于依赖关系,如果我有这个 PP class,它在 class 中有变量 shippingAddress 并且在某些函数中使用数据类型 ShippingAddress 作为参数,我应该使用依赖关系还是关联
非常感谢
多重性在需要的地方定义。如果没有给出,那么它是未定义的,可以是从零到无穷大的任何值。这取决于你是否定义它。原因之一是简单,如果您只想显示“它是关联的”。对于完整的模型(如果需要),您必须在所有边缘指定多重性。
依赖只是一种弱关系。如果您仅在参数中使用一些 class 或作为传递,则您使用依赖关系。你的第二张图片是错误的,因为你应该从 PP
uses/depends 开始向下绘制依赖关系(带空心箭头的虚线) ShippingAddress
而不是相反。
qwerty_so已经给出了简洁准确的答案。不过,我想补充一些想法来完成这幅画。
1
在一个关联中总是至少有 2 边,并且每边都有一个 多重性:第一个图说 PP 总是有 1 个购物车,而购物车总是1页。如果您的意思是“有时”而不是总是,请将其更改为 0..1
一个n-ary association可以有2个以上的面:那么你就有n个重数。
WHen在图中没有在一侧指示多重性,这并不意味着没有多重性,而是我们不知道多重性是什么(或者它对我们想要的不重要)显示在图表中)。
现在你关于多重性和如何实现它的问题引发了另一个话题:
it is clearly defined (in my code) that i have a variable with type PP, but inside class PP there is no cart variable at all, so does the multiplicity wrong?
这是 的问题:如果在 Cart
的实现中你有一个 PP
变量,这意味着你可以轻松地从给定的 Cart
到关联的 PP
。如果在PP
实现中没有Cart
变量,很难找到对应的Cart
,所以无法导航。导航性以空心箭头显示。
多重性和适航性是两个正交的概念。
2
如果您既有依赖关系又有关联关系,通常会显示关联关系。没有必要也显示依赖关系,因为关联暗示了它。然而,如果你想同时显示两者(但用虚线和空心箭头)也没有错(例如,如果你想为每个添加一些解释性注释)。
现在,如果在 PP
实现中有一个 ShippingAddress
,这不仅是导航性问题,而且还是关联端所有权的问题。所以你可以在 ShippingAddress
.
旁边使用 dot notation
如果您没有关联,但使用另一个 class 作为参数或 return 类型的操作,那么您可能想要显示 s simpe «use»
dependency。
我目前正在学习创建 uml 图,尤其是 class 图,并且在理解过程中的某些概念时遇到一些困难,这里是问题
- 多重性总是双面的吗?就像我有这个 classes,PP class 是买家 Class,Cart 是 class 来保存买家订单信息,我分配 1 - 1 多重性因为1 个买家总是有 1 个购物车,反之亦然,在购物车中明确定义(在我的代码中)我有一个类型为 PP 的变量,但在 class PP 中根本没有购物车变量,多重性也是如此错误的?我应该只在 PP 中分配 1 面多重性并在购物车中有 none 吗?还是在 class 中包含变量并不重要?我对这个理解很困惑
- 关于依赖关系,如果我有这个 PP class,它在 class 中有变量 shippingAddress 并且在某些函数中使用数据类型 ShippingAddress 作为参数,我应该使用依赖关系还是关联
非常感谢
多重性在需要的地方定义。如果没有给出,那么它是未定义的,可以是从零到无穷大的任何值。这取决于你是否定义它。原因之一是简单,如果您只想显示“它是关联的”。对于完整的模型(如果需要),您必须在所有边缘指定多重性。
依赖只是一种弱关系。如果您仅在参数中使用一些 class 或作为传递,则您使用依赖关系。你的第二张图片是错误的,因为你应该从
PP
uses/depends 开始向下绘制依赖关系(带空心箭头的虚线)ShippingAddress
而不是相反。
qwerty_so已经给出了简洁准确的答案。不过,我想补充一些想法来完成这幅画。
1
在一个关联中总是至少有 2 边,并且每边都有一个 多重性:第一个图说 PP 总是有 1 个购物车,而购物车总是1页。如果您的意思是“有时”而不是总是,请将其更改为 0..1
一个n-ary association可以有2个以上的面:那么你就有n个重数。
WHen在图中没有在一侧指示多重性,这并不意味着没有多重性,而是我们不知道多重性是什么(或者它对我们想要的不重要)显示在图表中)。
现在你关于多重性和如何实现它的问题引发了另一个话题:
it is clearly defined (in my code) that i have a variable with type PP, but inside class PP there is no cart variable at all, so does the multiplicity wrong?
这是 Cart
的实现中你有一个 PP
变量,这意味着你可以轻松地从给定的 Cart
到关联的 PP
。如果在PP
实现中没有Cart
变量,很难找到对应的Cart
,所以无法导航。导航性以空心箭头显示。
多重性和适航性是两个正交的概念。
2
如果您既有依赖关系又有关联关系,通常会显示关联关系。没有必要也显示依赖关系,因为关联暗示了它。然而,如果你想同时显示两者(但用虚线和空心箭头)也没有错(例如,如果你想为每个添加一些解释性注释)。
现在,如果在 PP
实现中有一个 ShippingAddress
,这不仅是导航性问题,而且还是关联端所有权的问题。所以你可以在 ShippingAddress
.
如果您没有关联,但使用另一个 class 作为参数或 return 类型的操作,那么您可能想要显示 s simpe «use»
dependency。