Введение

Тип статической структуры

В разработке программного обеспечения диаграмма классов в Унифицированном языке моделирования (UML) является типом статической структуры, описывающей структуру системы путем отображения классов системы, их атрибутов, операций (или методов) и взаимосвязей между объектами. Диаграмма классов является основным строительным блоком объектно-ориентированного моделирования. Она используется для общего концептуального моделирования структуры приложения, а также для детального моделирования и преобразования моделей в программный код. Диаграммы классов также могут использоваться для моделирования данных. Классы на диаграмме классов представляют как основные элементы и взаимодействия в приложении, так и классы, которые предстоит запрограммировать. На диаграмме классы изображаются в виде блоков, состоящих из трех секций:
Верхняя секция содержит имя класса, напечатанное жирным шрифтом по центру, с заглавной первой буквы. Средняя секция содержит атрибуты класса, выровненные по левому краю, с маленькой первой буквы. Нижняя секция содержит операции, которые класс может выполнять, также выровненные по левому краю, с маленькой первой буквы. При проектировании системы ряд классов идентифицируется и объединяется в диаграмму классов, помогающую определить статические связи между ними. При детальном моделировании классы концептуального проекта часто разделяются на подклассы. Для более детального описания поведения систем эти диаграммы классов могут быть дополнены диаграммой состояний или конечным автоматом UML.

Члены

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

Отношения

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

Зависимость

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

Ассоциация

Ассоциация представляет собой семейство структурных связей. Бинарная ассоциация изображается сплошной линией между двумя классами. Рефлексивная ассоциация – это бинарная ассоциация между классом и самим собой. Ассоциация между более чем двумя классами изображается в виде ромба, соединенного сплошной линией с каждым из связанных классов. Ассоциация между тремя классами называется троичной ассоциацией. Ассоциация между большим числом классов называется n-арной ассоциацией. Ассоциация может иметь имя, а концы ассоциации могут быть дополнены именами ролей, индикаторами агрегации, кратностью, видимостью, навигацией и другими свойствами. Например, точечная нотация позволяет обозначить маленькой точкой сбоку от одного класса, что конец ассоциации принадлежит другой стороне. Существует три типа ассоциаций: простая ассоциация, совместная агрегация, композитная агрегация (композиция). Ассоциация может быть проходимой в одном или нескольких направлениях. Навигация не обязательно должна быть указана явно. Открытая стрелка сбоку от класса указывает на то, что к этому классу можно эффективно обратиться во время выполнения с противоположной стороны. Однонаправленная навигация обозначается небольшим крестом на линии ассоциации с той стороны класса, до которого нельзя обратиться. Например, класс "рейс" связан с классом "самолет" двунаправленно.

Агрегация

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

Состав

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

Зависимость

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

Многообразие

Эта связь ассоциации указывает на то, что (как минимум) один из двух связанных классов содержит ссылку на другой. Обычно такие отношения описываются как "А имеет Б" (у кошки-матери есть котята, у котят есть кошка-мать). UML-представление ассоциации – это линия, соединяющая два ассоциированных класса. На каждом конце линии может быть добавлена дополнительная нотация. Например, мы можем указать с помощью наконечника стрелки, что острый конец виден от основания стрелки. Мы можем указать на владение, разместив закрашенный круг, роль элементов на этом конце, указав имя роли, и кратность экземпляров этой сущности (диапазон количества объектов, участвующих в ассоциации с точки зрения другого конца). 0 – Отсутствие экземпляров (редко). 0..1 – Отсутствие экземпляров или один экземпляр. 1 – Ровно один экземпляр. 1..1 – Ровно один экземпляр. 0..* – Ноль или более экземпляров. * – Ноль или более экземпляров. 1..* – Один или более экземпляров.

Субъекты

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