Медиаблог /

Что такое диаграмма классов UML: структура, отношения и примеры построения

17 сентября 2026

Что такое диаграмма классов UML: структура, отношения и примеры построения

Диаграмма классов UML (Unified Modeling Language — унифицированный язык моделирования) — статическая структурная схема, описывающая классы программной системы, их атрибуты, методы и отношения между ними. Строится до написания кода и служит архитектурным чертежом будущей системы.

Архитектор рисует диаграмму классов UML на доске

Без предварительного проектирования объектно-ориентированный код быстро превращается в «спагетти»: зависимости размножаются хаотично, изменение одного класса ломает несколько других. Диаграмма классов позволяет выявить эти проблемы на этапе проектирования — до того, как они уйдут в продакшн.

image

Учитесь бесплатно за счёт государства

Экономия до 100 000 ₽ на любой программе

Выбрать курс

В статье разберём все элементы нотации — от трёхсекционного прямоугольника до кратности, — рассмотрим шесть типов связей, построим рабочий пример диаграммы классов UML для интернет-магазина и дадим советы по выбору инструментов.

Что такое диаграмма классов UML и зачем она нужна

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

Применяют её в двух основных контекстах. Первый — концептуальное моделирование предметной области: аналитик описывает сущности реального мира (Клиент, Заказ, Товар) без привязки к языку программирования. Второй — проектирование объектно-ориентированных систем: архитектор расставляет классы, интерфейсы и иерархии наследования до того, как разработчики начнут писать код на Java, C# или C++.

Если задача — описать только структуру базы данных, подойдёт ER-диаграмма (Entity-Relationship Diagram, диаграмма «сущность — связь»). Как только появляются операции над данными — диаграмма классов предпочтительнее: она фиксирует методы и поддерживает полный набор объектно-ориентированных отношений.

Диаграмма классов отвечает на вопрос «что есть в системе». Динамику — в каком порядке объекты обмениваются сообщениями — показывают диаграммы последовательности и кооперации. Статика и динамика вместе дают полную архитектурную картину.

Основные элементы диаграммы классов UML

Диаграмма строится из трёх видов строительных блоков: классов, атрибутов и методов. Каждый класс — прямоугольник с тремя горизонтальными секциями. Классы соединяются шестью типами отношений — о них подробнее в следующем разделе.

Класс: структура и типы

Класс изображается прямоугольником с тремя секциями:

  • верхняя — имя класса (полужирный шрифт, стиль именования PascalCase — каждое слово с заглавной буквы);
  • средняя — атрибуты (данные, которые хранит класс);
  • нижняя — методы (операции, которые класс выполняет).

Класс Customer в UML: секции имени, атрибутов и методов

Стандарт UML выделяет четыре разновидности. Обычный класс — базовый вариант, от которого создают объекты. Абстрактный — имя записывается курсивом; объекты от него не создаются, он служит базой для подклассов. Статический (utility-класс) — все члены принадлежат классу, а не объектам; имена членов подчёркиваются. Интерфейс — обозначается стереотипом «interface» над именем в двойных угловых скобках; содержит только сигнатуры методов без реализации.

Атрибуты: формат нотации и классификация

Полная запись атрибута в нотации UML:

видимость имя : тип [кратность] = значение_по_умолчанию

Пример: — balance : Integer [1] = 0

Обязательные части — видимость и имя. Тип, кратность и значение по умолчанию добавляют по необходимости.

UML различает шесть видов атрибутов: простой (одно значение), составной (несколько компонентов, например адрес), однозначный (ровно одно значение), многозначный (коллекция значений), хранимый (сохраняется явно) и производный (вычисляется из других атрибутов — перед именем ставится /).

Методы: синтаксис и параметры

Синтаксис метода:

видимость имя(параметры) : тип_возврата

Пример: + calculateTotal(taxRate : Float) : Double

Методы именуются глаголом в стиле camelCase (строчная буква в начале, каждое последующее слово — с заглавной). На ранних этапах проектирования стандартные геттеры и сеттеры не детализируют — диаграмма должна передавать смысл архитектуры, а не дублировать будущий код.

Квантор видимости: четыре уровня доступа

Квантор видимости (модификатор доступа) определяет, из какого кода можно обратиться к атрибуту или методу. Он реализует принцип инкапсуляции — один из основополагающих принципов объектно-ориентированного программирования.

Стандарт UML определяет четыре уровня: + (public) — доступен из любого класса; − (private) — только внутри самого класса; # (protected) — внутри класса и всех его наследников; **~ (package)** — для классов того же пакета, аналог internal в C#. В отличие от Java и C#, UML не задаёт значение видимости по умолчанию — квантор указывают явно для каждого атрибута и метода.

Квантор видимости UML: символы плюс минус решётка тильда

Квантор видимости и проектирование на основе диаграмм — ежедневный инструментарий системного аналитика. Освоить UML-нотацию с нуля можно бесплатно в рамках нацпроекта «Кадры»: программа «Системный аналитик: с нуля до проектирования систем» (72 часа, онлайн) открыта для записи — подробности в каталоге программ.

