【问题标题】:Should I put deleted member function in uml class diagram?我应该将删除的成员函数放在 uml 类图中吗?
【发布时间】:2022-01-21 14:11:08
【问题描述】:

我是否应该将deleted method or member function 放在 UML 类图中,例如,对于这样的类:

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

【问题讨论】:

  • 它基于意见,我通常做的是定义一个基类 NonCopyable 并在我的图表中使用它。或者我添加一个角色 > 并将其放入。理由:NonCopyable 是一个可重用的概念(如 >)。注意我也会从 NonCopyable 的代码中派生 ProfilemeterManager
  • 谢谢 :) 我如何将您的评论标记为答案?
  • @PepijnKramer 它根本不是基于意见的:该表示法不符合 UML 语法。但我支持您定义刻板印象以识别相关概念的想法,无论是在类还是在功能级别。
  • 因为问题是关于在 UML 类图中显示已删除的成员,并且由于 UML 2.5.1 规范非常明确地说明了这是否可行并与 UML 语法兼容,所以我投票重新打开这个题。这不是基于意见的,我会邀请近距离投票者查阅 UML 规范的第 9 章以找出原因。
  • @Christophe 也许我当时措辞错误,我知道它不是标准的 UML,所以这就是为什么我认为我的答案是一种意见。刻板印象是我一直在寻找的词。

标签: c++ uml class-diagram deleted-functions


【解决方案1】:

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

UML 没有像 C++ 中的 =delete 那样表达缺少 操作 的内置方法:如果 UML 图上未显示操作,则可能意味着它不存在或存在但与图表的目的无关。

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

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

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

【讨论】:

  • 完美答案。我还有一个额外的建议:您可以重新定义操作并将其设为私有。
猜你喜欢
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多