Как представить типы строгих идентификаторов на основе шаблонов, псевдонимы типов и структуры данных в диаграмме классовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как представить типы строгих идентификаторов на основе шаблонов, псевдонимы типов и структуры данных в диаграмме классов

Сообщение Anonymous »

Я создаю диаграмму классов UML для проекта C++ и хочу правильно представить строго типизированные идентификаторы, реализованные с помощью шаблонов и псевдонимов типов, а также простые структуры данных (), используемые в качестве объектов домена[/b].
В коде идентификаторы реализованы с использованием шаблона на основе тегов для обеспечения безопасности типов:

Код: Выделить всё

template 
class Id {
// some fields
};

struct AxisIdTag {};
struct RunIdTag  {};
struct ReportIdTag {};
struct RecordIdTag {};

using AxisId   = Id;
using RunId    = Id;
using RecordId = Id;
using ReportId = Id;
Существуют также обычные типы доменов, такие как перечисления и структуры данных:

Код: Выделить всё

enum class ErrorCode {
// some fields
};

struct Error {
ErrorCode code{};
std::string summary;
std::optional details;
std::optional axisId;
std::optional runId;
std::chrono::system_clock::time_point timestamp;
};
Цель диаграммы
Цель диаграммы классов — не отразить синтаксис C++ однозначно, а сообщить о замысле проекта:
  • что AxisId, RunId и т. д. являются отдельными идентификаторами домена,
  • которые все они основаны на общей абстракции Id,
  • безопасность типов является преднамеренной частью дизайна,
  • и что некоторые типы (например, Error) предназначены для использования в качестве носителей данных/подобных значениям объектов домена.
Я понимаю, что в UML нет прямого понятия C++ с использованием псевдонимов или специальную конструкцию struct, и что некоторые из этих элементов являются деталями реализации. Однако мне бы хотелось, чтобы диаграмма отражала концептуальную модель как можно точнее.
Вопрос
Каков идиоматический или общепринятый способ представления следующего на диаграмме классов UML?
  • Типы строгих идентификаторов на основе шаблонов, такие как Id
  • Псевдонимы типов, такие как AxisId, RunId и т. д.
  • Обычные структуры данных (), которые в первую очередь действуют как неизменяемые или полунеизменяемые носители данных.
Например:
  • Должен ли Id отображаться как класс шаблона с привязками к шаблону?
  • Должны ли AxisId, RunId и т. д. моделироваться как специализации шаблона, стереотипы (например, ) или опущено и задокументировано в примечаниях?
  • Должна ли структура Error моделироваться точно так же, как класс UML, или аннотироваться стереотипом, таким как или , ?
  • Существует ли предпочтительный способ сбалансировать ясность модели предметной области и перегрузить диаграмму реализацией, специфичной для C++ подробности?
Для справки, вот часть диаграммы, над которой я сейчас работаю: image / PlantUML на Pastebin
Я был бы признателен за рекомендации о том, разумно ли этот подход передает предполагаемый дизайн, и какие альтернативы могут быть более ясными или более идиоматичными в UML.

Подробнее здесь: https://stackoverflow.com/questions/798 ... a-structur
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»