Диаграммы классов описывают структуру системы: сущности (классы), их атрибуты, методы и отношения между ними. Они полезны для документирования структуры данных, схем API и архитектуры приложения.
Базовый синтаксис
classDiagram
class Task {
+String id
+String title
+String status
+Date createdAt
+assign(userId: String)
+complete()
}

Атрибуты и методы
Модификаторы доступа
| Символ | Доступ |
|---|---|
+ | public |
- | private |
# | protected |
~ | package/internal |
classDiagram
class User {
+String id
+String email
-String passwordHash
#String tenantId
+getProfile() Profile
-hashPassword(plain: String) String
#checkPermission(action: String) bool
}
Типизация
Тип указывается перед именем, возвращаемый тип — через TypeName:
classDiagram
class Repository {
+findById(id: String) Task
+findAll(filter: Filter) Task[]
+create(data: CreateDTO) Task
+update(id: String, data: UpdateDTO) Task
+delete(id: String) void
}
Абстрактные и статические члены
classDiagram
class BaseRepository {
<<abstract>>
+findById(id: String)*
+findAll()*
$create(data)*
}
* — абстрактный метод, $ — статический.
Отношения
| Синтаксис | Тип отношения |
|---|---|
| `A — | > B` |
| `A .. | > B` |
A --> B | Ассоциация |
A --* B | Композиция |
A --o B | Агрегация |
A .. B | Зависимость |
classDiagram
Animal <|-- Dog
Animal <|-- Cat
Animal : +String name
Animal : +makeSound()*
class Dog {
+String breed
+makeSound()
}
class Cat {
+bool isIndoor
+makeSound()
}

Кардинальность
classDiagram
Project "1" --> "many" Task : содержит
Task "many" --> "1" User : назначена
User "1" --> "many" Project : участвует
Интерфейсы и перечисления
classDiagram
class Serializable {
<<interface>>
+serialize() String
+deserialize(data: String)
}
class TaskStatus {
<<enumeration>>
BACKLOG
IN_PROGRESS
REVIEW
DONE
}
class Task {
+TaskStatus status
+serialize() String
+deserialize(data: String)
}
Serializable <|.. Task
Task --> TaskStatus
Аннотации (стереотипы)
classDiagram
class UserController {
<<Controller>>
+createUser(req: Request) Response
+getUser(id: String) Response
}
class UserService {
<<Service>>
+createUser(data: CreateDTO) User
+findById(id: String) User
}
class UserRepository {
<<Repository>>
+save(user: User) User
+findById(id: String) User
}
UserController --> UserService
UserService --> UserRepository
Пример: архитектура FlowEra
classDiagram
class Flow {
+String id
+String name
+String tenantId
+String statusModelId
+createTask(data: CreateTaskDTO) Task
+getTasks(filter: Filter) Task[]
}
class Task {
+String id
+String flowId
+String title
+String status
+Properties properties
+assign(userId: String)
+updateStatus(status: String)
}
class StatusModel {
+String id
+String name
+StatusDef[] statuses
+getStatus(label: String) StatusDef
+isValidTransition(from: String, to: String) bool
}
class StatusDef {
+String label
+String category
+String color
}
class FieldTemplate {
+String id
+String flowId
+String name
+FieldType type
+bool required
+validate(value: any) bool
}
Flow "1" --* "many" Task : содержит
Flow --> StatusModel : использует
StatusModel "1" --* "many" StatusDef
Flow "1" --> "many" FieldTemplate : определяет
