当前位置: 首页 > 知识库问答 >
问题:

有关项目管理中关系类型的 UML 类图

吴同
2023-03-14

我试图为我的项目管理软件画一个类图,描述如下。它包含以下类别:

    项目
  • - 软件项目
  • 项目经理 - 管理项目的人/她
  • 员工 - 从事项目工作的人员

以及以下关系/关联:

> < li>

一个项目经理可能要管理多个项目,而一个项目只能由一个项目经理管理

项目经理可以将员工分配给他/她管理的项目

对于上面的关联,我创建了这个类图:

    < li >如何对第一个关联(在< code>ProjectManager和< code>Project之间)建模是很清楚的。 < li >我不知道如何建模第二个关联< br >(如何实现项目经理只能将项目分配给自己负责管理的员工?)

共有3个答案

郎诚
2023-03-14
匿名用户

对问题进行建模的更通用方法是对项目经理和员工使用对象类型“人员”(或“员工”)。这将表示项目经理也是雇员,可以作为经理分配给某些项目,而他们作为普通雇员分配给其他项目。

在这种方法中,您将拥有两个类员工Project,它们之间有两个关联:

  1. 关联员工-works-for-Project(或者最好在关联端使用工人之类的角色名称)。
  2. 一个关联员工-is-Manager er-of-Project,其中Manager是角色名称。

如果您确实需要建模/记录项目经理将员工分配给项目的情况,那么您需要将第一个关联(< code > Employee -works-for-< code > Project )替换为三元关联< code > Employee -is-assigned-to-< code > Project -by-< code > Employee -as-< code > assigner ,其中后一个员工(分配者)需要成为所分配项目的经理。这种情况可以通过附加到< code>Employee类的相应不变量来捕获。

夔高寒
2023-03-14

您只需向Project添加一个名为的操作,该操作将把员工添加到其分配的员工列表中:

不清楚如何分配员工,是分配给一个项目还是多个项目。此外,您可能需要取消分配操作。

当然,您也可以使用@WolfgangFahl建议的关联类。

朱阳曜
2023-03-14

您的问题接近于我们多年来在我的公司 BITPlan 的 UML 培训中使用的上述示例。

在此示例中,有一个 ProjectAssignment 类,其规则是,对于每个时间点,可能只有一个具有“resposible=true”的项目分配。具有此项目分配的员工是项目经理。当子项目发挥作用并且您希望对可能随时间变化的整个经理层次结构进行建模时,也可以应用此样式。

我个人认为,在模型的文档中以散文形式陈述这样的限制通常要好得多,而不是试图使用继承和基数在结构中展示它。

 类似资料:
  • 在UML图中,这些场景之间的关系是什么? <code>1.取2个类,类A和类B。类A中有一些方法,例如:public function(ArrayList <代码> 2。取两个类,A类和b类。A类中有一些方法,比如:公共函数(ArrayList

  • 我对我要在类图中使用哪些关系有些怀疑。我知道我可以使用一般关联(使用关联行)或更多特定的关联,如聚合或组合。我已经知道聚合和组合的定义,但我的问题是: 何时需要使用一般关联,何时需要使用更具体的关联 有什么规则吗

  • 图像显示了仓库的物流。非常非常简单。它的概念是什么:有单据:< code > receiving lubril ,< code > dispatchinglirl ,< code>ReplacementOrder。 它们与主要类交互:、和。 以及< code>Register类:< code > ItemRemainsInWarehouse 。原来,文件是操作、接收、发送等的确认。< code>R

  • 本文向大家介绍关系类型,包括了关系类型的使用技巧和注意事项,需要的朋友参考一下 X和Y或E上的集合之间的空关系是空集合∅ 集合X和Y之间的完全关系为集合X×Y 集合X上的身份关系是集合{(x,x)| x∈X} 关系R的逆关系R'定义为-R'= {(b,a)| (a,b)∈R} 示例-如果R = {(1,2),(2,3)},则R'将是{(2,1),(3,2)} 如果∀a∈A与a相关(aRa成立),则

  • http://i.imgur.com/8fwhsai.jpg

  • 使用“关联类型”可以增强代码的可读性,其方式是移动内部类型到一个 trait 作为output(输出)类型。这个 trait 的定义的语法如下: // `A` 和 `B` 在 trait 里面通过`type` 关键字来定义。 // (注意:此处的 `type` 不同于用作别名时的 `type`)。 trait Contains { type A; type B; // 通常