Uml类图构造

时间:2016-07-24 17:04:11

标签: oop uml

使用以下信息在类图中遇到一些麻烦:

  • 服务公司为其客户提供服务。
  • 客户可以分为两类:企业住宅
  • 住宅客户只能购买住宅服务,企业客户可以购买公司和住宅服务。
  • 住宿服务可以预付或后付,企业服务总是后付
  • 预付费服务可以由客户续订,后付费服务自动续订
  • 3G和ADSl服务销售给住宅和企业客户,iFly服务仅销售给住宅。

这是我制作的UML图,它会起作用吗?enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

由于你必须学习UML,我会让你画出模式。但是这里有一些提示来开始你的类图:

  • " 服务公司为其客户提供服务" => 这只是一般框架。我们需要CustomerService
  • " 客户可以分为两类:企业住宅" => 您需要与Residential具有泛化关系的类CorporateCustomer
  • " 住宅客户只能购买住宅服务,企业客户可以购买公司和住宅服务" => 您需要与ResidentialService具有泛化关系的CorporateServiceService类。此外,您可以绘制提到的关系。
  • " 住宅服务可以预付或后付,公司服务总是后付费" => 有几种方法可以做到这一点。例如:您可以使用课程PaymendMode和与Service的关系。然后在{ }之间添加约束的链接上添加注释 - 另一种方法是预测从PrepaidProduct继承的类PostpaidProductPaidProduct并绘制强制或可选关系(使用基数)
  • " 预付费服务可由客户续订,后付费服务自动续订"再次 => ,有几种方法可以做到这一点。一种方法是向服务添加方法renewal()并使用anotation澄清特殊情况 - 或者如果您选择了具有关系的支付模式层次结构,则可以建立从ResidentialServicePrepaidProduct的泛化关系BusinessService以及PaidProductProduct,并在父级上添加接口方法。
  • &#34; 3G和ADSl服务销售给住宅和企业客户,iFly服务仅销售给住宅&#34; =&gt; 这是一个陷阱:3G,ADSL和iFly是对象,而不是类,因此它们与类图无关。另一方面,这可能暗示您需要与Service相关的课程 function fctCheck(gender) { var elems = document.getElementsByName("subselector"); for (var i = 0; i < elems.length; i++) { elems.item(i).style.display = "none"; } document.getElementById(gender).style.display = "block"; } $('#men').on('change', function() { $("#mtsm").css('display', (this.value == 'tsm') ? 'block' : 'none'); }); $(document).ready(function() { $('.colore.active').each(function() { $('.container ').css('background-image', 'url(' + $(this).data("image") + ')'); }); $('.colore').on('click', function() { $('.container').css('src', ''); $('.container ').css('background-image', 'url(' + $(this).data("image") + ')'); }); });

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

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

enter image description here

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

enter image description here

实际上与基数的关系相同。喜欢这种关系:

enter image description here

对于其他人来说,逻辑对我来说似乎很好。除了不同服务中的预付/后付:基数应为0..1(可选)(或1为强制性)。

最后评论:关于预付/后付:它不清楚该服务是否只是指示接受哪些付款方式(独立于客户)或此属性是否是客户特定的。如果是后者,那么您应该在客户和相关服务之间使用关联类(参见here