关于UML中两个关联间{XOR}约束的正确性验证问询
UML约束方案正确性分析
先明确你的需求关键点:
- 类A和类B、类A和类C都是双向关联
- 类A必须且只能关联一个类B实例或者一个类C实例,绝对不能同时关联两者
- 反向关联规则:类B仅能关联1个类A实例;类C可关联0到多个类A实例
你用{XOR}约束的思路是对的,UML里这个约束本来就是用来表达互斥的关联关系,但要结合关联的多重度一起调整,才能完全覆盖你的场景:
正确的配置细节
- 类A到类B的关联多重度设为
0..1,类A到类C的关联多重度也设为0..1,给这两个关联加上{XOR}约束,同时补充{1}约束(保证A必须关联其中一个,不能两个都不关联) - 类B到类A的关联多重度设为
1,对应反向仅能关联1个A - 类C到类A的关联多重度设为
0..*,对应反向可关联0到多个A
你的示意图是否正确?
如果你的示意图满足以下几点,就是正确的:
- 两个关联都标记了
{XOR}约束,且A端的两个关联多重度都是0..1,同时添加了{1}约束确保A必须二选一 - B端指向A的多重度是
1,C端指向A的多重度是0..*
要是没加{1}约束,只能表达A不能同时关联B和C,但没法保证A必须关联其中一个,就不符合你“必须关联一个”的要求了。
补充说明:UML的{XOR}只负责互斥逻辑,不强制“必须存在一个关联”,所以得额外加{1}约束补全规则。
内容的提问来源于stack exchange,提问作者Balburus
相关产品推荐
相关产品推荐

