Найти в Дзене

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

Диаграмма классов UML — это структурная диаграмма, которая показывает: Класс изображается прямоугольником, разделённым на три секции: +---------------------------+
| Название класса | ← Верхняя секция (обязательная)
+---------------------------+
| Атрибуты | ← Средняя секция
+---------------------------+
| Методы | ← Нижняя секция
+---------------------------+ Пример класса "Заказ": +---------------------------+
| Заказ |
+---------------------------+
| - номер: String |
| - дата: Date |
| - сумма: Float |
+---------------------------+
| + создать() |
| + отменить() |
| + рассчитатьСумму() |
+---------------------------+ Формат записи атрибутов: [видимость] имя [: тип] [кратность] [= значение_по_умолчанию] {свойства} Параметры атрибутов: Параметр - Обозначение - Пример - Описание Ви
Оглавление

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. Практические рекомендации

  1. Начинайте с ключевых классов, затем добавляйте детали
  2. Используйте абстрактные классы для общих характеристик
  3. Соблюдайте уровни детализации:
    Концептуальный уровень (без типов и видимости)
    Уровень спецификации (с типами, без реализации)
    Уровень реализации (полная детализация)
  4. Группируйте связанные классы с помощью пакетов
  5. Подписывайте важные ассоциации для ясности отношений

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