【问题标题】:How to display uml case diagram connectivity correctly如何正确显示uml案例图连接
【发布时间】:2021-08-17 16:22:15
【问题描述】:

我正在尝试创建一个管理新冠病毒疫苗的系统。

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

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

【问题讨论】:

    标签: uml class-diagram


    【解决方案1】:

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

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

    • Pfizer BioNTechModernaAstraZeneca 都是 Vaccine:您应该通过从特定疫苗到通用 vaccine 的概括来展示这一点。

    • age 65+ 似乎不是一个类的好候选者:在大多数 OO 语言中,一个类的对象在其整个生命周期中都会保留该类。但是公民在 65 岁时不会改变班级。年龄是Citizen 的(派生)属性。 “阿斯利康疫苗不能给 65 岁以上的人接种”这句话也是一种约束的表达。

    • 最后,如果您管理疫苗,您还需要管理疫苗。当您写“citizen can only get one”时,您的意思可能是“一种”:您提到的疫苗原则上需要打 2 针。而且在世界上大多数国家,两次注射必须是同一种疫苗,这是另一个限制。剩下的问题是 65+ 的限制是否适用于第一枪或第二枪?

    这将使我们得到如下图:

    其他想法:

    • 您可以通过将关联 Vaccination 设为关联类来管理镜头。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-12
      • 2023-01-18
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      相关资源
      最近更新 更多