具体内容见“如何理解UML2.5.1(05篇)”一文。
我的问题是,我在此文中给出的redefines的最新解释是否正确?如不正确,请给出一个正确的解释。
我倒是希望我给出的这个解释不正确,因为其还是与完全没有subsets/redefines标记的区别太少,能应用的场景太少。
欢迎大家积极评论、留言,先感谢了。
具体内容见“如何理解UML2.5.1(05篇)”一文。
我的问题是,我在此文中给出的redefines的最新解释是否正确?如不正确,请给出一个正确的解释。
我倒是希望我给出的这个解释不正确,因为其还是与完全没有subsets/redefines标记的区别太少,能应用的场景太少。
欢迎大家积极评论、留言,先感谢了。
感谢大家的回复,受到大家给出的答案的启发,现在我提出一个最新答案,还请大家批评指正。谢谢。
两个关联具有泛化关系的两个先决条件:
一、两个关联在语义上具有泛化关系;
二、两个关联联接两对具有泛化关系的类。
这就导致如果两个关联具有泛化关系,则关联两个端点必须具有subsets/redefines标记。
以“UML2.5.1”中的Figure9.4为例,其右侧的Classifier和ClassifierTemplateParameter之间有两个关联,左边一个关联(Asso1)两端有redefines标记,右边一个关联(Asso2)两端则没有任何标记。
Asso1满足前述两个先决条件,因此Asso1与第三个关联(Asso3)之间具有泛化关系,进而导致Asso1两端都有redefines标记。
Asso2满足第二个先决条件(因为其与Asso1联接的是相同的类),但是不满足第一个先决条件。由于其与其它关联之间没有泛化关系,因此关联两端没有任何标记。
现在也可以解释为什么redefines与没有subsets/redefines标记的效果可以完全相同。原因也不复杂,当关联一端,尤其是两端有redefines标记时,其作用是告诉看图人这是一个泛化关联。也就是说,关联两端都有redefines标记的效果与没有subsets/redefines标记的效果完全相同,但是前者还有一个后者不具有的功能:即其所修饰的关联是一个泛化关联。这个功能在Figure8.4中还不明显,因为泛化和被泛化的关联在同一个图中。但是这个功能在例如前述Figure9.4中就很明显,如果Asso1两端没有任何标记,则很难让看图人知道这是一个泛化关联。而造成这个问题的起因就在于UML2.5.1放弃了之前用在关联之间画继承符号的方式表达关联泛化。
因此现在我又有了一个新问题:
我之前给出的那个解释是不是画蛇添足?
欢迎大家继续讨论,先感谢了。