初步评论:首先,我想感谢布鲁诺和阿克塞尔各自的答案,这让我走上了正轨。尽管如此,根据他们的指示进一步挖掘,我偶然发现了一个更简单的解决方案和支持参考。因为它很有用,并且按照布鲁诺的建议,我最终决定将其作为答案发布。
简单的关联可以特化吗?
在我的问题中,我考虑了关联类的情况,因为我认为只有类可以专门化。但事实上,简单的关联也是可以推广的。
首先,根据 UML 2.5,关联本身已经是一个分类器:
第 11.5.1 节:关联对一组表示之间链接的元组进行分类
键入的实例。 AssociationClass 既是关联又是类。
分类器可以专门化:
第 9.2.3.2 节:泛化定义了分类器之间的泛化/专业化关系。
符号如下(我不告诉你规格细节,我必须承认,如果我在两周前看到这个,我会声称“胡说八道”):
协会专业化是什么意思?
关联专业化的语义定义良好(我的重点是:
第11.5.3.1节(p.198): (...) 就协会而言,专业化意味着按专业化分类的链接
协会也是按专门协会分类的。从语义上讲,这意味着
通过从代表末端的集合中消除重复项来计算的集合
专门关联是通过消除计算出的相应集合的子集
代表专业协会目的的收藏品的副本;这
子集化的事实可能会也可能不会在模型中显式声明.
因此,在不告诉任何有关关联结束的情况下,专业化意味着专业化关联是一般关联的子集。显式子集化是可选的:
那么关联课程呢?
关联类既是关联又是类。 UML 规范阐明两者都是分类器并且属性
元模型的内容不重复。所以这是一回事。该专业同时适用于两者:
第 11.5.3.2 节:(...)为Class和Association定义的专业化和细化规则也适用于AssociationClass。
重要提示:一个关联可以泛化另一个关联,一个关联类可以泛化一个关联类,但是“关联类不能
是协会或类的概括”),而我们通常理解的方式是无效的:
结论
当严格考虑 UML 规范时,我的图表(关联类之间的简单专业化)似乎是正确的,
明确并表达意图的语义。亚历克斯的回答建议明确声明隐含的子集:这是有效的,但它是
不需要。
请注意,存在细微的差别:泛化/专门化与关联本身有关,而子集则与关联结束有关。
附加见解:
-
对关联的重定义、子集化和特化的语义进行了详细分析。