PlantUML对象关系图绘制指南:关联、聚合与组合
PlantUML对象关系表达实战指南
在面向对象系统设计中,清晰地表达对象之间的关系至关重要。本文将深入讲解如何使用PlantUML绘制各种对象关系,包括关联、聚合、组合和依赖等,帮助您在系统设计时准确传达对象间的交互模式。
一、基本关联关系
1. 单向关联
单向关联表示一个对象知道另一个对象,但反之不成立。在PlantUML中使用-->
箭头表示:
object Customer
object Order
Customer --> Order : "places"
实践建议:当对象A需要访问对象B,但对象B不需要知道对象A时使用单向关联。例如订单需要知道客户信息,但客户不需要知道订单详情。
2. 双向关联
双向关联表示两个对象相互知道对方,使用<-->
表示:
object Student
object Course
Student "1..*" <--> "0..*" Course : "enrolls in"
实践建议:双向关联会增加耦合度,仅在两个对象确实需要相互访问时使用。例如学生和课程之间的选课关系。
二、聚合与组合关系
1. 聚合关系(Aggregation)
聚合表示"has-a"关系,整体和部分可以独立存在,使用o--
表示:
object Department {
members
}
object Employee
Department o-- Employee : "contains"
实践建议:当部分对象可以属于多个整体对象或独立存在时使用聚合。例如员工可以属于不同部门或暂时不属于任何部门。
2. 组合关系(Composition)
组合是更强的"contains-a"关系,部分不能脱离整体存在,使用*--
表示:
object House {
rooms
}
object Room
House *-- Room : "consists of"
实践建议:当部分对象生命周期与整体一致时使用组合。例如房间不能脱离房子独立存在。
三、依赖关系
依赖表示一个对象在方法内部临时使用另一个对象,使用..>
表示:
object ReportGenerator
object Database
ReportGenerator ..> Database : "uses for query"
实践建议:依赖是最弱的关系,适用于临时性、方法内部的关联。例如报表生成器临时使用数据库连接执行查询。
四、关系标签与多重性
1. 关系标签
可以为关系添加说明性标签:
object Professor
object Student
Professor "1" --> "1..5" Student : "advises"
2. 多重性表示
常用多重性表示法:
1
- 恰好一个0..1
- 零或一个1..*
- 一个或多个*
- 多个n..m
- n到m个
object Library
object Book
Library "1" --> "0..*" Book : "contains"
实践建议:明确多重性有助于理解业务规则。例如图书馆可以没有书或有多本书,但每本书必须属于一个图书馆。
五、综合示例
object University {
name : String
}
object Department {
code : String
}
object Professor {
id : Integer
}
object Student {
studentId : String
}
object Course {
credits : Integer
}
University "1" *-- "1..*" Department
Department "1" o-- "0..*" Professor
Department "1" o-- "1..*" Student
Professor "1" --> "1..3" Course : "teaches"
Student "1" --> "0..5" Course : "takes"
Course ..> Textbook : "requires"
六、最佳实践
关系选择原则:
- 优先使用最简单的依赖关系
- 只在必要时升级为关联
- 明确区分聚合和组合
布局技巧:
- 重要对象放在图表中心
- 相关对象分组放置
- 使用
left to right direction
改善可读性
文档化:
- 为复杂关系添加注释
- 保持标签简洁但信息完整
- 多重性应与业务规则一致
通过合理运用这些对象关系表示法,您可以创建出既准确又易于理解的系统设计图,有效促进团队沟通和系统实现。
评论已关闭