Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OOP UML类图,一个人有多个角色。它的结构应该是怎样的?_Oop_Uml_Analysis_Class Diagram_Class Design - Fatal编程技术网

OOP UML类图,一个人有多个角色。它的结构应该是怎样的?

OOP UML类图,一个人有多个角色。它的结构应该是怎样的?,oop,uml,analysis,class-diagram,class-design,Oop,Uml,Analysis,Class Diagram,Class Design,系统中有三种类型的角色 裁判 总裁(只有一位总裁) 作者 一个人既可以是裁判也可以是作者 如果一个人扮演总统的角色,他们就不能再扮演另一个角色 UML类图应该是怎样的?在你的问题中,我想 角色裁判员s必须是裁判员 角色Authors必须是Author 如果一个人扮演总统的角色,他们不能再扮演另一个角色。如果一个人扮演总统的角色,这个人不能再扮演另一个角色 只有一个总统必须有一个而且只有一个总统 在UML中建模的一种方法是: 由于多重性1..2{unique}一个人有一个或两个角色,

系统中有三种类型的角色

裁判

总裁(只有一位总裁)

作者

一个人既可以是裁判也可以是作者

如果一个人扮演总统的角色,他们就不能再扮演另一个角色


UML类图应该是怎样的?

在你的问题中,我想

  • 角色裁判员s必须是裁判员

  • 角色Authors必须是Author

  • 如果一个人扮演总统的角色,他们不能再扮演另一个角色。如果一个人扮演总统的角色,这个人不能再扮演另一个角色

  • 只有一个总统必须有一个而且只有一个总统

在UML中建模的一种方法是:

由于多重性
1..2{unique}
一个人有一个或两个角色,不能有两个相同的角色

但多重性允许既是裁判又是主席,或者既是作者又是主席,这就是为什么我在Person上添加了约束
self.roles->size()=1或self.roles->排除(Role::president)
,以避免这种情况


多亏了约束
Person.allInstances()->count(p | p.roles()->first()=Role::President)=1
只有一位总统。当然,如果可以不让一位总裁用
替换
=1
,这完全取决于您设计中的人员和角色的目的

首先想到的是,如果一个
可以拥有一个
角色
,那么这里有两个与以下多重性相关的类:

  • 1..n
    角色
    ,表示至少有一个角色
  • 角色可以由
    0..n
    人员担任,这意味着有些角色可能根本无法履行,有些角色可以由多个用户担任
  • 对于某个类(称为对象,例如标记为“主席”)的特定出现次数,没有说明关联(称为链接)的具体出现次数
对于“总统”等特定角色,有许多设计选项:

  • 您可以在系统中使用(硬编码?)控件来确保只有一个链接。您可以在带有显式约束的类图中表达这一点
  • 您可以指定将角色作为角色属性的最大人数。但这立即表明,存在不同类型的if角色(一些具有最大值,一些没有限制)
对该启动模式的深入研究提出了其他问题:

  • 对于系统而言,这是一个全球总裁的限制,还是该角色与其他角色(如实体总裁、陪审团主席、公司总裁等)相关?在后一种情况下,将缺少一些额外的类(和需求)
  • 角色列表是否已固定,是否有许多规则与之关联?如果是,您可以按照Bruno的建议使用枚举。如果不是,您可以考虑使用字符串属性来描述角色
  • 最后但并非最不重要的一点是,特定角色在系统中是否具有特定行为?如果是,您可以考虑在图表中添加角色的专门化(而
    总裁
    显然是
    角色
    专门化的候选者)

因此,这一切都取决于您的设计的大局。

当然,当我回答时,我也会考虑类/接口,但没有提到这一点,因为正如您首先所说的,假设“有趣”的是具有特定的行为,而这些行为不属于声明的一部分,并且真正满足约束条件(1个主席除外)要让课程主席作者裁判和作者裁判:-(我的意思是,仅仅说有一个班长是不足以解决问题的,我想你需要说more@bruno我可以向你保证,我没有给出你的答案。相反,我钦佩你对约束的掌握。虽然我一开始对你的列举感到惊讶,因为我个人在角色方面的经验,但我最终明白了你的观点,没有W在我的回答中改变了你的立场。显然OP的设计意图缺失,所以我试图给出一些可能的替代方案。我希望它足够清晰,不会太枯燥。@Christophe请确保绝对没有问题,我很欣赏你的答案,这些答案在总体上是如此清晰,我将以编辑的方式发表这就是为什么我有一次冒昧地说,也许你可以说得更多,但当然这只是一个建议。基于纯粹假设的啦啦队不是一个真正的答案。@qwerty_那么你从哪里看到假设?拼写错误更正?或者因为自然语言不是正式的,然后根据“定义”,我们总是把它定义为关于S.O.的所有问题的解释?当然,在最后一种情况下,所有答案都必须删除,然后S.O.被禁止。请比你评论中的情况更准确……否则我只能在阅读时做假设it@qwerty_so这不是唯一的“假设”布鲁诺的回答实际上是一种外交和礼貌的方式来引起人们对问题中的拼写错误和语法问题的注意?@Christophe,这个问题到目前为止还不清楚。回答一个不清楚的问题是值得怀疑的(我想是双关语)。“在你的问题中”清楚地表明答案是基于假设的。@Rasit您好,欢迎!您的问题很有趣。但是,为了给您提供更具体的答案,我们需要知道您希望如何处理系统中的角色,如果总统在整个系统中是独一无二的,那么角色演变的可能性有多大(例如,增加更多角色,如合著者、出版商、审计员、v