有向无环图的约束怎么表达-《分析模式》漫谈39

DDD领域驱动设计批评文集

做强化自测题获得"软件方法建模师"称号

《软件方法》各章合集

"Analysis Patterns"的第3章的图3.10,原图如下:

2004和2020中译本都只是翻译了文字,在2024中译本中,我们先照猫画虎用UML改编如下:

但还有一个问题没有解决,在"观察概念"的自反关联中,Fowler标了一个dag

DAG即有向无环图(Directed Acyclic Graph),意思是"观察概念"自反关联组成的对象图应该是一个有向无环图,像下面这样:

这个约束是为了防止出现某个实例的超类型直接或间接地又把该实例作为超类型。

之所以是有向无环图,是因为"超类型"一端的多重性可以为"多",如果最多为1,那就是一棵有向树,例如:

虽然Fowler在附录中有说明,dag是类别图的一个约束标记,但这样表示是不严谨的。

之前漫谈文章中评点过图3.5,图上也放了一个标记bag

这是可以的,因为它约束的是某个"复合单位"链接到的"原子单位"集合(无序、可重复)。

而本文开头图3.10中的dag并不是对某个"观察概念"的"超类型"集合的约束,而是描述存在图中所定义自反关联的所有"观察概念"以及它们之间的链接所形成的图,在"超类型"那里简单这样标一下是不合适的。

如果想更严谨地表达这个约束,可以用OCL,如下:

意思是,对于任何一个"观察概念",不允许出现这样的情况:求它的"超类型"闭包所得的"观察概念"集合中包含它自己。

最后得到的图3.10如下:

相关推荐
Warren2Lynch5 小时前
破局“伪敏捷”:UML诊断视角下的微服务转型与架构重构——以EcoStream为例
微服务·架构·uml
rolt6 小时前
[pdf]《软件方法》全流程引领AI-电子书共560页202606更新
产品经理·架构师·uml
rolt6 小时前
[pdf、epub]370道《软件方法》强化自测题业务建模需求分析共310页(202606更新)
产品经理·架构师·uml
lipengxs1 天前
PlantUML、Mermaid、SQL ER、OpenAPI 在线预览工具整理
ai·编辑器·流程图·uml
lsyeei3 天前
UML建模在软件生命周期中的应用
软件工程·uml
FreakStudio4 天前
大话电容传感器和电容SOC芯片,看这一篇就够了
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
xiaobobo33305 天前
面向对象:linux内核中函数转数据的用法
linux·面向对象·隔离·函数指针绑定
装不满的克莱因瓶5 天前
DDD 设计与 Maven 多模块拆分:从单体项目到领域驱动架构实践
java·架构·maven·ddd
艾利克斯冰5 天前
Java设计模式详解-七大设计原则(持续更新中)
设计模式·uml·开闭原则
HEADKON6 天前
尼洛替尼300mg每日两次空腹服用治慢粒,QT延长风险高,低钾低镁需纠正后用药
uml