我正试图建立一个系统来管理对抗贪欲的疫苗。
该系统支持3种不同的疫苗,但每个公民只能获得一种疫苗,该系统必须区分65岁以上的公民,AstraZeneca疫苗不能用于年龄超过65岁的人。
下面我尝试创建一个基本的UML类图。然而,我很肯定我遗漏了一些东西,因为疫苗也应该与AstraZeneca类相关联?

发布于 2021-05-29 22:24:10
图很混乱,因为它只显示关联,但以意外的方式重新组合它们。它看起来更像一个决策树,而不是一个真正的类图。
首先,您需要考虑以下改进:
Pfizer BioNTech,Moderna和AstraZeneca分别是一个Vaccine:您应该从特定的疫苗推广到普通的Vaccine来展示这一点。age 65+似乎不是一个好的类的候选对象:在大多数面向对象语言中,类的一个对象在它的整个生命周期中都会保持这个类。但是,65岁的公民不会换课。年龄是Citizen的一个(派生)属性。此外,“阿斯利康疫苗不能给65岁以上的人接种”的措辞也是一种限制。。
这将使我们看到如下图表:

其他想法:
Vaccination成为一个关联类来管理这些镜头。关于开放/封闭原则,
- 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` classhttps://stackoverflow.com/questions/67755476
复制相似问题