Связи в диаграмме классов UML: шесть типов

Отношения — смысловое ядро диаграммы. Они показывают, как классы зависят друг от друга. Три из шести типов образуют иерархию по степени «сцепленности»: Ассоциация включает Агрегацию, а Агрегация — частный случай более сильной Композиции.

Тип
Символ
Жизненный цикл части
Пример
Ассоциация → сплошная стрелка Независимый Студент → Курс
Агрегация ◇→ незакрашенный ромб Независимый Отдел ◇→ Преподаватель
Композиция ◆→ закрашенный ромб Зависит от целого Дом ◆→ Комната
Наследование ——▷ незакрашенный треугольник Собака ——▷ Животное
Реализация — — ▷ пунктир + треугольник PayPal — — ▷ Payment
Зависимость — — → пунктирная стрелка Report — — → Formatter

Ассоциация и зависимость

Ассоциация — наиболее общий тип связи: один класс использует другой. Изображается сплошной стрелкой от класса-пользователя к классу, предоставляющему функциональность. Стрелку принято именовать глаголом: «создаёт», «управляет», «содержит». Кратность указывается рядом с концами стрелки.

Двунаправленная ассоциация — антипаттерн: она нарушает принцип единственной ответственности и порождает «спагетти»-зависимости. Если связь можно сделать однонаправленной — делают.

Зависимость — более слабое отношение, изображается пунктирной стрелкой. Если класс A зависит от класса B — изменение B может потребовать изменения A, но постоянной ссылки нет: например, метод принимает B как параметр или создаёт его локально.

Агрегация против Композиции: в чём разница

Ключевой критерий разграничения — жизненный цикл части относительно целого.

Агрегация (◇ — незакрашенный ромб на стороне целого): часть существует независимо. Закрыли отдел — преподаватели продолжают работать в других подразделениях. Сняли колесо с автомобиля — колесо никуда не исчезло.

Композиция (◆ — закрашенный ромб): части неотделимы от целого и уничтожаются вместе с ним. Снесли дом — комнат больше нет. Закрыли окно в графическом интерфейсе — кнопки внутри него исчезли вместе с ним.

Критерий
Агрегация
Композиция
Символ ◇ незакрашенный ромб ◆ закрашенный ромб
Жизненный цикл части Независимый Зависит от целого
Уничтожение целого Часть выживает Часть уничтожается
Пример целое → часть Отдел → Преподаватель Дом → Комната
Характер владения «Мягкое» (временное) «Жёсткое» (полное)

Наследование и реализация

Наследование — отношение «является» (is-a): подкласс наследует атрибуты и методы суперкласса и может расширять или переопределять их. Изображается сплошной линией с незакрашенным треугольником, направленным к суперклассу: Dog ——▷ Animal. Глубокие цепочки наследования (более трёх уровней) ухудшают читаемость — в таких случаях предпочтительна композиция.

Реализация — отношение между конкретным классом и интерфейсом. Изображается пунктирной линией с треугольником, направленным к интерфейсу. Аналог ключевого слова implements в Java и : IInterface в C#. Конкретный класс обязуется реализовать все сигнатуры, объявленные в интерфейсе.

Кратность в диаграмме классов UML

Кратность (в ряде источников — множественность) показывает, сколько объектов одного класса может участвовать в отношении с объектом другого класса. Записывается рядом с концами стрелки связи.

Запись
Расшифровка
Пример применения
[1] Ровно один Заказ принадлежит ровно одному покупателю
[0..1] Ноль или один Пользователь может не иметь аватара
[0..*] Ноль или любое количество Клиент — ноль или более заказов
[1..*] Один или более Заказ — хотя бы одна позиция
[m..n] От m до n включительно Команда — от 2 до 10 участников

Для статических классов кратность не указывается — объекты от них не создаются. В реализациях на Java и C# многозначные атрибуты часто передают через типизированные коллекции List<T> или Map<K, V>, что делает явное указание кратности в атрибуте избыточным.

Построение диаграммы классов UML: пример интернет-магазина

Чтобы закрепить нотацию, построим пример диаграммы классов для упрощённого интернет-магазина. Система включает шесть классов: Customer, Order, OrderItem, Product, Payment, а также два подкласса платёжных методов — CreditCardPayment и PaypalPayment.

Пример диаграммы классов UML: Customer, Order, Product и Payment

Начнём с атрибутов и методов. Customer хранит — name : String и — email : String; метод + placeOrder() : Order. Order содержит — orderId : Integer и — status : String; метод + calculateTotal() : Double. Product хранит — productId : Integer, — name : String, — price : Double.

Расставим отношения:

  • Customer — Order: ассоциация 1 → 0..*, один клиент создаёт ноль или более заказов.
  • Order — OrderItem: композиция, позиции заказа не существуют без самого заказа.
  • OrderItem → Product: ассоциация, позиция ссылается на товар.
  • CreditCardPayment и PaypalPayment наследуют абстрактный класс Payment.

Ниже — код в формате PlantUML — текстового инструмента для генерации UML-схем с экспортом в PNG и SVG:

