PlantUML+EA描述《分析模式》第6章存货和会计(8)

📅 2026/7/30 10:04:19 👁️ 阅读次数 📝 编程学习
PlantUML+EA描述《分析模式》第6章存货和会计(8)

《GJJ-004 分析模式及实现》,umlchina.com/url/video.html


原图6.25

EA绘制

图6.29 对应账户。

PlantUML

@startuml

skinparam nodesep 120

skinparam ranksep 100

class 账户 {

--

<i>constraints</i>

{传递: 对应账户s = 对应账户s->closure(对应账户s)}

{对称: 对应账户s->forAll(a | a.对应账户s->includes(self))}

}

class 损益表账户

class 资产负债表账户

class 当事者

损益表账户 --|> 账户

资产负债表账户 --|> 账户

账户 "0..*" -- "0..*\n-对应账户s" 账户

账户 "0..*" -- "1\n-分类者" 当事者

资产负债表账户 "0..*" -- "1\n-所有者" 当事者

@enduml

原图6.30

EA绘制

图6.30 特化账户模型以支持存货。

要在特定领域使用会计模型,就应该做这种特化。

PlantUML

@startuml

class 地点

class 账户

class 持仓

class 条目类型

class 分录 {

- 数额: 数量

}

class 会计事项 {

--

<i>constraints</i>

{分录s->sum(e | e.数额)=0}

}

class 存货分录 {

--

<i>constraints</i>

{条目类型 = 账户.条目类型}

}

class 转移 {

--

<i>constraints</i>

{分录s->forAll(e1, e2 | e1.条目类型 = e2.条目类型)}

}

持仓 --|> 账户

存货分录 --|> 分录

转移 --|> 会计事项

地点 "1" -- "0..*" 持仓

持仓 "0..*" -- "1" 条目类型

账户 "1" -- "0..*" 分录

分录 "2..*\n-分录s" -- "1" 会计事项

存货分录 "0..*" -- "1" 条目类型

@enduml

原图6.31

EA绘制

图6.31 典型的酬金/支出账户结构。

粗边框图标是明细账户,按箭头所示汇总。

PlantUML

@startuml

object "ACM: 汇总账户"

object "Megabank: 汇总账户"

object "ACM酬金: 明细账户"

object "ACM支出: 明细账户"

object "Megabank支出: 明细账户"

object "Megabank酬金: 明细账户"

object "支出: 汇总账户"

object "酬金: 汇总账户"

"ACM酬金: 明细账户" --> "ACM: 汇总账户"

"ACM支出: 明细账户" --> "ACM: 汇总账户"

"Megabank支出: 明细账户" --> "Megabank: 汇总账户"

"Megabank酬金: 明细账户" --> "Megabank: 汇总账户"

"ACM支出: 明细账户" --> "支出: 汇总账户"

"Megabank支出: 明细账户" --> "支出: 汇总账户"

"ACM酬金: 明细账户" --> "酬金: 汇总账户"

"Megabank酬金: 明细账户" --> "酬金: 汇总账户"

@enduml

原图6.32

EA绘制

图6.32 允许多个汇总账户。

这个图用有向无环图替换了图6.5的层级结构。

(译注:和图6.5相比,变化只是汇总账户关联端的多重性从1变为多,此时得到的结果为有向无环图。原图上标注的hierarchy(层级结构)、DAG(有向无环图)严格来说只是从某个视角希望(YiYin)看到的结果,不是用类的属性来描述的约束。)

PlantUML

@startuml

skinparam nodesep 120

skinparam ranksep 100

class 账户

class 汇总账户

class 明细账户

class 分录

class 会计事项

汇总账户 --|> 账户

明细账户 --|> 账户

汇总账户 "0..*" -- "0..*\n-组件s" 账户

账户 "1" --> "0..*«abstract»\n-分录s" 分录

明细账户 "1" -- "0..*\n-分录s" 分录

分录 "2..*" -- "1" 会计事项

note bottom of 汇总账户

Invariant

{ not 组件s->closure(c | c.组件s)->includes(self)}

end note

@enduml