本博客源自《UML精粹》一书,向Martin Fower致敬。UML图使用PlantUML的DSL绘制。
形如:visibility name: type multiplicity = default {property-string}
示例:- name: String [1] = "Untitled" {readOnly}
visibility: public(+), private(-), protected(#)
name: 字段名
type: 字段类型
Multivalued(多指的)意味着上限大于1,通常是*
default value: 在创建期间没有指定值时新创建对象的值
{property-string}: 指出属性附加的性质
@startuml
Class Order {
+ dateReceived: Date [0..1]
+ isPrepaid: Boolean [1]
}
@enduml
类的关联(表示属性的一种方法):
一根两个类之间的实线:方向从源类到目标类
性质的名称及多重性放在关联的目标端
能够展示线两端的多重性
类的关联与属性相比较:
倾向于小的东西使用属性,例如日期和布尔,值类型
更重要的类,使用关联,例如顾客和订单
为图中重要的类使用类方框
@startuml
Order "1" --> "*" OrderLine : + lineItems
@enduml
多重性(指出多少对象可以填充该性质):
"1", "0..1", "*", "2..4"
关于多重性的术语:
Optional(可选的)意味着下限0
Mandatory(强制的)意味着下限为1,也可能更多
Single-valued(单值的)意味着上限为1
Multivalued(多指的)意味着上限大于1,通常是*
{ordered} 排序
{nonunique}允许重复
{bag}无序、非唯一
属性多重性的默认值为1,但图可能省略了多重性
性质的编程解释(方式不止一种):
Java的字段与C#(支持性质的语言)的属性对比
使用私有字段是对图的一种非常聚焦于实现的解释
面向接口的解释吧重点放在获取方法上而不是潜在数据上(客户不能辨别哪些是字段,哪些是计算的结果值)
你几乎不会在类图中看到集合类
@startuml
Person "0..1" <--> "*" Car : owns >
@enduml
操作:
visibility name(paramter-list) : return-type {property-string}
paramter: direction name: type = default value
+ name(in param: String) : String {getter}
return-type: 返回类型
direction:
输入(in),输出(out),兼有(inout)
没有展示方向,就假设为in
查询与修改相分离
操作比方法范围更广,操作困难包含多个方法
@startuml
Class Order {
+ getPrice(str: String): String
}
@enduml
泛化:
里氏代换原则:将父类替换成子类,且一切工作正常
@startuml
Customer <|-- PersonalCustomer
Customer <|-- CorporateCustomer
@enduml
注解符和注释(注释符是图中的注释):
注解符可以单独存在
也可以通过虚线链接到所注释的元素
注解符可以出现在任何类型的图中
@startuml
Person "0..1" <--> "*" Car : owns >
note right of Person #blue\9932CC
this is my
note on this class
end note
@enduml
依赖:
关联就包含依赖关系
UML有许多中依赖,每一种都有特定的语义和关键词
最有用的基本依赖:
call:源调用目标的操作
create:源创建目标的实例
derive:源从目标派生
instantiate:源是目标的实例
permit:目标允许源访问目标的私有特性
realize:源是目标所定义的规格或接口的实现
refine:精化指不同语义级别之间的关系
substitute:源矿业替代目标
trace:用于跟踪类似需求到类
use:源的实现目标
通常在使用依赖时不带关键词
不要尝试展示类图中的所有依赖
@startuml
Class01 ..> Class02 : call
@enduml
约束规则:
画类图时,做的大部分事情都是表明约束
可以用任何事情来表示约束,前提是放入{}中
扩展:按契约设计
何时使用类图:
不要尝试使用所有的表示法
不要为每个东西都画模型
类图不要只聚焦于结构,而忽略了行为
更多资料:
UML三友《UML用户指南》 《UML参考手册》