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

问题描述

我如何在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++ concepts定义了与模板类关联的类型的约束:

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

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

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

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...