Как я могу нарисовать концепции C на диаграмме классов UML?

#c #uml #class-diagram #c -concepts

#c #uml #диаграмма классов #c -концепции

Вопрос:

Как бы я нарисовал концепции C на диаграмме классов UML?

В частности, у меня есть следующий код:

 template<typename T>
concept Printable = requires(T a, std::ostream amp;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> amp;amp; Printable<T>;

  

а затем класс:

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

Если бы это был обычный шаблон, я бы просто поместил T его в квадрат в углу класса. Но как насчет концепций?

Комментарии:

1. Не моя область, но я думаю, вы можете просто поместить ограничение вдоль привязки вашего шаблона.

Ответ №1:

Концепции C определяют ограничения на типы, связанные с шаблонным классом:

  • Поскольку UML поддерживает шаблон класса, вы обычно выражаете эти ограничения для его параметров в фигурных скобках либо на естественном языке, либо на OCL. Первый вариант идеален на ранней стадии проектирования. Но вы могли бы также рассмотреть возможность прагматического выражения его с использованием того же синтаксиса, что и C , вместо естественного языка, если вам нужен этот уровень точности.

  • Кроме того, вы можете также обрабатывать концепцию C как своего рода универсальный тип в UML. Затем вы могли бы использовать концепцию в гораздо более удобочитаемом виде в определении типа параметров шаблона в шаблонах классов. Это было бы удобнее для чтения и ближе к идее C . Проблема в том, что в UML ничего не предусмотрено для определения таких общих типов. Поэтому вы можете расширить UML с помощью профиля and-hoc для использования «concept» стереотипа. Затем вы должны определить концепции точно так же, как классы, определить ограничения, используя ограничения UML, и использовать концепции в шаблонах классов UML.

Вот как будет выглядеть второй подход. Обратите внимание на зависимость реализации между двумя концепциями:

введите описание изображения здесь

Комментарии:

1. Мне нравится второй способ. Вероятно, пойдет с этим.

2. Просто небольшая аннотация: классы не определены на диаграммах, но они представлены там.

3. @qwerty_so Действительно. Мы могли бы даже напомнить, что на диаграмме классов вы не видите никакого класса… только представления классов 😉 Но это утверждение было бы лишь бледной имитацией знаменитого произведения Магритта «коварство образов» 😉

4. Да. Это определенно одно из моих любимых (сразу после аллегории пещеры Платона).