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

В области разработки программного обеспечения — этоунифицированный язык моделирования (UML) диаграмма классов — этостатическая структурная диаграмма которая описывает структуру системы, показывая ее классы, их атрибуты, операции (или методы) и отношения между объектами.

Class diagram in UML diagram hierarchy

Цели диаграмм классов

  1. Отображение статической структуры классификаторов в системе
  2. Предоставляет основную нотацию для других структурных диаграмм UML
  3. Очень полезно для разработчиков и других членов команды
  4. Бизнес-аналитики могут использовать диаграммы классов для моделирования систем с бизнес-точки зрения

Диаграммы классов UML состоят из:

  • Набор классов
  • Набор отношений между классами

Что такое класс?

Описание группы объектов с аналогичными ролями, включая:

  • Структурные особенности (атрибуты): определяют, что объекты класса «знают»
    • Представляет состояние объекта
    • Описывает структуру или статические характеристики класса
  • Поведенческие особенности (операции): определяют, что объекты класса «могут делать»
    • Определяют, как взаимодействуют объекты
    • Описывают поведение или динамические характеристики класса

Нотация классов

Нотация классов состоит из трех частей:

  1. Имя класса
    • Имя класса появляется в первой секции.
  2. Атрибуты класса
    • Атрибуты отображаются во второй секции.
    • Тип указывается после двоеточия.
    • Атрибуты соответствуют переменным-членам (данным-членам) в коде.
  3. Операции класса (методы)
    • Операции показаны в третьем отделении. Они представляют услуги, предоставляемые классом.
    • Тип возвращаемого значения указывается после двоеточия в конце сигнатуры метода.
    • Типы параметров указываются после двоеточия после имени параметра.
    • Операции соответствуют методам класса в коде.

Simple class

Графическое представление класса MyClass как показано выше:

  • MyClass имеет 3 атрибута и 3 операции
  • Параметр p3 метода op2 имеет тип int
  • op2 возвращает float
  • op3 возвращает указатель (обозначается символом *) на Class6

Связи между классами

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

Тип связи Схема
Наследование (или обобщение):

  • Представляет связь «является-видом».
  • Имена абстрактных классов отображаются курсивом.
  • SubClass1 и SubClass2 являются специализациями SuperClass.
  • Сплошная линия с открытым концом стрелки, направленной от подкласса к суперклассу.
Inheritance
Простая ассоциация:

  • Структурная связь между двумя эквивалентными классами.
  • Связь существует между Class1 и Class2.
  • Сплошная линия, соединяющая два класса.
Simple association
Агрегация:

  • Особый вид ассоциации, представляющий отношение «часть-целое».
  • Класс2 является частью Класс1.
  • Множественные экземпляры Класс2 (обозначены звездочкой *) могут быть связаны с Класс1.
  • Объекты Класс1 и Класс2 имеют независимые жизненные циклы.
  • Открытый ромб на конце составного класса.
Aggregation
Композиция:

  • Особый вид агрегации, при котором части уничтожаются вместе с целым.
  • Объекты Класс2 живут и умирают вместе с Класс1.
  • Класс2 не может существовать независимо.
  • Закрашенный ромб на конце составного класса.
Composition
Зависимость:

  • Существует между двумя классами, если изменение определения одного класса может привести к изменению другого (но не наоборот).
  • Класс1 зависит от Класс2.
  • Штриховая линия с открытым концом стрелки.
Dependency

Имена отношений

  • Имена отношений записываются посередине линии ассоциации.
  • Хорошие имена отношений имеют смысл при произнесении вслух:
      • «Каждая электронная таблица содержит некоторые ячейки»

    <li>Выражение оценивается как значение»

  • Часто они имеют маленькую стрелку, указывающую направлениечтения, например, выражение оценивается как значение, но значение не оценивается как выражение.

Relationship name

Связь – Роли

  • Роль определяет цель направления в ассоциации.
  • Роль записывается на конце линии ассоциации и описывает роль, которую класс играет в этом отношении.
    • Например, ячейка связана с выражением. Природа связи заключается в том, что выражение является формулой ячейки.

Видимость членов класса

В объектно-ориентированном проектировании представляется видимость атрибутов и операций. UML определяет четыре типа видимости: публичный, защищенный, – указывает на приватный атрибут или операцию, и пакет.

Символы +, -, # и ~ перед именами атрибутов и операций указывают на видимость:

  • + указывает на публичный атрибут или операцию
  • – указывает на приватный атрибут или операцию
  • # указывает на защищенный атрибут или операцию
  • ~ указывает на атрибут или операцию пакета

Пример видимости класса

Simple class

В приведенном выше примере:

  • атрибут1 и op1 класса MyClassName являются публичными
  • атрибут3 и op3 являются защищенными
  • атрибут2 и op2 являются приватными

Права доступа для различных членов класса показаны ниже:

Уровень доступа Публичный (+) Приватный (-) Защищенный (#) Пакет (~)
Члены того же класса Да Да Да Да
Члены производных классов Да Нет Да Да
Члены любого другого класса Да Нет Нет Только в том же пакете

Множественность

Множественность указывает, сколько объектов класса участвуют в отношении. Она может быть выражена как:

  • Точно 1 – 1
  • Ноль или один – 0..1
  • Многие – 0..* или *
  • Один или более – 1..*
  • Точное количество – например, 3..4 или 6
  • Сложная связь – например, 0..1, 3..4, 6* означает любое количество, кроме 2 или 5

Пример множественности

  • Требование: студент может записаться на много курсов, и много студентов могут записаться на один курс.
  • В приведённом ниже примере диаграмма классов (слева) описывает статическую модель вышеуказанного требования, тогда как диаграмма объектов (справа) показывает снимок регистрации курсов (экземпляр диаграммы классов) по курсам программирования и управления базами данных.

Object diagram

Пример агрегации – компьютер и компоненты

  • Агрегация — это особый случай ассоциации, представляющий иерархию «содержит».
  • Агрегация — это родительский класс, компонент — дочерний класс.

Aggregation example

Пример наследования – классификация клеток

  • Наследование — ещё один особый случай ассоциации, представляющий иерархию «вид-родитель».
  • Наследование упрощает модель анализа за счёт введения таксономии.
  • Подклассы наследуют атрибуты и операции от суперкласса.

Inheritance example

Диаграмма классов – пример использования инструмента диаграмм

Диаграммы классов могут включать примечания, прикреплённые к классам или отношениям. Примечания отображаются серым цветом.

Class diagram example

Из приведённого выше примера мы можем интерпретировать диаграмму следующим образом:

  1. Shape — это абстрактный класс. Он отображается курсивом.
  2. Shape — это суперкласс. Circle, Rectangle и Polygon наследуются от Shape. Другими словами, Circle — это Shape. Это отношение обобщения/наследования.
  3. Существует ассоциация между DialogBox и DataController.
  4. Shape является частью Window. Это отношение агрегации. Shape может существовать без Window.
  5. Point является частью Circle. Это отношение композиции. Point не может существовать без Circle.
  6. Window зависит от Event. Но Event не зависит от Window.
  7. Атрибуты Circle — radius и center. Это конкретный класс.
  8. Методы Circle — area(), circum(), setCenter() и setRadius().
  9. Параметр radius в Circle имеет тип float.
  10. Метод area() в Circle возвращает значение типа double.
  11. Атрибуты и методы Rectangle скрыты. Некоторые другие классы на диаграмме также скрывают свои атрибуты и методы.

Работа с сложными системами – несколько или одна диаграмма классов?

При моделировании крупных систем или крупных бизнес-областей необходимо учитывать множество сущностей. Следует ли использовать несколько или одну диаграмму классов? Ответ:

  • Лучше использовать несколько диаграмм классов, чем моделировать каждое сущность и их отношения на одной диаграмме.
  • Разбиение системы на несколько диаграмм классов облегчает ее понимание, особенно когда каждая диаграмма является визуальным представлением конкретной части системы.

Перспектива диаграмм классов в жизненном цикле разработки программного обеспечения

Диаграммы классов могут использоваться на разных этапах Жизненного цикла разработки программного обеспечения (ЖЦРПО), и обычно постепенно моделируются три разных уровня детализации (перспективы):

Концептуальная перспектива: Диаграмма интерпретируется как описание вещей в реальном мире. Таким образом, если вы начинаете с концептуальной перспективы, вы рисуете диаграмму, представляющую концепции в изучаемой области. Эти концепции естественным образом связаны с классами, которые их реализуют. Эта перспектива считается независимой от языка.
Перспектива спецификации: Диаграмма интерпретируется как описание программных абстракций или компонентов с указанием спецификаций и интерфейсов, без привязки к конкретной реализации. Таким образом, если вы подходите с позиции спецификации, вы изучаете интерфейсы программного обеспечения, а не его реализацию.
Перспектива реализации: Диаграмма интерпретируется как описание конкретной технологии и языкареализации программного обеспечения. Таким образом, если вы подходите с позиции реализации, вы изучаете реализацию программного обеспечения.

Попробуйте нарисовать диаграмму классов UML прямо сейчас

Вы узнали, что такое диаграмма классов и как ее рисовать. Пришло время нарисовать свою собственную. Получите Community Edition Visual Paradigm — бесплатный инструмент UML — и создайте свою диаграмму классов с помощью бесплатного инструмента диаграммы классов. Он прост в использовании и интуитивно понятен.
Скачать бесплатно

 

Leave a Reply