@startuml

class Customer {

— name : String

— email : String

+ placeOrder() : Order

Хотите сменить профессию или повысить квалификацию?

Федеральный проект «Активные меры содействия занятости» даёт возможность пройти обучение бесплатно за счёт государства

  • Программы от ведущих вузов России — от 2 месяцев
  • Удостоверение или диплом установленного образца
  • Центр карьеры: 7 500+ вакансий, помощь с трудоустройством
Оставить заявку
image

}

class Order {

— orderId : Integer

— status : String

+ calculateTotal() : Double

}

class OrderItem {

— quantity : Integer

— unitPrice : Double

}

class Product {

— productId : Integer

— name : String

— price : Double

}

abstract class Payment {

— amount : Double

+ process() : Boolean

}

class CreditCardPayment {

— cardNumber : String

+ process() : Boolean

}

class PaypalPayment {

— paypalEmail : String

+ process() : Boolean

}

Customer «1» —> «0..*» Order : places

Order «1» *— «1..*» OrderItem : contains

OrderItem —> «1» Product

Order —> «1» Payment

CreditCardPayment —|> Payment

PaypalPayment —|> Payment

@enduml

Скопируйте код на plantuml.com или вставьте в расширение для VS Code — схема отрисуется автоматически.

Инструменты и лучшие практики построения диаграмм

Для создания диаграмм классов доступны инструменты двух типов.

Текстовые («диаграмма как код»): PlantUML и Mermaid (встроена в Markdown, совместима с GitHub и GitLab). Текстовое описание хранится в репозитории рядом с кодом и обновляется в том же наборе изменений, что и сама программа.

Визуальные: draw.io — бесплатный онлайн-редактор без регистрации, работает прямо в браузере. Visual Paradigm — коммерческий инструмент с поддержкой генерации диаграммы по текстовому описанию системы через встроенный искусственный интеллект.

Пять практик, которые улучшат диаграмму:

  1. Единственная ответственность. Если описание класса требует союза «и» — скорее всего, нужно два класса.
  2. Разбивать на пакеты. Диаграмма с 30+ классами нечитаема — делите систему на несколько диаграмм по модулям.
  3. Предпочитать композицию наследованию. Глубокие иерархии наследования хрупки при изменениях требований.
  4. Соблюдать нотацию. PascalCase — для имён классов, camelCase — для атрибутов и методов.
  5. Хранить диаграммы в коде. Это позволяет отслеживать изменения через историю версий.

Часто задаваемые вопросы

Что такое диаграмма классов UML?

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

В чём разница между агрегацией и композицией в UML?

Ключевое различие — жизненный цикл части. Агрегация (◇): часть существует независимо — закрыли отдел, преподаватели остались. Композиция (◆): части уничтожаются вместе с целым — снесли дом, комнат больше нет. Визуально: незакрашенный ромб против закрашенного на стороне класса-целого.

Что такое квантор видимости и какие значения он принимает?

Квантор видимости определяет доступность атрибута или метода: + (public — любой класс), − (private — только внутри), # (protected — класс и наследники), ~ (package — в пределах пакета). В UML нет значения по умолчанию — указывается явно для каждого элемента.

Как обозначается наследование на диаграмме классов?

Наследование — сплошная линия с незакрашенным треугольником, направленным к суперклассу. Подкласс наследует атрибуты и методы родителя. Пример: Dog ——▷ Animal. При глубоких цепочках наследования читаемость снижается — рекомендуется предпочитать композицию.

Чем абстрактный класс отличается от интерфейса в UML?

Абстрактный класс (имя курсивом): может содержать реализованные методы; объекты не создаются; служит базой для подклассов. Интерфейс (стереотип «interface»): только сигнатуры без реализации; конкретный класс связан с ним через отношение Реализации — пунктирная линия с треугольником.

Что означает кратность [0..*] в диаграмме классов?

[0..] — «ноль или любое количество объектов», указывается у конца стрелки отношения. Например, Customer «1» → «0..» Order: один клиент может не иметь заказов или иметь их любое количество. Символ * означает отсутствие верхней границы.

Чем диаграмма классов отличается от ER-диаграммы?

ER-диаграмма описывает только структуру данных — сущности и поля. Диаграмма классов UML дополнительно фиксирует методы (операции) и поддерживает наследование, агрегацию, зависимость. Она удобна для объектно-ориентированных систем, где важно не только что хранится, но и как обрабатывается.

Как создать диаграмму классов UML бесплатно онлайн?

Текстовые инструменты: PlantUML (хранение в Git) и Mermaid (встраивается в Markdown). Визуальный редактор: draw.io — бесплатно, без регистрации, прямо в браузере. Visual Paradigm предлагает генерацию диаграммы по текстовому описанию системы.

Подайте заявку —
забронируйте место в группе

45 000 мест на 2026 год. Бесплатное обучение по федеральному проекту «Активные меры содействия занятости»

  • Онлайн
  • От 2 месяцев
  • Бесплатно
  • Диплом
Учиться бесплатно
icon