В программной инженерии диаграмма классов [1] на унифицированном языке моделирования (UML) представляет собой тип статической структурной диаграммы, которая описывает структуру системы, показывая классы системы , их атрибуты, операции (или методы) и отношения между объектами.
Диаграмма классов является основным строительным блоком объектно-ориентированного моделирования. Она используется для общего концептуального моделирования структуры приложения и для детального моделирования, переводя модели в программный код . Диаграммы классов также могут использоваться для моделирования данных . [2] Классы в диаграмме классов представляют как основные элементы, взаимодействия в приложении, так и классы, которые должны быть запрограммированы.
На диаграмме классы представлены в виде блоков, содержащих три отсека:
При проектировании системы ряд классов идентифицируются и группируются вместе в диаграмму классов, которая помогает определить статические отношения между ними. При детальном моделировании классы концептуального проекта часто разбиваются на подклассы. [3]
Для дальнейшего описания поведения систем эти диаграммы классов могут быть дополнены диаграммой состояний или конечным автоматом UML . [4]
UML предоставляет механизмы для представления членов класса, таких как атрибуты и методы, а также дополнительную информацию о них, например конструкторы.
Чтобы указать видимость члена класса (т. е. любого атрибута или метода), перед именем члена необходимо разместить следующие обозначения: [5]
Производное свойство — это свойство, значение (или значения) которого получено или вычислено на основе другой информации, например, путем использования значений других свойств.
Производное свойство отображается с именем, перед которым стоит косая черта «/». [6]
UML определяет два типа области действия для членов: экземпляр и класс . Имя класса отображается как подчеркнутая конкатенация имени экземпляра (если есть), двоеточия (':') и фактического имени класса. [1]
Чтобы указать область действия классификатора для члена, его имя должно быть подчеркнуто. В противном случае по умолчанию предполагается область действия экземпляра.
Отношение — это общий термин, охватывающий конкретные типы логических связей, обнаруженных на диаграммах классов и объектов. UML определяет следующие отношения:
Зависимость — это тип ассоциации, где существует семантическая связь между зависимыми и независимыми элементами модели. [7] Она существует между двумя элементами, если изменения в определении одного элемента (сервера или цели) могут вызвать изменения в другом (клиенте или источнике). Эта ассоциация является однонаправленной. Зависимость отображается в виде пунктирной линии с открытой стрелкой, которая указывает от клиента к поставщику.
Ассоциация представляет собой семейство структурных связей. Бинарная ассоциация представлена в виде сплошной линии между двумя классами. Рефлексивная ассоциация — это бинарная ассоциация между классом и самим собой. Ассоциация между более чем двумя классами представлена в виде ромба, соединенного сплошной линией с каждым из ассоциированных классов. Ассоциация между тремя классами является тернарной ассоциацией. Ассоциация между большим количеством классов называется n-арной ассоциацией.
Ассоциация может быть названа, а концы ассоциации могут быть украшены именами ролей, индикаторами агрегации, множественностью, видимостью, навигационностью и другими свойствами. Точечная нотация, например, позволяет представлять с помощью маленькой точки на стороне одного класса, что конец ассоциации принадлежит другой стороне. [8]
Существует три типа ассоциации: простая ассоциация, общая агрегация, составная агрегация (композиция). Ассоциация может быть навигируемой в одном или нескольких направлениях. Навигируемость не обязательно должна быть указана явно. Открытая стрелка сбоку от класса документирует, что класс может быть эффективно достигнут во время выполнения с противоположной стороны. Однонаправленная навигация показана небольшим крестиком на линии ассоциации на стороне класса, которая не может быть достигнута. Например, класс полета связан с классом самолета двунаправленно.
Агрегация — это вариант ассоциативного отношения «имеет»; агрегация более конкретна, чем ассоциация. Это ассоциация, которая представляет собой отношение часть-целое или часть-из. Как показано на рисунке, профессор «имеет» класс для преподавания. Как тип ассоциации, агрегация может быть названа и иметь те же украшения, что и ассоциация. Однако агрегация не может включать более двух классов; это должна быть бинарная ассоциация. Более того, вряд ли существует разница между агрегациями и ассоциациями во время реализации, и диаграмма может вообще пропускать агрегационные отношения. [9]
Агрегация может происходить, когда класс является коллекцией или контейнером других классов, но содержащиеся в нем классы не имеют сильной зависимости жизненного цикла от контейнера. Содержимое контейнера все еще существует, когда контейнер уничтожается.
В UML он графически представлен как полая ромбовидная форма на содержащем классе с одной линией, которая соединяет его с содержащимся классом. Агрегат семантически является расширенным объектом, который рассматривается как единое целое во многих операциях, хотя физически он состоит из нескольких меньших объектов.
Композитная агрегация (в просторечии называемая композицией) — это более сильная форма агрегации, где агрегат контролирует жизненный цикл элементов, которые он агрегирует. Графическое представление — это заполненная ромбовидная форма на конце содержащего класса линии, которая соединяет содержащийся класс(ы) с содержащим классом.
Таким образом, отношение агрегации часто является "каталогическим" включением, чтобы отличить его от "физического" включения композиции. UML 2 не определяет никакой семантики для агрегации по сравнению с простой ассоциацией.
Это указывает на то, что один из двух родственных классов ( подкласс ) считается специализированной формой другого (супертипа ) , а суперкласс считается обобщением подкласса. На практике это означает, что любой экземпляр подтипа также является экземпляром суперкласса. Примерное дерево обобщений этой формы можно найти в биологической классификации : люди являются подклассом обезьян , которые являются подклассом млекопитающих , и так далее. Связь легче всего понять с помощью фразы «A is a B» (человек является млекопитающим, млекопитающее является животным).
Графическое представление обобщения на языке UML представляет собой полый треугольник на конце суперкласса линии (или дерева линий), соединяющей его с одним или несколькими подтипами.
символ реализации (подкласс) _______▻ (суперкласс)
Отношение обобщения также известно как отношение наследования или «является» .
Суперкласс (базовый класс ) в отношении обобщения также известен как «родитель» , суперкласс , базовый класс или базовый тип .
Подтип в отношении специализации также известен как «ребенок» , подкласс , производный класс , производный тип , наследующий класс или наследующий тип .
Обратите внимание, что эти отношения не имеют ничего общего с биологическими отношениями родителя и ребенка: использование этих терминов чрезвычайно распространено, но может вводить в заблуждение.
Обобщение может быть показано только на диаграммах классов и диаграммах вариантов использования .
В моделировании UML отношение реализации — это отношение между двумя элементами модели, в котором один элемент модели (клиент) реализует (реализует или выполняет) поведение, заданное другим элементом модели (поставщиком).
Графическое представление UML Реализации представляет собой полый треугольник на интерфейсном конце пунктирной линии (или дерева линий), которая соединяет ее с одним или несколькими реализаторами. На интерфейсном конце пунктирной линии, которая соединяет ее с ее пользователями, используется простой наконечник стрелки. В диаграммах компонентов используется графическое соглашение «шар и гнездо» (реализаторы показывают шар или леденец, тогда как пользователи показывают гнездо). Реализации могут быть показаны только на диаграммах классов или компонентов. Реализация — это связь между классами, интерфейсами, компонентами и пакетами, которая соединяет элемент клиента с элементом поставщика. Связь реализации между классами/компонентами и интерфейсами показывает, что класс/компонент реализует операции, предлагаемые интерфейсом.
символ реализации (реализатор) -------▻ (интерфейс)
Зависимость может быть более слабой формой связи, которая указывает, что один класс зависит от другого, поскольку он использует его в какой-то момент времени. Один класс зависит от другого, если независимый класс является переменной параметра или локальной переменной метода зависимого класса. Иногда связь между двумя классами очень слабая. Они вообще не реализованы с помощью переменных-членов. Вместо этого они могут быть реализованы как аргументы функций-членов.
Эта связь ассоциации указывает, что (по крайней мере) один из двух связанных классов ссылается на другой. Эта связь обычно описывается как «A имеет B» (у кошки-матери есть котята, у котят есть кошка-мама).
Представление ассоциации в UML — это линия, соединяющая два связанных класса. На каждом конце линии есть необязательная нотация. Например, мы можем указать с помощью наконечника стрелки, что заостренный конец виден с хвоста стрелки. Мы можем указать принадлежность размещением мяча, роль, которую играют элементы этого конца, указав имя для роли, и множественность экземпляров этой сущности (диапазон числа объектов, которые участвуют в ассоциации с точки зрения другого конца).
Классы сущностей моделируют долгоживущую информацию, обрабатываемую системой, а иногда и поведение, связанное с этой информацией. Их не следует идентифицировать как таблицы базы данных или другие хранилища данных.
Они рисуются как круги с короткой линией, прикрепленной к нижней части круга. В качестве альтернативы они могут быть нарисованы как обычные классы с обозначением стереотипа «сущность» над именем класса.