繁体   English   中英

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

[英]How can I describe a pointer to class in a UML class diagram?

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

class A {
private:
    B* attribute;
public:
    void method(B* par);
}

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

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

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

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

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

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

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

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

在此输入图像描述

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

在此输入图像描述

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

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

  1. 它是特定于Cpp的,而您的图应该可能与平台无关;
  2. 在UML中不需要使用这样的符号,因为很明显该属性引用了B对象;
  3. 这个符号在UML中具有不同的含义(多重无界 )。

在任何情况下,类A和B之间的关系是关联。 如果您具有聚合组件关系的附加语义,它可能是一个组合。 请注意,您的问题应该措辞:“它是什么样的联系?” 而不是“它是什么样的组成?” 因为组合和聚合是特殊类型的关联。

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

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

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

在此输入图像描述

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM