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

Диаграмма классов – это UML-диаграмма, которая описывает систему, визуализируя различные типы объектов внутри системы и виды статических связей, которые существуют между ними. Он также иллюстрирует операции и атрибуты классов.

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

Основные принципы

Диаграмма классов соответствует принципам объектно-ориентированного программирования (ООП) и является одним из базовых инструментов проектирования ООП-систем.

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

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

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

Содержание диаграммы классов

Классы

Класс — это основной элемент моделирования, который представляет собой абстракцию реального объекта или сущности в системе. Он определяет свойства (атрибуты) и поведение (методы) объектов, которые являются экземплярами данного класса. На диаграмме классов обычно представляется в виде прямоугольника, разделенного на три части:

  • Название класса располагается в верхней части прямоугольника.

  • Атрибуты класса указываются в средней части прямоугольника.

  • Методы класса располагаются в нижней части прямоугольника.

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

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

Виды классов

Обычный класс

это класс, который представляет собой абстракцию реального объекта или сущности в системе. Он имеет свои атрибуты и методы, которые описывают характеристики и поведение объектов данного класса.

Абстрактный класс

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

Интерфейс

это специальный вид класса, который определяет набор методов без их реализации. Интерфейсы используются для определения общих методов, которые должны быть реализованы в классах, которые их имплементируют. Один класс может имплементировать несколько интерфейсов.

Класс перечисления

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

Класс шаблона

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

Видимость

Видимость (visibility) в языке моделирования UML определяет уровень доступности элементов модели. Она определяет, какие части программы могут обращаться к конкретному элементу модели.

В языке UML используется четыре уровня видимости:

  1. Public (публичный) — элементы с такой видимостью доступны из любой точки модели и внешних модулей. Они могут быть использованы как внутри класса, так и снаружи.

  2. Protected (защищенный) — элементы с такой видимостью не могут быть использованы вне класса, кроме классов-наследников.

  3. Private (приватный) — элементы с такой видимостью доступны только внутри класса, в котором они объявлены. Они не доступны из других классов и объектов.

  4. Package (пакетный) — элементы с такой видимостью доступны всем классам находящимся внутри одного пакета.

Отношения (Взаимосвязи)

Зависимость (Dependency)

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

Примером зависимости может быть использование объекта одного класса в методе другого класса. Например, если класс Order содержит метод calcTotal(), который использует объект класса Product для расчета общей стоимости заказа, то можно нарисовать зависимость между классами Order и Product.

Ассоциация (Association)

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

Роль — это название, которое описывает, как именно объекты класса связаны между собой в рамках ассоциации. Роль может быть определена для каждого конца ассоциации и описывать, как объекты каждого класса используются в контексте связи между этими классами.

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

Название
Обозначение
Описание

Точное число

1

Только один объект связан с другим объектом.

Диапазон значений

1..9

От одного до девяти объектов класса могут быть связаны с другим классом.

Множество

0..* или *

Ноль или более объектов могут быть связаны с другим объектом

Агрегация (Aggregation)

Агрегация — это отношение между объектами классов, когда один объект является частью другого объекта. В этом случае, объект, содержащий другой объект, называется контейнером, а содержащийся объект — содержимым. Контейнер может содержать несколько объектов-содержимых, а объект-содержимое может быть частью нескольких контейнеров.

В диаграмме классов агрегация обозначается отношением «больше-чем» с пустым ромбом на стороне контейнера. Например, если у нас есть класс «Компания» и класс «Сотрудник», то мы можем использовать агрегацию, чтобы показать, что каждая компания содержит несколько сотрудников. В этом случае, класс «Компания» будет контейнером, а класс «Сотрудник» — содержимым.

Композиция (Composition)

Композиция — это более строгий вариант агрегации, когда объект класса-контейнера создает объект класса-части и полностью управляет его жизненным циклом. Объекты класса-части могут принадлежать только одному объекту класса-контейнера. При удалении объекта класса-контейнера все объекты класса-части также удаляются.

Композиция обозначается на диаграмме классов uml с помощью пустого ромба на стороне класса-контейнера, соединенной линией с классом-частью. Также можно указать имя роли, которую выполняет класс-часть в отношении с классом-контейнером.

Обобщение (Generalization)

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

Реализация (implementation)

Реализация показывает, что класс реализует интерфейс или абстрактный класс. Класс, который реализует интерфейс, обязан предоставить реализацию всех методов, объявленных в этом интерфейсе. Класс, который наследует абстрактный класс, также должен реализовать все его абстрактные методы.

На диаграмме классов связь реализации обозначается пунктирной линией с треугольной стрелкой, которая указывает на интерфейс или абстрактный класс.

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

Шаг 1. Идентификация классов

Определите основные классы, которые будут присутствовать в вашей системе или программе. В нашем примере на предметную область «Университет» могут входить классы «Студент», «Преподаватель», «Курс» и «Группа».

Шаг 2. Определение атрибутов классов

Для каждого класса определите его атрибуты, то есть переменные, которые описывают его состояние. Например, класс «Студент» может иметь атрибуты «имя», «возраст» и «номер студенческого билета». Запишите атрибуты рядом с соответствующими классами на диаграмме.

Шаг 3. Определение методов классов

Для каждого класса определите его методы, то есть функции или операции, которые класс может выполнять. Например, класс «Студент» может иметь методы «записаться на курс», «получить средний балл» и «изменить информацию о себе». Запишите методы под соответствующими классами на диаграмме.

Шаг 4. Определение отношений между классами

Установите связи между классами, чтобы показать их отношения. Например, класс «Студент» может иметь ассоциацию с классом «Курс», чтобы показать, что студенты записываются на курсы. Используйте стрелки и мощность отношений для указания типа и количество связей между классами.

Источники:

Last updated