PlantUML描述《分析模式》第3章观察和测量(1)

发布于:2025-08-31 ⋅ 阅读:(19) ⋅ 点赞:(0)

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

图片