java - 关于库的UML类图的问题
问题描述
这是一个关于我的 UML 课程作业的简单问题,我不确定我做了什么。你能帮我纠正一下吗,我将非常感谢你的建议:
练习是为图书馆系统设计一个类结构。它应该满足这些要求:
- 有两种类型的用户 - 未成年人和成年人。
- 使用他们的全名和学生证来识别未成年用户。
- 成人用户通过使用他们的全名和身份证来识别。
- 图书馆包含书籍。
- 每本书都有基本信息(书名、作者等)。
- 用户最多可以同时借4本书。
- 每个用户都有以前借过的书的历史记录(以及所有日期)
这是我制作的 UML 图:
解决方案
乍一看,该图与叙述相对应,并带有一些注释:
- 该类
Borrow
可以称为Borrowed
或History
;出于不同目的在同一张图上放置两个borrow
是混淆的根源 - 这个类需要所有的日期:借用的开始和借用的回报。
- 该协会
borrow
显示,在给定的时刻最多可以借 4 本书。但最小值应为 0(没有图书馆用户必须始终拥有一本书)。相反,并非所有书籍都在某个时刻被借阅:所以它是 0..1
现在这张图提出了一些问题:
- 当前借阅的书是否已经出现在历史记录中,归还日期为空?
- 如果没有,我们如何跟踪借款开始日期。
我没有按照你的课程,所以我不知道老师的期望。但这是我建模的方式:
borrow
我使用了与关联类的多对多关联- 历史信息将在关联类中
- 借用最多四本书的限制将带有约束条件。
叙述中还包含另一个问题:未成年用户何时成年?您的实现关系意味着同一个人将存在两个不同的用户(新成人会丢失历史记录)。
出于这个原因,我建议使用组合而不是继承:创建user
一个完整的类,用一个组合Identification
,然后创建两个具体的类adultIdentification
,underageIdentificztion
. 因此,当未成年用户成年时,您可以保留用户历史记录并仅更改识别方式:-)
推荐阅读
- javascript - 加密 js 从 base64 解密
- angular - Angular中的http错误时如何获取标头?
- c - 为什么free不释放内存?
- html - 通过 Jenkins 发送 HTML 报告和 Cucumber 报告到电子邮件
- azure-devops - Azure DevOps - 在某个阶段发布失败时自动重新部署触发器
- python - codejam round E 2019 中 #1 的运行时错误(已跳过测试集)
- templates - 从另一个模型翻译选择字段 - 模板网站 Odoo 11
- iteration - 如何有效且不平凡地实现迭代 Karatsuba?
- json - 如何使用powershell中的if条件在json文件中写入一个值?
- android - 如果满足条件则插入记录 房间数据库