Модели классов и объектов
Как и рассмотренные ранее ER-модели, диаграммы классов могут представлять модели трёх уровней:
- Концептуальная модель содержит только классы предметной области и связи между ними.
- Логическая модель, помимо классов, включает в себя их атрибуты и методы.
- Физическая модель описывает реализацию ПО на конкретном языке и с использованием конкретной технологии, содержит типы значений для атрибутов и методов, а также их ограничения.
Вы уже знакомы с диаграммой UML Use Case, которая используется для графического представления пользовательских требований. Диаграмма UML Use Case — один из видов диаграмм, входящих в язык визуального моделирования Unified Modeling Language (UML). UML был разработан для объектно-ориентированного системного анализа и проектирования систем.
К другим видам UML-диаграмм относятся диаграммы классов и объектов: UML Class Diagram и UML Object Diagram.
UML Class Diagram
Основные элементы UML Class Diagram — это классы и связи между ними.
Класс в UML обозначается рамкой, разделённой на три прямоугольника. В верхней части жирным шрифтом записывается имя класса, посередине располагаются атрибуты (поля) класса, а в нижней части — методы класса.
Имя класса должно быть уникальным в пределах системы.
Атрибуты описывают свойства каждого объекта класса в том или ином состоянии. Имена атрибутов должны быть уникальными только внутри класса. Типы значений, которые могут принимать атрибуты, указываются после двоеточия.
Методы — это действия или функции, которые класс может выполнять. Методы часто представляют собой запросы на создание, обновление, удаление объектов. Входные параметры методов указываются в скобках после имени, а тип возвращаемого значения — после двоеточия.
Типы отношений (связей) в UML-диаграммах
Ассоциация
По аналогии со связями, соединяющими сущности в ER-диаграммах, ассоциации соединяют классы и объекты в диаграмме классов.
Ассоциация изображается непрерывной линией, которая соединяет классы, взаимодействующие друг с другом. Иногда на линии пишется глагол, передающий смысл ассоциации.
Помимо этого, в диаграмме указывается кратность: сколько объектов могут участвовать в отношениях. Кратность соответствует кардинальности и модальности в ER-модели. Кратность задаётся в виде разделённого запятыми списка интервалов, каждый из которых содержит минимум и максимум.
Например, у авиакомпании может быть любое количество самолётов. Но конкретный самолёт принадлежит только одной авиакомпании.
Наследование
Это отношение между родительским классом и его наследниками. Наследные классы являются частной формой родительского (обобщённого) класса. К примеру, классы «Яблоко», «Груша» и «Апельсин» являются наследниками родительского класса «Фрукты», а значит, имеют свойства, присущие всем фруктам.
Наследование изображается полой стрелкой от наследника к родителю.
В примере с авиабилетами классы «Международный» и «Внутренний» будут наследниками класса «Рейс».
Зависимость
Объект одного класса может использовать объект другого класса в своём методе. Такой вид межклассовых отношений называется зависимостью. При зависимости изменения в одном классе ведут к изменениям в другом. Например, у класса «Пассажир» есть метод «купил» с входным параметром «билет»: метод возвращает значение true, если пользователь купил билет на самолёт.
Зависимость обозначается пунктирной линией со стрелкой, обращённой к классу, от которого зависят методы другого класса.
Агрегация
Это связь между целым и его частями. Один класс является частью другого, но при удалении последнего первый класс продолжит существовать в системе. Например, есть класс-агрегатор «Авиакомпания» и класс «Самолёт». Пока авиакомпания работает, в её парке есть множество объектов класса «Самолёт», но если авиакомпания закроется (перестанет существовать), то её самолёты останутся.
Агрегация обозначается непрерывной линией от классов-частей к классу-агрегатору с полым ромбом на конце.
Композиция
Композиция — это связь, похожая на агрегацию, но с более строгой зависимостью. При удалении класса-агрегатора все его части тоже перестают существовать. Например, двигатель, крылья и корпус вместе представляют самолёт, который может взлетать, но сами по себе они взлететь не могут.
Композиция тоже обозначается непрерывной линией с ромбом на конце, но ромб полностью закрашивается.