如何正确显示 uml 案例图连接
How to display uml case diagram connectivity correctly
我正在尝试创建一个系统来管理针对 covid 的疫苗。
系统支持3种不同的疫苗,但每个公民只能接种一种,系统必须区分65岁以上的公民,65岁以上的人不能接种阿斯利康疫苗。
下面我尝试创建一个基本的 UML class 图。但是我很确定我遗漏了一些东西,因为疫苗也应该连接到 AstraZeneca class?
该图令人困惑,因为它只显示关联,但以意想不到的方式重新组合它们。它看起来更像是一棵决策树,而不是真正的 class 图。
您首先需要考虑的改进:
Pfizer BioNTech
、Moderna
和 AstraZeneca
都是 Vaccine
:你应该用从特定疫苗到一般疫苗的概括来证明这一点vaccine
.
age 65+
似乎不是 class 的好候选者:在大多数 OO 语言中,class 的对象在其运行期间保留 class一生。但是公民不会在 65 岁时更改 class。年龄是 Citizen
的(派生的)属性。 “阿斯利康疫苗不能给65岁以上的人”这句话更是一种约束的表达。
最后,如果你管理疫苗,你也需要管理注射。当您写“citizen can only get one”时,您的意思可能是“一种”:您提到的疫苗原则上需要注射 2 针。而且在世界上大多数国家,两次注射必须是同一种疫苗,这是另一个限制。剩下的问题是 65+ 限制是否适用于第一枪或第二枪?
这将引导我们得出如下图:
其他想法:
您可以通过将关联 Vaccination
设为关联 class.
来管理镜头
关于 open/closed 原则存在一个问题:如果您要添加新疫苗,您可能必须对某些疫苗添加不同的限制。备选方案:
- 使
Vaccine
成为一个抽象的class(或接口),更多的操作需要由具体的classes来实现:getRequiredMinAge()
,getRecommendedMinAge()
、getRecommendedMaxAge()
、getrequiredMaxAge()
,而不是对约束进行硬编码。
- 使用方法
Vaccine::checkCompatibility(c: Citizen)
将约束验证转移到Vaccine
class
有人可能想知道是否真的需要 class 接种疫苗。
我正在尝试创建一个系统来管理针对 covid 的疫苗。
系统支持3种不同的疫苗,但每个公民只能接种一种,系统必须区分65岁以上的公民,65岁以上的人不能接种阿斯利康疫苗。
下面我尝试创建一个基本的 UML class 图。但是我很确定我遗漏了一些东西,因为疫苗也应该连接到 AstraZeneca class?
该图令人困惑,因为它只显示关联,但以意想不到的方式重新组合它们。它看起来更像是一棵决策树,而不是真正的 class 图。
您首先需要考虑的改进:
Pfizer BioNTech
、Moderna
和AstraZeneca
都是Vaccine
:你应该用从特定疫苗到一般疫苗的概括来证明这一点vaccine
.age 65+
似乎不是 class 的好候选者:在大多数 OO 语言中,class 的对象在其运行期间保留 class一生。但是公民不会在 65 岁时更改 class。年龄是Citizen
的(派生的)属性。 “阿斯利康疫苗不能给65岁以上的人”这句话更是一种约束的表达。最后,如果你管理疫苗,你也需要管理注射。当您写“citizen can only get one”时,您的意思可能是“一种”:您提到的疫苗原则上需要注射 2 针。而且在世界上大多数国家,两次注射必须是同一种疫苗,这是另一个限制。剩下的问题是 65+ 限制是否适用于第一枪或第二枪?
这将引导我们得出如下图:
其他想法:
您可以通过将关联
来管理镜头Vaccination
设为关联 class.关于 open/closed 原则存在一个问题:如果您要添加新疫苗,您可能必须对某些疫苗添加不同的限制。备选方案:
- 使
Vaccine
成为一个抽象的class(或接口),更多的操作需要由具体的classes来实现:getRequiredMinAge()
,getRecommendedMinAge()
、getRecommendedMaxAge()
、getrequiredMaxAge()
,而不是对约束进行硬编码。 - 使用方法
Vaccine::checkCompatibility(c: Citizen)
将约束验证转移到Vaccine
class
- 使
有人可能想知道是否真的需要 class 接种疫苗。