用UML显示专门化

用UML显示专门化,uml,entity-relationship,class-diagram,Uml,Entity Relationship,Class Diagram,当两个专门化实体也可以是彼此的时候,如何在UML图中显示专门化。例如: [Personel] ^ /_\ | ------------ | | [Employee] [Manager] 通常,我会使用空箭头来显示专业化,但如何显示员工或经理在某些情况下也可以担任其他角色?我只需要用一条线来连接它们吗?在最常见的形式中,泛化是互斥的。你要么是一个子类,要么是另一个子类,但决不能同时是两个子类 对

当两个专门化实体也可以是彼此的时候,如何在UML图中显示专门化。例如:

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

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

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

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


员工
经理
是一个人可以扮演的角色。使用此模式,您可以同时成为
经理
员工

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

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


员工
经理
是一个人可以扮演的角色。有了这个模式,你可以同时成为
经理
员工

我同意,尽管我想说的是
PartyRole
的一个特定实例是由一个
方扮演的。此外,UML2中的默认值是重叠的,而不是不相交的。尽管您的基础模型可能有一个{完全,不相交}的泛化集,但从这个图中我们无法分辨。@JimL。你说得对,我纠正了错误。但是,我不确定
{complete,disjoint}
子句。我确实找到了
isDisjoint
作为
泛化集
的参数,但我找不到
完整的
来自何处。但是由于
泛化
不必是
泛化集的一部分
我不应该指定它,UML有点奇怪,因为大括号中显示的单词与元模型中的单词不匹配。UML 2.5规范(formal-15-03-01)中的表9.1提供了映射。单词
{complete}
映射到
isCovering=true
,单词
{complete}
映射到
isCovering=false
,单词
{disjoint}
映射到
isDisjoint=true
,单词
{overlapping}
映射到
isDisjoint=false
。默认值为
{不完整,重叠}
。我相信当泛化不在泛化集中时,默认设置是成立的。我忘了回答“既然泛化不一定是泛化集中的一部分,我就不应该指定我应该做什么”?如果希望读者假定
{不完整,重叠}
,则无需指定。由于
PartyRole
是抽象的,这意味着实例必须是
经理
员工
(或者两者都是,以建模的方式)。抽象类意味着
isCovering=true
/
{complete}
,这与默认值相矛盾,并在您的模型中创建了一个悖论。我同意,尽管我要说,
PartyRole
的一个特定实例是由一个
方扮演的。此外,UML2中的默认值是重叠的,而不是不相交的。尽管您的基础模型可能有一个{完全,不相交}的泛化集,但从这个图中我们无法分辨。@JimL。你说得对,我纠正了错误。但是,我不确定
{complete,disjoint}
子句。我确实找到了
isDisjoint
作为
泛化集
的参数,但我找不到
完整的
来自何处。但是由于
泛化
不必是
泛化集的一部分
我不应该指定它,UML有点奇怪,因为大括号中显示的单词与元模型中的单词不匹配。UML 2.5规范(formal-15-03-01)中的表9.1提供了映射。单词
{complete}
映射到
isCovering=true
,单词
{complete}
映射到
isCovering=false
,单词
{disjoint}
映射到
isDisjoint=true
,单词
{overlapping}
映射到
isDisjoint=false
。默认值为
{不完整,重叠}
。我相信当泛化不在泛化集中时,默认设置是成立的。我忘了回答“既然泛化不一定是泛化集中的一部分,我就不应该指定我应该做什么”?如果希望读者假定
{不完整,重叠}
,则无需指定。由于
PartyRole
是抽象的,这意味着实例必须是
经理
员工
(或者两者都是,以建模的方式)。抽象类意味着
isCovering=true
/
{complete}
,这与默认值相矛盾,并在模型中创建了一个悖论。