如何正确显示uml案例图连通性

斯蒂芬咖喱山羊

我正在尝试创建一个系统来管理针对 Covid 的疫苗。

该系统支持 3 种不同的疫苗,但每个公民只能接种一种,而且系统必须区分 65 岁以上的公民,阿斯利康疫苗不能接种给 65 岁以上的人。

下面我尝试创建一个基本的 UML 类图。但是我很确定我遗漏了一些东西,因为疫苗也应该与阿斯利康类有关?

类图

克里斯托夫

该图令人困惑,因为它只显示关联,但以意想不到的方式重新组合它们。它看起来更像是决策树而不是真正的类图。

您需要考虑的第一个改进:

  • Pfizer BioNTechModerna并且AstraZeneca每个都是Vaccine:您应该通过从特定疫苗到一般疫苗的概括来证明这一点vaccine

  • age 65+似乎不是一个类的好候选人:一个类的对象在它的整个生命周期中都保持着这个类。但是公民在 65 岁时不会改变阶级。年龄是 的(派生)属性Citizen此外,“ 65 岁以上的人不能接种阿斯利康疫苗”这一措辞也是一种限制的表达。

  • 最后,如果您管理疫苗,您还需要管理注射。当你写“公民只能得到一个”时,你可能是指“一种”:你提到的疫苗原则上需要打两针。而在世界上大多数国家,两次注射必须是同一种疫苗,这是另一个限制。剩下的问题是 65+ 约束适用于第一个镜头还是第二个镜头?

这将导致我们得到一个如下所示的图表:

在此处输入图片说明

额外的想法:

  • 您可以通过使关联Vaccination成为关联类来管理镜头

  • 关于开放/封闭原则存在一个问题:如果您要添加新疫苗,则可能必须对某些疫苗添加不同的限制。备择方案:

    • 制作Vaccine一个抽象类(或接口),还有一些需要由具体类实现的操作:getRequiredMinAge(), getRecommendedMinAge(), getRecommendedMaxAge(), getrequiredMaxAge(), 而不是对约束进行硬编码。
    • 使用Vaccine::checkCompatibility(c: Citizen)将约束验证转移到Vaccine类的方法
  • 人们可能想知道是否真的需要对疫苗进行子分类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章