首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确显示uml用例图的连通性

如何正确显示uml用例图的连通性
EN

Stack Overflow用户
提问于 2021-05-29 20:26:27
回答 1查看 203关注 0票数 1

我正试图建立一个系统来管理对抗贪欲的疫苗。

该系统支持3种不同的疫苗,但每个公民只能获得一种疫苗,该系统必须区分65岁以上的公民,AstraZeneca疫苗不能用于年龄超过65岁的人。

下面我尝试创建一个基本的UML类图。然而,我很肯定我遗漏了一些东西,因为疫苗也应该与AstraZeneca类相关联?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-29 22:24:10

图很混乱,因为它只显示关联,但以意外的方式重新组合它们。它看起来更像一个决策树,而不是一个真正的类图。

首先,您需要考虑以下改进:

  • Pfizer BioNTechModernaAstraZeneca分别是一个Vaccine:您应该从特定的疫苗推广到普通的Vaccine来展示这一点。

  • age 65+似乎不是一个好的类的候选对象:在大多数面向对象语言中,类的一个对象在它的整个生命周期中都会保持这个类。但是,65岁的公民不会换课。年龄是Citizen的一个(派生)属性。此外,“阿斯利康疫苗不能给65岁以上的人接种”的措辞也是一种限制。

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

这将使我们看到如下图表:

其他想法:

  • 您可以通过使关联Vaccination成为一个关联类来管理这些镜头。

关于开放/封闭原则,

  • 有一个问题:如果您要添加新疫苗,您可能需要在一些疫苗上添加不同的约束。Alternatives:

代码语言:javascript
复制
- Make `Vaccine` an abstract class (or an interface), with some more operations that need to be implemented by the concrete classes: `getRequiredMinAge()`,  `getRecommendedMinAge()`, `getRecommendedMaxAge()`, `getrequiredMaxAge()`, instead of hard-coding the constraint.
- Use a method `Vaccine::checkCompatibility(c: Citizen)` transfering the constraint verification to the `Vaccine` class

  • 可能想知道是否真的需要对疫苗进行子类分类。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67755476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档