【问题标题】:Showing specialization with UML使用 UML 显示专业化
【发布时间】:2015-12-08 16:23:47
【问题描述】:

当两个特化实体也可能是彼此时,如何在 UML 图中显示特化。例如:

    [Personel]
        ^
       /_\
        |
    ------------
    |           |   
[Employee]    [Manager]

通常,我会使用空箭头来显示专业化,但我如何显示员工或经理在某些情况下也可以担任其他角色?我只需要使用一条线来连接它们吗?

【问题讨论】:

    标签: uml entity-relationship class-diagram


    【解决方案1】:

    在最常见的形式中,泛化是相互排斥的。你要么是一个子类,要么是另一个子类,但绝不会同时是两个子类。

    对于您使用的示例,您最好使用 Party-PartyRole 模式。

    EmployeeManager 是一个人可以扮演的角色。使用这种模式,您可以同时成为ManagerEmployee

    【讨论】:

    • 我同意,尽管我会说PartyRole 的特定实例由Party 播放。此外,UML 2 中的默认值是重叠,而不是不相交。尽管您的基础模型可能有一个{完整的,不相交}的泛化集,但从这张图中看不出。
    • @JimL。你是对的,我修正了错误。但是,我不确定{complete, disjoint} 子句。我确实找到了isDisjoint 作为GeneralizationSet 的参数,但我找不到complete 的来源。但是由于 Generalization 不必是 GeneralizationSet 的一部分,所以我不应该指定吗?
    • UML 有点奇怪,因为大括号中显示的单词与元模型中的单词不匹配。 UML 2.5 规范 (formal-15-03-01) 中的表 9.1 提供了映射。单词{complete} 映射到isCovering=true,单词{incomplete} 映射到isCovering=false,单词{disjoint} 映射到isDisjoint=true,单词{overlapping} 映射到isDisjoint=false。默认为{incomplete, overlapping}。我相信当泛化不在泛化集中时,默认值成立。
    • 我忘了回答,“既然泛化不一定是泛化集的一部分,我不应该指定我应该这样做”?如果您希望读者假设{incomplete, overlapping},则无需指定。由于PartyRole 是抽象的,这意味着实例必须是ManagerEmployee(或两者,它的建模方式)。抽象类隐含 isCovering=true / {complete},这与默认值相矛盾,并在您的模型中创建了一个悖论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多