#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. Да. Это определенно одно из моих любимых (сразу после аллегории пещеры Платона).