为什么 class 一次是虚线,一次是普通线?

Why does the class have a dashed line once and a normal line once?

我有一个任务需要我根据描述画一个UML图。我已经收到解决方案(见照片)。但是,我无法找出解决方案并且有几个问题为什么解决方案是这样的。我在下面描述了这些。

描述:

预付费单元的合同 phone 应该被建模和实施。基本合同有合同号(int 类型)和余额(double 类型),但没有月费。合约编号不会自动生成,而是由构造函数设置为参数以及初始余额。天平有一个 getter 和一个 setter。 可以将以下选项添加到合同中(如果需要也可以多次):

方法 getCharges() 应提供合同的每月费用,并选择其所有选项。 getBalance()setBalance(…) 方法应该通过并访问基础合约。

运动:

解决方案:

问题:

初步评论

这张图存在严重的不一致:

  • 要么 Contract 是一个 抽象 class(斜体名称),其他 class 可以是 BasicContract专门化它(继承,从 BasicContractContract 的纯线,以及 Contract 端的空心三角形。
  • 或者 Contract 是一个 接口 (关键字 «Interface» 在 classifier 的名称之前,或者作为 lollipop),并且classBasicContract等es可以实现(实现,虚线但Contract端空心三角)

还有一个严重的歧义:因为至少一个空心三角形被一个微小的普通箭头所取代,所以不清楚其他箭头是否是箭头(即可导航关联)或者它们是否意味着是空心三角形(即继承)。

假设界面场景,假设OptionContract之间的箭头是可导航的关联;

选项的双线

选项实现了 decorator design pattern。这意味着它实现了 Contract 接口(虚线 + 空心箭头),但它向关联的 Contract (普通线,带或不带小普通箭头)增加了责任。

两点说明:

  • 很多时候,您会发现装饰器是用聚合而不是关联建模的。这没有错,但确实没有必要。

  • 不幸的是,这个装饰器似乎没有添加任何责任。到原来的合同。这很奇怪,只有当 DataSMSOption 的特化时才有意义,但是话又说回来,我们遇到了箭头不一致的问题(应该是空心三角形不是小的普通箭头),使这个“解决方案”非常模棱两可,而且达不到人们期望的“解决方案”的水平。

其他问题

缺失的Minutes是一个有趣的问题。实际上,可以添加 class Minute,并将其用作属性或操作的类型。令人惊讶的是,EurosMegaBytes 也没有建模。所有这些类型有什么共同点?

PhoneDouble Transfer 缺失的链接确实很奇怪。也许作者 运行 墨水用完了,或者使用了最多允许 6 个连接器的 UML 编辑器的有限演示版?可能就像 SMSData,但交叉检查叙述以确保。