Uml Class 图构造

Uml Class Diagram Construction

使用以下信息制作 class 图有点麻烦:

这是我做的UML图,可以吗?

因为你必须学习做UML,我会让你画出模式。但是这里有一些提示可以开始您的 class 图:

  • "服务公司为其客户提供服务" =>这只是一般框架。我们需要一个 Customer 和一个 Service class
  • "客户可以是两种类型:公司住宅" => 你需要 classes ResidentialCorporateCustomer 具有泛化关系。
  • "住宅客户只能购买住宅服务,公司客户可以购买公司和住宅服务" =>您需要ResidentialServiceCorporateService class 与 Service 具有泛化关系。此外,您还可以绘制所提到的关系。
  • "住宅服务可以预付费或后付费,公司服务总是后付费" => 有几种方法可以做到这一点。例如:您可以 class PaymendModeService 的关系。然后在 link 上添加注释,并在 { } 之间写入约束 - 另一种方法是预见 classes PrepaidProductPostpaidProduct 继承自 PaidProduct 并绘制强制或可选关系(使用基数)
  • "预付费服务可以由客户续订,后付费服务自动续订" =>,有几种方法可以做到这一点。一种方法是向服务添加方法 renewal() 并使用注释阐明特殊情况 - 或者,如果您选择具有关系的支付模式层次结构,则可以建立从 ResidentialServicePrepaidProduct 和从 BusinessServicePaidProduct,并在父级上添加接口方法。
  • "3G 和 ADSl 服务出售给住宅和企业客户,iFly 服务仅出售给住宅" => 这是一个陷阱: 3G、ADSL、iFly是对象,不是classes,所以在class图上没有关系。另一方面,这可能暗示您需要与 Service 相关的 class Product

编辑:对您的图表进行了一些更正

您的图表应该以相反的方式表示继承:

用于显示多值属性的数组表示法:

实际上与具有基数的关系相同。更喜欢关系:

其余的,我觉得逻辑没问题。除了不同服务中的 prepaid/postpaid:基数应为 0..1(可选)(或 1 为强制)。

最后的评论:关于 prepaid/postpaid:尚不清楚该服务是否仅指示接受了哪些付款方式(独立于客户),或者此属性是否是客户特定的。如果是后者,则应在客户和相关服务之间使用关联 class(请参阅 here