oop - OOP UML 类图,一个人有多个角色。它的结构应该是怎样的?
问题描述
系统中存在三种类型的角色。
裁判员
总统(只有1位总统)
作者
一个人既可以是裁判,也可以是作者。
如果一个人有总统的角色,他们就不能有另一个角色。
UML 类图应该是怎样的?
解决方案
这完全取决于设计中人员和角色的目的。
作为第一个想法,如果 aPerson
可以有 a Role
,那么您将在这里有两个具有以下多重性关联的类:
- a
Person
has1..n
Role
, 表示至少一个角色 - a
Role
can betake by0..n
Person
,这意味着有些角色可能根本无法履行,而角色可以由多个用户担任 - 对于特定的类(称为对象,例如标记为“总统”)的特定出现的关联(称为链接)的特定出现次数,没有任何说明
对于“总裁”等特定角色,有多种设计选择:
- 您可以在系统中拥有(硬编码?)控件,以确保只有一个链接。您可以在具有显式约束的类图中表达这一点。
- 您可以指定具有该角色的最大人数作为该角色的属性。但这立即表明存在不同类型的 if 角色(一些有最大值,一些没有限制)。
深入了解这个启动模型会引发其他问题:
- 该系统是否有 1 位全球总裁的限制,或者该角色是否与其他角色相关联(例如,某个实体的总裁、陪审团、公司......)?在后一种情况下,将缺少一些额外的类(和要求)。
- 角色列表是否固定,是否有很多与之相关的规则?如果是,您可以考虑 Bruno 建议的枚举。如果不是,你可以想一个字符串属性来描述角色。
- 最后但同样重要的是,特定角色在系统中是否具有特定行为?如果是,您可以考虑在您的图表中添加角色的专业化(并且
President
显然是成为这种专业化的候选人Role
)。
所以这一切都取决于你设计的大局。
推荐阅读
- python-3.x - python中网络抓取期间的json错误转储
- vue.js - 为vue中的每个标签添加属性
- javascript - JavaScript:document.documentElement.innerHTML 未显示所有元素
- javascript - 在循环内的 IIFE 内取消 setTimeout
- javascript - 如何在 HTML5 中模拟网络摄像头的存在?
- ajax - 从 AJAX 帖子重定向
- php - 什么都没有通过时的 Codeigniter URI 段
- android - 如何在导航控件片段中关闭导航 DrawerLayout onBackPressed
- .htaccess - 如何启用 gzip 压缩
- javascript - JS数组3深迷路