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

Fin*_*inn 5 c++ uml class-diagram c++-concepts

我将如何在 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>;

Run Code Online (Sandbox Code Playgroud)

然后是一个类:

template<Listable T>
class Liste {
    ...
    void add(T *data);
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*phe 6

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

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

  • 或者,您也可以将 C++ 概念作为 UML 中的一种泛型类型来处理。然后,您可以在类模板中模板参数的类型定义中以更具可读性的方式使用该概念。这会更方便阅读,并且更接近 C++ 的想法。问题是在 UML 中没有预见到定义这样的泛型类型。因此,您可以使用 and-hoc配置文件扩展 UML以使用«concept» 构造型。然后您将完全像类一样定义概念,使用UML 约束定义约束,并使用 UML类模板中的概念。

在这里,第二种方法会是什么样子。注意两个概念之间的实现依赖

在此处输入图片说明

  • 我喜欢第二种方式。可能会选择那个。 (2认同)