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

问题描述

一个系统中的角色分为三种类型。

裁判

主席(只有一位主席)

作者

一个人既可以是推荐人,也可以是作者。

如果一个人担任总裁的角色,他们就不能再担任其他角色。

UML 类图应该是怎样的?

解决方法

这完全取决于您设计中人员和角色的目的。

首先想到,如果一个 Person 可以有一个 Role,那么您将在这里拥有两个具有以下多重性关联的类:

  • 一个 Person1..n Role,表示至少有一个角色
  • 一个Role可以被0..n Person占用,这意味着有些角色可能根本无法实现,而角色可以由多个用户担任
  • 对于某个类(称为对象,例如标记为“总统”)的特定出现的关联(称为链接)的特定出现次数没有说明

对于“总裁”等具体角色,有多种设计选择:

  • 您可以在您的系统中使用(硬编码?)控件来确保只有一个链接。您可以在具有显式约束的类图中表达这一点。
  • 您可以指定将角色作为角色属性的最大人数。但这立即表明存在不同类型的 if 角色(有些具有最大值,有些没有限制)。

深入了解这个启动模型会引发其他问题:

  • 该系统对 1 位总裁的限制是全局的,还是该角色与其他事物相关联(例如实体、陪审团、公司的总裁...)?在后一种情况下,会缺少一些额外的类(和要求)。
  • 角色列表是否固定?是否有很多与之相关的规则?如果是,您可以考虑布鲁诺建议的枚举。如果没有,您可以考虑使用字符串属性来描述角色。
  • 最后但并非最不重要的一点是,特定角色在系统中是否具有特定行为?如果是,您可以考虑在图表中添加角色的专业化(并且 President 显然是 Role 的此类专业化的候选者)。

所以这完全取决于您设计的大局。

,

在你的问题中,我想

  • 角色Referees必须是Referee

  • 角色Authors必须是Author

  • 如果一个人担任总统的角色,他们不能担任另一个角色必须如果一个人担任总统的角色, >那个人不能有其他角色

  • 只有1位总统必须只有1位总统

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

enter image description here

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

但是多重性允许既是裁判又是总统,或者作者和总统,这就是为什么我在 Person 上添加了约束 self.roles->size() = 1 or self.roles->excluding(Role::President) 以避免这种情况。

由于约束 Person.allInstances()->count(p | p.roles()->first() = Role::President) = 1,只有一位总统。或者当然,如果有可能没有总统用= 1

代替<= 1

关于多重性,请参阅第 33 页的 § 7.5.3.2 Multiplicityformal/2017-12-05

的第 34 页的 § 7.5.4.1 Multiplicity Element

关于 OCL,请参阅 formal/2014-02-03

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...