PlantUML对象组合与嵌套:构建层次化模型指南
PlantUML对象组合与嵌套详解:构建层次化对象模型
在面向对象设计中,对象之间的组合与嵌套关系是表达复杂系统结构的重要手段。本文将深入讲解如何使用PlantUML清晰呈现对象内部结构、嵌套层次以及生命周期关系。
1. 对象内部结构展开
通过可见性符号可以展示对象的内部组成结构,类似于类图中成员的可见性表示:
@startuml
object UserController {
+ UserService userService
- Logger logger
# Validator validator
}
@enduml
+
表示公共成员(可从外部访问)-
表示私有成员(仅对象内部使用)#
表示受保护成员(子对象可继承)
实践建议:
- 仅展开当前场景下需要关注的内部结构
- 对复杂对象采用分层渐进式展示
- 保持可见性标记与实际代码一致
2. 嵌套对象的分层表示
2.1 缩进表示法
@startuml
object Order {
- orderId: String
- items: List<OrderItem>
}
object OrderItem {
- productId: String
- quantity: Int
}
Order *-- OrderItem
@enduml
2.2 包包围表示法
@startuml
package "Order System" {
object Order
object OrderItem
object Payment
}
Order *-- OrderItem
Order --> Payment
@enduml
表示法选择原则:
- 缩进适合展示"has-a"的强组合关系
- 包包围适合展示逻辑分组关系
- 嵌套层级建议不超过3层
3. 组合对象的生命周期表达
组合关系(composition)意味着整体与部分的生命周期一致:
@startuml
object Car {
- engine: Engine
- wheels: List<Wheel>
}
object Engine
object Wheel
Car *-- Engine // 组合关系
Car *-- Wheel // 组合关系
@enduml
聚合关系(aggregation)则表示生命周期独立:
@startuml
object Department {
- employees: List<Employee>
}
object Employee
Department o-- Employee // 聚合关系
@enduml
生命周期表达技巧:
- 使用
*--
表示组合(整体删除时部分同步删除) - 使用
o--
表示聚合(整体删除时部分可保留) - 对关键业务对象显式标注生命周期约束
综合示例:电商订单系统
@startuml
package "Order Domain" {
object Order {
+ submit()
- calculateTotal()
}
object OrderLine {
- quantity
- unitPrice
}
object Product {
+ name
+ price
}
}
object Customer {
+ name
+ address
}
Order *-- OrderLine
OrderLine --> Product
Order --> Customer
note right of Order
生命周期规则:
1. 订单删除时同步删除所有OrderLine
2. Product独立维护
end note
@enduml
最佳实践
- 层次控制:对复杂系统采用"分而治之"策略,先展示顶层结构,再逐步展开细节
- 关系标注:对重要的组合关系添加注释说明生命周期规则
- 一致性维护:确保对象图与代码实现保持同步更新
- 工具支持:结合IDE插件实现对象图的实时预览和反向生成
通过合理运用对象组合与嵌套的表达方式,可以构建出既反映系统静态结构,又体现对象间动态约束的清晰模型,为系统设计和团队沟通提供有力支持。
评论已关闭