如何在UML类图中描述指向类的指针?

时间:2014-02-16 21:12:31

标签: c++ oop pointers uml

如果我有一个class A,其中包含一个指向class B的指针,以及一个输入指向class B

的指针的方法
class A {
private:
    B* attribute;
public:
    void method(B* par);
}

如何在UML类图中描述它?我要用*吗?它是什么样的成分?

3 个答案:

答案 0 :(得分:17)

在UML中,显示它是否是指针并不重要。为什么?因为,您可能正在使用UML来描述没有指针的语言的OOD。

快速回答:从您的代码中,A聚合B(A类空白钻石,用实线连接B)。那是因为没有析构函数可以删除 A.attribute 指针引用的内容。

真正重要的是说引用对象的生命周期是什么。因此,对于在销毁所有者时死亡的引用对象(具有关系),您必须使用实心(填充)菱形。这称为组合。因此,所有者必须管理所拥有对象的生命周期。一个这样的例子是人类有手。当人类物体被摧毁时,手不能存活。

钻石未填充(聚合)时,所有者不负责管理所拥有对象的生命周期。例如,您不希望在析构函数中看到所拥有的对象被删除。雇主有一个TeamLeadRole,但当雇主被“摧毁”(即离开公司)时,TeamLeadRole仍然可用。

现在,传统上当你看到一颗填充的钻石时,你通常(并不是所有的时间)都会有一个物体。当你看到空钻石时,你可以使用参考或指针。

如果您的类使用另一个类但不保留该类的实例(或引用/指针),那么您可以通过对象之间的简单线(实线)来表示依赖性。这意味着存在一种称为关联的关系。

答案 1 :(得分:3)

普通的C ++指针直接对应于UML类图中的引用属性,如下图所示:

enter image description here

这样的引用属性表示单向(二进制)关联,如下图所示:

enter image description here

注意关联线B侧的“点”。这意味着名称为“attribute”的关联结束由类A拥有,这意味着它对应于上图中显示的引用属性(关联可以用引用属性替换)。有关详细说明,请参阅此tutorial的第5章。

您不能在UML类图中使用C ++符号“*”,因为

  1. 它是特定于Cpp的,而您的图表应该可能与平台无关;
  2. 不需要在UML中使用这样的符号,因为很明显该属性引用了B对象;
  3. 此符号在UML中具有不同的含义(多重无界)。
  4. 在任何情况下,A类和B类之间的关系都是一种关联。如果您具有聚合组件关系的附加语义,它可能是一个组合。请注意,您的问题应该措辞:“它是什么样的联系?”而不是“它是什么样的组成?”因为组合和聚合是特殊类型的关联。

答案 2 :(得分:2)

有可能区别*,&和UML类图上的[]字段。它被命名为“类型修饰符”。问题是在工具图上显示它。如果你有一个图表工具,只需在最后绘制它作为结尾的刻板印象。但要注意不要将其与多重性混合!如果你有一个建模工具,你将不得不看看如何做到这一点。

但请注意,指针/引用字段应该是默认字段,因此您无需在类图中真正指定您的情况。

如果要以正确的方式显示此信息,请使用更详细的复合结构图。你可以在那里展示这些&,*,[]。

enter image description here

对于类图中不同的关联变体,请查看以下类似问题的答案: https://stackoverflow.com/a/21478862/715269