这个 UML class 图正确吗?
Is this UML class diagram correct?
我一直在努力让我的系统进入 class 图表。我倾向于在数据库结构中考虑太多而犯关系错误。我有一个 class 图:
所以为了说明我需要的情况:
员工部分:
- 一个员工可以按项目阶段分配到 0 个或多个项目
项目部分:
- 一个项目属于某种类型(如果一个项目具有或属于某种类型,我可能会感到困惑)。
- 一个项目类型由 1 个或多个项目阶段组成
- 某个阶段的项目阶段是
解释系统必须做什么:
可以将员工分配到项目的特定阶段。项目应该属于某种类型,并且该类型由某些项目阶段组成。项目阶段为某阶段。
因为员工需要查看他当前的所有项目等,所以我也对员工和项目进行了 link。我不知道这是正确的还是项目阶段,它有责任向员工提供正确的项目。
一些明显的错误:
- 删除这两种情况下的合成。它们是错误的,并且通常根本没有添加足够的语义来使用(几乎所有时候)。
- 将概括更改为简单关联。这里不是继承而是归属
据我所知,这符合您的解释:
您不需要从 Employee
到 Project
的关联,因为它是通过阶段和类型链接的。 phase
没有解释,所以我只是添加了一个简单的属性。我猜这是一个枚举或一个字符串。最终 ProjectType
也是一个简单的枚举,可以用 Project
中的属性替换(需要调查)。
根据经验 - 没有唯一正确的绘图方法。
聚合
一个明显的错误是您使用复合聚合。通过这种用法,您假设 ProjectPhase 附加到一个 Employee 并且不能与其他 Employees 共享,这绝对不是您想要在此处描述的内容。
如果你想表明该项目是由多个员工构建的,你最终可以使用共享聚合,这意味着你应该有一个相反的方向和一个开放的菱形。
对于 ProjectPhase 和 ProjectType,此 是 复合聚合,但方向相反(ProjectType 是特定 ProjectPhase 的构建,而 ProjectPhase 恰好是一个 ProjectType 的一部分)。
泛化
Project to ProjectType 和 Phase to ProjectPhase 是存在多个选项的地方。
如果您假设一个项目是由阶段构建的,然后您想要对特定类型的项目(例如 ProjectWaterfall、ProjectScrum、ProjectXP、ProjectRUP、ProjectPrince2)建模,这将专门化具有特定结构的项目,那么您可以使用泛化,但是 Project 和 Phase 将位于泛化端(带箭头的),而特定的 ProjectType 和 ProjectPhase 将位于专用端(没有箭头)。如果您遵循此方法,您将能够显示每个 ProjectType 的详细结构。有关详细信息,请参阅示例。还要注意如何使用一些额外的约束来更精确地定义如何理解建模系统的逻辑。最后请注意,在我的图表中,我假设每个项目和阶段都必须属于特定类型。你不能有这样的项目(不一定是真的),因此我把它们抽象了。 这里是某个ProjetType的项目。
另一种选择是使用 ProjectType 和 PhaseType 分别作为 Project 和 Phase 的属性,并在其他地方保留哪些类型应该在特定类型的 Project 中的逻辑。在这种情况下,您通常将 ProjectType 和 PhaseType 建模为枚举器,然后将它们作为属性分别放在 Project 和 Phase 中,将各自的元素与 Dependency 链接起来。 此处项目具有特定的 ProjetType。
注释
- 给定的选择不会创建完整的可能性列表。这只是两种最常用的方法。
- 您可以在同一模型中混合使用多种方法,具体取决于哪种方法更适合您的目的。然而,在 类 之间的这种依赖级别上,您经常会使用相同的方法,因为它会在图表上受益(参见示例)。
员工 - 项目关系
显然,Employee 到 Project 的分配仅通过 Phase 完成,因此直接关系是多余的。您最终可以将其描述为派生关系。
例子
特殊类型
本例使用第一种方法。请注意,我定义了准确的、特定类型的项目,而不是一些未定义的通用项目类型(与阶段相同)。
我在这个例子中完全省略了关于 Employee 和 Phase 之间关系的冗余信息。
枚举类型
此示例不提供有关特定类型结构的详细信息。您可能希望在此处添加额外的 类,为您的项目创建一个模板,以定义项目结构的外观(包括哪些阶段)。此 类 未显示在示例图中。
此外,我还添加了 Employee 和 Project 之间的直接派生关联。
我认为这是符合您要求的 class 图:
我对 Project/ProjectPhase 和 ProjectType/Phase 之间的组合关联进行了建模,因为一个项目由 ProjectPhases 组成,而 ProjectPhases 不能没有它们的项目而存在,ProjectType/Phase 也是如此。
Employees 和 ProjectPhases 既没有部分关系也没有存在依赖关系,因此组合关联在这里不合适。
在我的图表中,Employee 通过 ProjectPhases 隐式分配给 Projects,但如果您想强调 Employees 和 Projects 之间的关系,您很可能会明确地在这些 classes 之间建立关联。
我一直在努力让我的系统进入 class 图表。我倾向于在数据库结构中考虑太多而犯关系错误。我有一个 class 图:
所以为了说明我需要的情况:
员工部分:
- 一个员工可以按项目阶段分配到 0 个或多个项目
项目部分:
- 一个项目属于某种类型(如果一个项目具有或属于某种类型,我可能会感到困惑)。
- 一个项目类型由 1 个或多个项目阶段组成
- 某个阶段的项目阶段是
解释系统必须做什么:
可以将员工分配到项目的特定阶段。项目应该属于某种类型,并且该类型由某些项目阶段组成。项目阶段为某阶段。
因为员工需要查看他当前的所有项目等,所以我也对员工和项目进行了 link。我不知道这是正确的还是项目阶段,它有责任向员工提供正确的项目。
一些明显的错误:
- 删除这两种情况下的合成。它们是错误的,并且通常根本没有添加足够的语义来使用(几乎所有时候)。
- 将概括更改为简单关联。这里不是继承而是归属
据我所知,这符合您的解释:
您不需要从 Employee
到 Project
的关联,因为它是通过阶段和类型链接的。 phase
没有解释,所以我只是添加了一个简单的属性。我猜这是一个枚举或一个字符串。最终 ProjectType
也是一个简单的枚举,可以用 Project
中的属性替换(需要调查)。
根据经验 - 没有唯一正确的绘图方法。
聚合
一个明显的错误是您使用复合聚合。通过这种用法,您假设 ProjectPhase 附加到一个 Employee 并且不能与其他 Employees 共享,这绝对不是您想要在此处描述的内容。
如果你想表明该项目是由多个员工构建的,你最终可以使用共享聚合,这意味着你应该有一个相反的方向和一个开放的菱形。
对于 ProjectPhase 和 ProjectType,此 是 复合聚合,但方向相反(ProjectType 是特定 ProjectPhase 的构建,而 ProjectPhase 恰好是一个 ProjectType 的一部分)。
泛化
Project to ProjectType 和 Phase to ProjectPhase 是存在多个选项的地方。
如果您假设一个项目是由阶段构建的,然后您想要对特定类型的项目(例如 ProjectWaterfall、ProjectScrum、ProjectXP、ProjectRUP、ProjectPrince2)建模,这将专门化具有特定结构的项目,那么您可以使用泛化,但是 Project 和 Phase 将位于泛化端(带箭头的),而特定的 ProjectType 和 ProjectPhase 将位于专用端(没有箭头)。如果您遵循此方法,您将能够显示每个 ProjectType 的详细结构。有关详细信息,请参阅示例。还要注意如何使用一些额外的约束来更精确地定义如何理解建模系统的逻辑。最后请注意,在我的图表中,我假设每个项目和阶段都必须属于特定类型。你不能有这样的项目(不一定是真的),因此我把它们抽象了。 这里是某个ProjetType的项目。
另一种选择是使用 ProjectType 和 PhaseType 分别作为 Project 和 Phase 的属性,并在其他地方保留哪些类型应该在特定类型的 Project 中的逻辑。在这种情况下,您通常将 ProjectType 和 PhaseType 建模为枚举器,然后将它们作为属性分别放在 Project 和 Phase 中,将各自的元素与 Dependency 链接起来。 此处项目具有特定的 ProjetType。
注释
- 给定的选择不会创建完整的可能性列表。这只是两种最常用的方法。
- 您可以在同一模型中混合使用多种方法,具体取决于哪种方法更适合您的目的。然而,在 类 之间的这种依赖级别上,您经常会使用相同的方法,因为它会在图表上受益(参见示例)。
员工 - 项目关系
显然,Employee 到 Project 的分配仅通过 Phase 完成,因此直接关系是多余的。您最终可以将其描述为派生关系。
例子
特殊类型
本例使用第一种方法。请注意,我定义了准确的、特定类型的项目,而不是一些未定义的通用项目类型(与阶段相同)。
我在这个例子中完全省略了关于 Employee 和 Phase 之间关系的冗余信息。
枚举类型
此示例不提供有关特定类型结构的详细信息。您可能希望在此处添加额外的 类,为您的项目创建一个模板,以定义项目结构的外观(包括哪些阶段)。此 类 未显示在示例图中。 此外,我还添加了 Employee 和 Project 之间的直接派生关联。
我认为这是符合您要求的 class 图:
我对 Project/ProjectPhase 和 ProjectType/Phase 之间的组合关联进行了建模,因为一个项目由 ProjectPhases 组成,而 ProjectPhases 不能没有它们的项目而存在,ProjectType/Phase 也是如此。
Employees 和 ProjectPhases 既没有部分关系也没有存在依赖关系,因此组合关联在这里不合适。
在我的图表中,Employee 通过 ProjectPhases 隐式分配给 Projects,但如果您想强调 Employees 和 Projects 之间的关系,您很可能会明确地在这些 classes 之间建立关联。