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
