PlantUML描述《分析模式》第3章观察和测量(1)
PlantUML描述《分析模式》第2章“当责”(1)
PlantUML描述《分析模式》第2章“当责”(2)
原图3.1
EA绘制
图3.1 数值属性。
这个做法没有指定单位。
PlantUML
@startuml
class 人 {
- 身高: 数值
- 体重: 数值
- 血糖水平: 数值
}
@enduml
原图3.2
EA绘制
图3.2 使用数量作为属性的测量。
在需要单位的地方应该始终使用数量。
PlantUML
@startuml
left to right direction
class 数量 {
- 数额: 数值
- 单位: 单位
' 使用全角字符,避免与PlantUML语法冲突
+ +()
+ -()
+ *()
+ /()
+ =()
+ >()
+ <()
}
人 -- 数量
@enduml
原图3.3
EA绘制
图3.3 给单位添加换算比率。
PlantUML
@startuml
left to right direction
skinparam ranksep 100
skinparam nodesep 100
class 单位 {
}
class 换算比率 {
-数值: 数值
}
单位 "-从1" -- "0..*" 换算比率
单位 "-到1" -- "0..*" 换算比率
@enduml
原图3.4
EA绘制
图3.4 复合单位
这个模型可用于加速度和类似现象
PlantUML
@startuml
class 单位
class 复合单位
class 原子单位
class 单位引用 {
-幂: Integer
}
单位 <|-- 原子单位
单位 <|-- 复合单位
复合单位 "1" -- "-单位引用s1..*" 单位引用
原子单位 "1" -- "0..*" 单位引用
note left of 复合单位
约束:
单位引用s->size() > 1 or (单位引用s->size() = 1 and
(单位引用s->first().幂 < 0 or 单位引用s->first().幂 > 1))
end note
@enduml
原图3.5
EA绘制
图3.5 使用bag的复合单位。
这个模型比图3.4更紧凑。
PlantUML
@startuml
skinparam ranksep 120
skinparam nodesep 160
class 单位
class 原子单位
class 复合单位 {
.. constraints ..
逆s->size() >= 1 or 直接s->size() >= 2
}
单位 <|-- 原子单位
单位 <|-- 复合单位
复合单位 "0..* " -- "-直接s\n0..*{bag}" 原子单位
复合单位 "0..* " -- "-逆s\n0..*{bag}" 原子单位
@enduml
原图3.6
EA绘制
图3.6 引入测量和现象类型
PlantUML
@startuml
skinparam ranksep 80
skinparam nodesep 120
class 现象类型
class 人
class 测量
class 数量
现象类型 "1" -- "0..*" 测量
人 "1" -right- "0..*" 测量
测量 "0..*" -right- "1" 数量
@enduml
原图3.7
EA绘制
图3.7观察和类别观察。
这个模型支持定性测量,例如“A型血”。
PlantUML
@startuml
skinparam ranksep 80
skinparam nodesep 140
class 现象类型
class 人
class 观察
class 类别观察
class 测量
class 类别
class 数量
观察 <|-- 类别观察
观察 <|-- 测量
现象类型 "1" -- "0..*" 观察
人 "1" -- "0..*" 观察
类别观察 "0..*" -- "1" 类别
测量 "0..*" -- "1" 数量
@enduml