1. Основные элементы диаграммы классов
Диаграмма классов UML — это структурная диаграмма, которая показывает:
- Классы системы
- Их атрибуты и методы
- Взаимосвязи между классами
1.1 Графическое представление класса
Класс изображается прямоугольником, разделённым на три секции:
+---------------------------+
| Название класса | ← Верхняя секция (обязательная)
+---------------------------+
| Атрибуты | ← Средняя секция
+---------------------------+
| Методы | ← Нижняя секция
+---------------------------+
Пример класса "Заказ":
+---------------------------+
| Заказ |
+---------------------------+
| - номер: String |
| - дата: Date |
| - сумма: Float |
+---------------------------+
| + создать() |
| + отменить() |
| + рассчитатьСумму() |
+---------------------------+
2. Детализация элементов класса
2.1 Атрибуты класса
Формат записи атрибутов:
[видимость] имя [: тип] [кратность] [= значение_по_умолчанию] {свойства}
Параметры атрибутов:
Параметр - Обозначение - Пример - Описание
Видимость - +, -, #, ~-id: Integer - Уровень доступа
Тип - :Type цена: Float - Тип данных
Кратность - [min..max]товары[1..*] - Диапазон значений
Значение по умолчанию = value активен = true - Дефолтное значение
Свойства - {prop}{readOnly} - Дополнительные характеристики
2.2 Методы класса
Формат записи методов:
[видимость] имя([параметр: тип, ...]): возвращаемый_тип {свойства}
Примеры методов:
+ добавитьТовар - (товар: Товар, количество: Integer): Boolean
- проверитьНаличие - (): Boolean {guarded}
# рассчитатьСкидку - (клиент: Клиент): Float
3. Типы связей между классами
3.1 Основные виды связей
Тип связи - Обозначение - Пример
Ассоциация - ───── - Клиент ──── Заказ
Наследование - ───▷ - Животное ◁─── Собака -
Агрегация - ───◇ - Библиотека ◇── Книга
Композиция - ───◆ - Заказ ◆── Позиция
Зависимость - ╌╌> - Отчёт ╌╌> Форматтер
3.2 Подробное описание связей
Ассоциация:
- Простая связь между классами
- Может быть однонаправленной (со стрелкой) или двунаправленной
- Может включать кратность:
1 — ровно один
* — любое количество
0..1 — ноль или один
1..* — один или более
Пример:
[Клиент] "1" ───── "0..*" [Заказ]
Наследование:
- Отношение "родитель-потомок"
- Наследник получает все атрибуты и методы родителя
- Абстрактные классы обозначаются курсивом
Пример:
+----------------+
| Транспорт | (курсив)
+----------------+
^
|
+----------------+
| Автомобиль |
+----------------+
Агрегация и композиция:
- Оба типа — отношения "часть-целое"
- Агрегация (ромб пустой): часть может существовать без целого
- Композиция (ромб заполненный): часть не может существовать без целого
Примеры:
[Университет] ◇── [Факультет] (агрегация)
[Заказ] ◆── [ПозицияЗаказа] (композиция)
Зависимость:
- Пунктирная стрелка
- Показывает временное использование одного класса другим
Пример:
[Отчёт] ╌╌> [Форматтер]
4. Дополнительные элементы диаграмм
4.1 Интерфейсы
Изображаются как классы с пометкой «interface» или значком круга
+---------------------------+
| <<interface>> |
| Printable |
+---------------------------+
| + print(): void |
+---------------------------+
4.2 Перечисления (Enum)
+---------------------------+
| <<enumeration>> |
| СтатусЗаказа |
+---------------------------+
| НОВЫЙ |
| В_ОБРАБОТКЕ |
| ВЫПОЛНЕН |
| ОТМЕНЕН |
+---------------------------+
4.3 Примечания
Прямоугольник с загнутым углом, соединяется пунктиром с элементом
+---------------------------+
| Примечание: |
| Для VIP-клиентов |
| доступна экспресс-доставка|
+---------------------------+
:
:
+---------------------------+
| Клиент |
+---------------------------+
5. Практические примеры
5.1 Система электронной коммерции
+-------------+ +-------------+ +-------------+
| Клиент | | Заказ | | Товар |
+-------------+ +-------------+ +-------------+
| -id: String | | -номер: String| | -артикул: String|
| -имя: String| | -дата: Date | | -цена: Float |
| -email: String| | -статус: | | -наличие: |
+-------------+ | СтатусЗаказа| | Boolean |
| +-------------+ +-------------+
| | ^
| | |
| | |
v v |
+-------------+ +-------------+ |
| Адрес | | ПозицияЗаказа| |
+-------------+ +-------------+ |
| -город: String| | -количество: Integer| |
| -улица: String| | -сумма: Float | |
| -дом: String | +-------------+ |
+-------------+ | |
| |
v |
+-------------+ |
| Категория | <───────┘
+-------------+
| -название: String |
+-------------+
5.2 Пример с кратностями
[Библиотека] "1" ◇── "1..*" [Книга]
[Читатель] "1" ─── "0..*" [Книга]
[Читатель] "1" ─── "1..3" [Билет]
6. Практические рекомендации
- Начинайте с ключевых классов, затем добавляйте детали
- Используйте абстрактные классы для общих характеристик
- Соблюдайте уровни детализации:
Концептуальный уровень (без типов и видимости)
Уровень спецификации (с типами, без реализации)
Уровень реализации (полная детализация) - Группируйте связанные классы с помощью пакетов
- Подписывайте важные ассоциации для ясности отношений
Диаграммы классов UML остаются мощным инструментом проектирования программных систем, позволяя визуализировать сложные структуры данных и взаимодействия между компонентами системы.