【问题标题】:How can I draw C++ concepts in UML class diagram?如何在 UML 类图中绘制 C++ 概念?
【发布时间】:2020-09-17 18:28:36
【问题描述】:

如何在 UML 类图中绘制 C++ 概念?

具体来说,我有以下代码:

template<typename T>
concept Printable = requires(T a, std::ostream &where) {
    { where << a };
};

template<typename T>
concept Identifiable = requires(T a) {
    { a.getId() } -> std::convertible_to<std::string>;
};

template<typename T>
concept Listable = Identifiable<T> && Printable<T>;

然后是一个类:

template<Listable T>
class Liste {
    ...
    void add(T *data);
    ...
}

如果它是一个常规模板,我会将T 放在班级角落的一个正方形中。但是这些概念呢?

【问题讨论】:

  • 不是我的领域,但我认为您可以简单地在模板绑定中放置一个约束。

标签: c++ uml class-diagram c++-concepts


【解决方案1】:

C++ concepts 定义了与模板类关联的类型的约束:

  • 由于 UML 支持 class template,因此您通常会在大括号之间用自然语言或 OCL 将 constraints 表示为它的参数。前者在早期设计阶段是完美的。但是,如果您需要这种级别的准确性,您也可以考虑使用与 C++ 相同的语法而不是自然语言来务实地表达它。

  • 另外,您也可以将 C++ 概念作为 UML 中的一种泛型类型来处理。然后,您可以在类模板中模板参数的类型定义中以更易读的方式使用该概念。这会更方便阅读,更接近 C++ 的思想。问题是在 UML 中没有预见到定义这样的泛型类型。因此,您可以使用临时 profile 扩展 UML 以使用 «concept» stereotype。然后,您将定义与类完全相同的概念,使用 UML constraints 定义约束,并使用 UML class templates 中的概念。

在这里,第二种方法的外观如何。注意两个概念之间的实现dependency

【讨论】:

  • 我喜欢第二种方式。可能会和那个一起去。
  • 只是一点注释:类没有在图表中定义,但它们在图表中呈现。
  • @qwerty_so 确实如此。我们甚至可以提醒,在类图中,您看不到任何类……只有类的表示;-) 但这种说法只是对马格利特著名艺术作品"the treachery of images" 的苍白模仿;-)跨度>
  • 是的。这绝对是我的最爱之一(就在柏拉图的洞穴寓言之后)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多