Перейти к основному содержимому

Диаграмма классов

Основные элементы​

Пространства имён (Namespace)​

Пространство имён используется для логической группировки связанных классов, во избежание конфликтов имён и для повышения читаемости модели. Оно не влияет на структуру классов, но помогает организовать большие модели по контекстам или модулям.

Пример:

Класс​

Класс — это базовый строительный блок объектно-ориентированной модели, определяющий структуру и поведение сущности. В UML он представляется прямоугольником, разделённым на три секции:

  • Имя класса — уникальное имя, описывающее сущность (например, User)
  • Наименование сущности — человеко-читаемое имя, используемое в интерфейсе
  • Атрибуты (свойства) — характеристики объекта
  • Методы (операции) — функции или действия, которые объект может выполнять

Пример:

Модификаторы доступа​

  • - — private (закрытый)
  • + — public (открытый, можно опускать)
  • # — protected (защищённый)

Атрибуты свойств​

Дополнительные характеристики, определяющие поведение или отображение свойства:

  • label — отображаемое имя
  • readonly — только для чтения
  • required — обязательное для заполнения

Пример:

string Title [label="Наименование", required]
string Name [readonly]

Типы и форматы данных​

Базовые типы​

Тип данныхОписаниеNullable-форма
intЦелое числоint?
float, double, decimalЧисло с плавающей точкойfloat?, double?, decimal?
stringСтрокане требуется
boolЛогическое значениеbool?

Примечание: Тип string допускает null по умолчанию, поэтому ? указывать не нужно.

Примеры:

int Age [label="Возраст", required]         // Обязательное целое число, по умолчанию = 0
bool Check // по умолчанию = false
bool? Confirm [label="Подтверждаю", required] // по умолчанию = null, необходимо выбрать true | false
int? Rating [label="Рейтинг"] // Необязательное целое число
string Comment [label="Комментарий"] // Необязательная строка (по умолчанию = null)

Рекомендации по числовым типам:

  • float — для приближённых значений (например, координаты, температура)
  • double — для повышенной точности без строгих требований
  • decimal — для денежных и финансовых расчётов

Ограничения значений​

Для строк (string):​

  • [minLength=10] — минимальная длина
  • [maxLength=255] — максимальная длина
string Name [label="Имя", minLength=3, maxLength=255, required]

Для целых чисел (int):​

  • [min=1] — минимальное значение
  • [max=100] — максимальное значение
int Age [label="Возраст", min=1, max=150, required]

Специализированные типы данных​

Массивы​

Тип данныхОписаниеNullable-форма
string_arrМассив строкне требуется
int_arrМассив чиселне требуется

Файлы и изображения (ссылки на filestorage)​

Тип данныхОписаниеNullable-форма
fileСсылка на файлне требуется
imageСсылка на изображениене требуется
avatarСсылка на аватарне требуется

Атрибуты типов file и image​

  • drive - диск
  • multiple - признак множественной загрузки

Форматированный текст​

Тип данныхОписаниеNullable-форма
markdownТекст в формате markdownне требуется
htmlТекст в формате htmlне требуется

Даты и время​

Тип данныхОписаниеNullable-форма
dateДатаdate?
datetimeДата и времяdatetime?
timeВремяtime?
yearГодyear?

Перечисления​

ТипНазначениеNullable-форма
enum ~Type~Перечислениеenum ~Type?~

Ссылки на объекты​

ТипНазначениеNullable-форма
ref ~Type~Ссылка на другую сущностьне требуется

Коллекции​

ТипНазначение
collection ~Type~Коллекция объектов указанного типа

Комплексные типы​

ТипНазначениеNullable-форма
LocationГеографические координатыне предусмотрена
AddressПочтовый адресне предусмотрена
DatePeriodПериод между датамине предусмотрена
DateTimePeriodПериод между датами с указанием временине предусмотрена
ConfigurablePropertyНастраиваемое полене предусмотрена

На текущий момент в Visary 9.0.0 комплексные типы должны создаваться по умолчанию.

Связи между классами​

Связь — линия между классами, показывающая их взаимодействие или зависимость.

Типы связей​

ТипОбозначениеНазначение
АссоциацияclassA --> classBОбщее отношение между классами
АгрегацияclassC o-- classDЧасть может существовать отдельно
КомпозицияclassE *-- classFЧасть не существует без целого
НаследованиеclassG <|-- classHНаследование поведения
РеализацияclassM <|.. classNКласс реализует интерфейс

Кратность связей​

Определяет, сколько экземпляров одного класса может быть связано с другим:

КратностьОписание
"1" -- "1"Один к одному
"1" -- "n"Один ко многим
"n" -- "n"Многие ко многим

Ассоциации (UI)​

OneToManyAssociation​

Отображение коллекции зависимых объектов на стороне основного объекта в пользовательском интерфейсе (UI).

OneToOneAssociation​

Отображение зависимого объекта (OneToOne) на стороне основного объекта в пользовательском интерфейсе (UI).

ManyToManyAssociation​

Отображение коллекции связанных объектов (ManyToMany) на стороне объектов в пользовательском интерфейсе (UI).

Специализации (стереотипы UML)​

Позволяют уточнить тип или поведение элементов модели.

Стандартные стереотипы​

СтереотипНазначение
<<interface>>Интерфейс
<<abstract>>Абстрактный класс
<<enumeration>>Перечисление

interface​

abstract​

Пример абстрактного класса Document:

enumeration​

Пример перечисления Status:

Прикладные стереотипы​

СтереотипНазначение
<<map>>Объект, отображаемый на карте
<<tree_node>>Иерархическая сущность
<<categorized>>Объект, связанный с иерархической категорией
<<complex>>Комплексный тип

map​

Сущность со стереотипом map должна реализовывать интерфейс IGeoObject:

Пример:

При генерации сущностей на основе схемы, если указанные поля отсутствуют, они будут добавлены автоматически.

tree_node​

Указание стереотипа tree_node означает, что класс наследует абстрактный класс TreeNode.

Пример:

categorized​

Сущность со стереотипом categorized должна реализовывать интерфейс ICategorized:

Пример:

complex​

Рекомендации по именованию​

При наименовании классов, перечислений и других элементов модели придерживайтесь следующих правил:

  1. Используйте CamelCase:

    • Примеры: MyEntity, DemoObject, InvoiceItem
  2. Аббревиатуры также оформляйте в CamelCase:

    • Вместо RGPObject — пишите RgpObject
  3. Избегайте служебных или зарезервированных слов:

    • Не используйте имена вроде: System, Service, Class, Interface
  4. Не используйте обобщённые имена без контекста:

    • Не рекомендуется: Request, Response, Task, Object
    • Допустимо: RgpRequest, RgpResponse, RgpTask, RgpObject