繁体   English   中英

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

[英]How can I draw C++ concepts in UML class diagram?

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

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

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

在此处输入图片说明

暂无
暂无

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

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