1

我是否应该将已删除的方法或成员函数放在 UML 类图中,例如,对于这样的类:

class ProfilometerManager
{
    int a = 6;
public:
    ProfilometerManager(ProfilometerManager& other) = delete; //can not be cloneable
    ProfilometerManager& operator=(const ProfilometerManager&) = delete; // can not be assignable
};
4

1 回答 1

1

UML 表示法不支持这种表示法。UML 规范定义了一种语法,=用于属性的默认值,但不用于操作(成员函数)。对于大多数读者来说,类图中操作后面的后缀= delete在语法上是不正确的和令人困惑的,即使 C++ 从业者会理解它。因此,您不应该使用这样的符号(如果将其视为实现细节,则更是如此)。

UML 没有以与 C++中相同的方式表达操作=delete缺失的内置方式:如果操作未在 UML 图上显示,则可能意味着它不存在或存在但根本不相关出于图表的目的。

在这方面,如果删除对您的设计至关重要:

  • 如果这种情况很少见,最简单的方法是在课堂上添加一个纯文本的注释。
  • 如果这在您的领域中很常见且很重要,您可以考虑在UML 配置文件中定义一个构造型,即.«Deleted»

如果不是删除单个成员函数对您的设计很重要,而是它们对类的影响(例如«not copiable»,正如Pepijn Kramer的评论所建议的那样),您最好用临时类原型来表达这一点。这将更具表现力,您可以将设计映射到实现规则,而不会迷失太多细节。

于 2021-12-19T18:58:37.550 回答