如何在 UML 中表示 2 类 相互引用?
How to represent 2 classes with references to each other in UML?
我试图在 UML 图中表示我的程序。我有 2 类 如下:
Mesh.h
class Mesh
{
public:
Mesh();
~Mesh();
VertexArrayObject* vao;
};
VertexArrayObject.h
class VertexArrayObject
{
public:
VertexArrayObject(Mesh* mesh);
~VertexArrayObject();
Mesh* mesh;
};
我想象它会画成这样:
然而,这看起来根本不对。如何最好地表示 类 使用 UML 相互引用的关系?
没有。那是完全错误的。复合聚合只能在一侧。 (想象一下 car/wheel 示例:每个人都聚集另一个人是无稽之谈。)移除钻石,您就完成了。
你可以走得更远,用圆点代替菱形。这意味着双方都有引用另一方 class 的属性。参见 。
这在很大程度上取决于您要表示的逻辑结构。您可以通过多种方式指定 Mesh 和 Vertex 之间的关系并传达信息;我从您发布的模型中了解到,您认为构图可能是关系的一个重要方面,例如顶点是网格的复合部分(反之亦然)。
在 UML 中,你不能真正拥有双向组合,因为这会导致逻辑悖论——即您不能同时拥有两个 类,它们同时是彼此的复合部分。如果成分很重要,那么您将需要选择哪个由哪个组成。
考虑到我对 3D 的(贫乏)理解(我想这就是你的程序的目的),我假设网格包含一个顶点集合,因此合成将从顶点类型 运行 到网格末端带有实心菱形的网格类型。您可能还想添加多重性(这样很明显网格内可能存在多个顶点)并且还要考虑关系是复合关系还是共享聚合(顶点可以存在于网格外吗?如果是共享聚合(白色需要钻石)。
您可能不需要表示从网格到顶点的关系,因为这是可以在 UML 中安全抽象的实现细节。您使用指向数组的指针这一事实可能与 Mesh 由许多 Vertex 组成的逻辑无关。
就是说,如果您确实想在代码中精确指定您拥有的内容,那么这可以在 UML 中完成。我建议从 Vertex 中抽象出 Vertex 数组——代码中有三种逻辑类型——Mesh、Vertex 和 VertexArray。您可能会说明 Mesh 与 VertexArray 具有基本关联(使用箭头标识参考方向),而这又由 Vertex(VertexArray 末端的黑色菱形)组成。
当然,我假设 VertexArray 表示 Vertex 对象的数组,而不是单个 Vertex!
我试图在 UML 图中表示我的程序。我有 2 类 如下:
Mesh.h
class Mesh
{
public:
Mesh();
~Mesh();
VertexArrayObject* vao;
};
VertexArrayObject.h
class VertexArrayObject
{
public:
VertexArrayObject(Mesh* mesh);
~VertexArrayObject();
Mesh* mesh;
};
我想象它会画成这样:
然而,这看起来根本不对。如何最好地表示 类 使用 UML 相互引用的关系?
没有。那是完全错误的。复合聚合只能在一侧。 (想象一下 car/wheel 示例:每个人都聚集另一个人是无稽之谈。)移除钻石,您就完成了。
你可以走得更远,用圆点代替菱形。这意味着双方都有引用另一方 class 的属性。参见
这在很大程度上取决于您要表示的逻辑结构。您可以通过多种方式指定 Mesh 和 Vertex 之间的关系并传达信息;我从您发布的模型中了解到,您认为构图可能是关系的一个重要方面,例如顶点是网格的复合部分(反之亦然)。
在 UML 中,你不能真正拥有双向组合,因为这会导致逻辑悖论——即您不能同时拥有两个 类,它们同时是彼此的复合部分。如果成分很重要,那么您将需要选择哪个由哪个组成。
考虑到我对 3D 的(贫乏)理解(我想这就是你的程序的目的),我假设网格包含一个顶点集合,因此合成将从顶点类型 运行 到网格末端带有实心菱形的网格类型。您可能还想添加多重性(这样很明显网格内可能存在多个顶点)并且还要考虑关系是复合关系还是共享聚合(顶点可以存在于网格外吗?如果是共享聚合(白色需要钻石)。
您可能不需要表示从网格到顶点的关系,因为这是可以在 UML 中安全抽象的实现细节。您使用指向数组的指针这一事实可能与 Mesh 由许多 Vertex 组成的逻辑无关。
就是说,如果您确实想在代码中精确指定您拥有的内容,那么这可以在 UML 中完成。我建议从 Vertex 中抽象出 Vertex 数组——代码中有三种逻辑类型——Mesh、Vertex 和 VertexArray。您可能会说明 Mesh 与 VertexArray 具有基本关联(使用箭头标识参考方向),而这又由 Vertex(VertexArray 末端的黑色菱形)组成。
当然,我假设 VertexArray 表示 Vertex 对象的数组,而不是单个 Vertex!