如何避免类图中的循环关联?Project/Objective/Meeting类关系建模咨询
正确的UML类图关系表示方法
1. Project 和 Objective 的一对多双向关联
你描述的“一个Project关联一个Objective,一个Objective关联多个Project”属于一对多双向关联,正确的UML表示:
- 用实线连接两个类
- 靠近
Objective的一端标注1(表示一个Objective对应多个Project) - 靠近
Project的一端标注*(表示一个Project只属于一个Objective) - 可在连线两端加上角色名,对应类中的属性:比如Project端标注
objective(对应Project类里的Objective类型属性),Objective端标注projects(对应Objective类里的Project集合属性)
2. Meeting 与 Project、Objective 的关联
Meeting可关联Project或Objective,有两种常用的表示方式:
方式一:直接关联两个类
如果Meeting可以独立关联Project或Objective(比如类里有两个可选属性),用两条独立的实线分别连接Meeting与Project、Meeting与Objective,根据实际关联数量标注 multiplicity:
- 若每个Meeting最多关联一个Project,标注
0..1(0或1个) - 同理,关联Objective的一端也标注
0..1
方式二:通过抽象类统一关联(更优雅的设计)
定义一个抽象父类(比如Target),让Project和Objective都继承这个抽象类。然后Meeting只和Target建立关联,这样Meeting的关联对象就可以是Project或Objective的实例,符合面向对象的多态原则:
- 用空心三角箭头表示继承关系(指向抽象类
Target) Meeting和Target之间用实线连接,标注关联数量(比如1表示每个Meeting关联一个目标)
文字版类图示例
直接关联版本
+----------------+ 1 +----------------+ | Project |<----------------| Objective | |----------------| |----------------| | - objective: | | - projects: | | Objective | * | List<Project>| +----------------+ +----------------+ ^ ^ | 0..1 | 0..1 | | +----------------+----------------+ | Meeting | |----------------| | - relatedProj: | | Project | | - relatedObj: | | Objective | +----------------+
抽象类版本
+----------------+ | <<abstract>> | | Target | +----------------+ ^ | +----------------+ 1 +----------------+ | Project |<----------------| Objective | |----------------| |----------------| | - objective: | | - projects: | | Objective | * | List<Project>| +----------------+ +----------------+ ^ | | 1 +----------------+ | Meeting | |----------------| | - target: | | Target | +----------------+
内容的提问来源于stack exchange,提问作者foulene
相关产品推荐
相关产品推荐

