这个UML类图是否正确?

时间:2016-09-15 09:19:08

标签: class oop uml class-diagram

我一直在努力让我的系统进入类图。我倾向于通过在数据库结构中思考太多来犯关系错误。我有一个类图:

enter image description here

所以要解释我需要的情况:

员工部分:

  • 可以按项目阶段将员工分配到0个或更多项目

项目部分:

  • 某个项目属于某种类型(如果某个项目属于特定类型的某个项目,我可能会感到困惑。)
  • 项目类型包含一个或多个项目阶段
  • 某个阶段的项目阶段IS

解释系统必须做的事情:

可以将员工分配到项目的某个阶段。项目应该是某种类型,该类型包括某些项目阶段。项目阶段是某个阶段。

因为员工需要查看他当前的所有项目等,所以我也建立了员工和项目的链接。我不知道这是否正确,或者项目阶段是否有责任向员工提供正确的项目。

3 个答案:

答案 0 :(得分:3)

根据经验,没有唯一正确的绘图方法。

聚合

一个明显的错误是您使用复合聚合。通过这种用法,您可以假设ProjectPhase附加到一个Employee,并且不能与其他Employees共享,并且肯定不是您想要在此处描述的内容。

如果要显示项目是由多名员工构建的,那么最终可能会使用共享聚合,这意味着您应该具有相反的方向和开放的菱形。

对于ProjectPhase和ProjectType, 是一个复合聚合,但方向相反(ProjectType是特定ProjectPhases的构建,而ProjectPhase只是一个ProjectType的一部分)。

概括

项目到ProjectType和阶段到ProjectPhase是存在多个选项的地方。

  1. 如果你假设一个项目是阶段的构建,然后你想建模特定类型的项目(例如ProjectWaterfall,ProjectScrum,ProjectXP,ProjectRUP,ProjectPrince2),它们将专门化具有特定结构的项目,那么你可以使用泛化,但Project和Phase将在广义端(带箭头的那个),而特定的ProjectType和ProjectPhase将在专用端(没有箭头)。如果您遵循此方法,则可以显示每个ProjectType的详细结构。有关详细信息,请参阅示例还要注意如何使用一些额外的约束来更精确地定义如何理解建模系统的逻辑。最后请注意,在我的图表中,我假设每个项目以及阶段都必须是特定类型。你不能拥有这样的项目(不一定是真的)因此我把它们变成了抽象的。 此处是某个ProjetType的项目IS

  2. 另一个选项是使用ProjectType和PhaseType作为Project和Phase的属性,并保持哪些类型的逻辑应该在其他地方的特定类型的Project中。在这种情况下,您通常将ProjectType和PhaseType建模为枚举器,然后将它们作为属性分别放在Project和Phase中,使用Dependency连接各个元素。 此处项目具有某些ProjetType

  3. 备注

    • 鉴于选择并未创建完整的可能性列表。这些只是两种最常用的方法。
    • 您可以根据更符合您目的的方法,在同一模型中混合使用方法。然而,在类之间的这种依赖性水平上,您将使用相同的方法,因为它将在图上受益(参见示例)。

    员工 - 项目关系

    显然,只有通过阶段才能将员工分配给项目,因此直接关系是多余的。您最终可以将其描述为派生关系。

    实施例

    专业类型

    此示例使用第一种方法。请注意,我定义了精确的,特定类型的项目,而不是一些未定义的常规ProjectType(相位相同)。

    在此示例中,我完全省略了有关Employee和Phase之间关系的冗余信息。

    Generalization

    类型为枚举

    此示例未提供有关特定类型结构的详细信息。您可能希望在此处添加为项目创建模板的其他类,以定义Project结构的外观(包括哪些阶段)。示例图中未显示此类。 此外,我还添加了Employee和Project之间的直接派生关联。

    Enumeration

答案 1 :(得分:1)

一些明显的错误:

  • 在两种情况下都去除了组合物。它们是错误的,通常不会添加足够的语义来使用(几乎所有时间)。
  • 将泛化更改为简单关联。它不是继承,而是归属。

在我看来,这符合你的解释:

enter image description here

您不需要EmployeeProject之间的关联,因为它通过阶段和类型进行关联。没有phase的解释,所以我只添加了一个简单的属性。我猜它是枚举或字符串。最终ProjectType也是一个简单的枚举,可以被Project中的属性替换(需要调查)。

答案 2 :(得分:1)

我认为这是适合您要求的类图:

enter image description here

我已经在Project / ProjectPhase和ProjectType / Phase之间建模了组合关联,因为项目由ProjectPhases和ProjectPhases组成,没有他们的项目,ProjectType / Phase也是如此。

Employees和ProjectPhases既没有部分关系也没有依赖性,因此这里的作文关联不合适。

在我的图表中,通过ProjectPhases将Employee隐式分配给Projects,但如果您想强调Employees和Projects之间的关系,您可以明确地在这些类之间绘制关联。