Диаграмма классов
Основные элементы
Пространства имён (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 | Ссылка на аватар | не требуется |
Форматированный текст
Тип данных | Описание | 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>> | Интерфейс |
<<enumeration>> | Перечисление |
<<abstract>> | Абстрактный класс |
<<tree_node>> | Иерархическая сущность |
<<map>> | Объект, отображаемый на карте |
<<categorized>> | Объект, связанный с иерархической категорией |
<<complex>> | Комплексный тип |
enumeration
Пример перечисления Status
:
abstract
Пример абстрактного класса Document
:
map
Сущность со стереотипом map
должна реализовывать интерфейс IGeoObject
:
Пример:
При генерации сущностей на основе схемы, если указанные поля отсутствуют, они будут добавлены автоматически.
tree_node
Указание стереотипа tree_node
означает, что класс наследует абстрактный класс TreeNode
.
Пример:
categorized
Сущность со с тереотипом categorized
должна реализовывать интерфейс ICategorized
:
Пример:
complex
Рекомендации по именованию
При наименовании классов, перечислений и других элементов модели придерживайтесь следующих правил:
-
Используйте CamelCase:
- Примеры:
MyEntity
,DemoObject
,InvoiceItem
- Примеры:
-
Аббревиатуры также оформляйте в CamelCase:
- Вместо
RGPObject
— пишитеRgpObject
- Вместо
-
Избегайте служебных или зарезервированных слов:
- Не используйте имена вроде:
System
,Service
,Class
,Interface
- Не используйте имена вроде:
-
Не используйте обобщённые имена без контекста:
- Не рекомендуется:
Request
,Response
,Task
,Object
- Допустимо:
RgpRequest
,RgpResponse
,RgpTask
,RgpObject
- Не рекомендуется: