Диаграмма классов
В UML диаграмма классов является типом диаграммы статической структуры. Она описывает структуру системы, показывая её классы, их атрибуты и операторы, и также взаимосвязи этих классов.
Взаимосвязи [ ]
Взаимосвязь — это особый тип логических соединений в диаграммах классов и Взаимосвязи экземпляров [ ]
Связь [ ]
Связь — простая взаимосвязь между объектами. Она представляется линией, соединяющей два или более объектных блока. Она встречается на диаграммах классов или объектов. Связь — частный случай ассоциации.
Ассоциация [ ]
Ассоциация представляет семейство связей двух или более классов.
Существует пять различных типов ассоциации. Наиболее же распространёнными являются двунаправленная и однонаправленная. Например, классы рейс и самолёт связаны двунаправленной ассоциацией, а классы человек и кофейный автомат связаны однонаправленной.
Двойные ассоциации (с двумя концами) представляются линией, соединяющей два классовых блока. Ассоциации большей степени имеют более двух концов и представляются линиями, один конец которых идет к классовому блоку, а другой к общему ромбику. В представлении однонаправленной ассоциации добавляется стрелка указывающая на направление ассоциации.
Ассоциации могут быть именованными, и тогда на концах представляющей её линии будут подписаны роли, принадлежности, индикаторы, мультипликаторы, видимости или другие свойства.
Агрегация [ ]
Диаграмма классов, показывающая Агрегацию между двумя классами
Агрегация — “ has a ” вариант ассоциации. Как тип ассоциации, агрегация может быть именованной. Но агрегация не может включать сразу несколько классов.
Агрегация встречается, когда один класс является коллекцией или контейнером других. Причём время существования содержащихся классов не зависит от времени существования содержащего их класса. Если контейнер будет уничтожен, то его содержимое — нет.
Графически агрегация представляется пустым ромбиком на блоке класса и линией, идущей от этого ромбика к содержащемуся классу.
Композиция [ ]
Композиция — более строгий вариант “has a” ассоциации.
Композиция имеет жёсткую зависимость времени существования экземпляров класса контейнера и экземпляров содержащихся классов. Если контейнер будет уничтожен, то всё его содержимое будет также уничтожено .
Графически представляется как и агрегация, но с закрашенным ромбиком.
Различия между композицией и агрегацией [ ]
Целое композиции должно иметь мультипликатор 0..1 или 1, что показывает, что часть является частью только одного целого. В агрегации же может быть любой мультипликатор.
Приведём наглядный пример. Двигатель является частью машины, следовательно здесь подходит композиция. В то же время, когда они представлены в базе данных, данная модель двигателя может быть у разных моделей машин, поэтому следует использовать агрегацию.
Взаимосвязи классов [ ]
Генерализация (обобщение) [ ]
Class diagram showing generalization between one superclass and two subclasses
Генерализация показывает, что один из двух связанных классов (подтип) является более частной формой другого (надтипа), который называется обобщением первого. На практике это означает что любой экземпляр подтипа является также экземпляром надтипа. Например: животные — супертип млекопитающих, которые в свою очередь супертип приматов и так далее. Эта взаимосвязь легче всего описывается фразой «А — это Б» (приматы — это млекопитающие, млекопитающие — это животные).
Графически генерализация представляется линией с пустым треугольником у супертипа
Генерализация также известна как наследование или “ Реализация [ ]
Реализация — отношение между двумя элементами модели, в котором один элемент (клиент) реализует поведение, заданное другим (поставщиком).
Графически реализация представляется также как и генерализация, но с пунктирной линией.
Общие взаимосвязи [ ]
Зависимость [ ]
Зависимость существует между двумя элементами, если изменение одного влечёт за собой изменение другого.
Графически представляется пунктирной стрелкой, идущей от зависимого элемента к тому, от которого он зависит.
Существует несколько именованных вариантов.
Зависимость может быть между экземплярами, классами или экземпляром и классом.
Мультипликаторы [ ]
нотация | объяснение | пример |
0..1 | Ноль или один экземпляр | кошка имеет или не имеет хозяина |
1 | Обязательно один экземпляр | у кошки одна мать |
0..* or * | Ноль или более экземпляров | у кошки может быть, а может и не быть котят |
1..* | Один или более экземпляров | у кошки есть хотя бы одно место, где она спит |
generalization (обобщение)
Таксономическое отношение между более общим и более специализированным элементами. Более специализированный элемент полностью совместим с более общим, и содержит дополнительную информацию. Экземпляр более специализированного элемента можно использовать везде, где объявлен более общий элемент.
См. association generalization; inheritance; use case generalization.
Обобщение — это направленное отношение между двумя обобщаемыми элементами одного вида, например, между классами, пакетами и т. д. Один из элементов называется прямым предком, другой — прямым потомком. В случае обобщения классов прямой предок может именоваться суперклассом, а прямой потомок — подклассом. Прямой предок представляет собой описание множества (непрямых) экземпляров, имеющих одни и те же общие черты. Прямой потомок — это описание подмножества этих экземпляров, обладающих свойствами предка, однако, в отличие от них имеющих некоторые дополнительные свойства, присущие только элемента м-потомкам. Обобщение транзитивно и асимметрично. В одну сторону его можно проследить до элемента-прямого предка, в другую — до элемента — прямого потомка. Элемент, который прослеживается через несколько обобщений в сторону, идущую к прямому предку, именуется предком; элемент, который прослеживается в противоположном направлении, — потомком. Обобщение не допускает цикличности, так как класс не может быть предком или потомком самого себя.
В самом простом случае у класса (или другого обобщаемого элемента) есть только один прямой предок. В более сложной ситуации у потомка может быть несколько прямых предков, от которых он наследует структуру, повеление и ограничения. Это называется множественным наследованием (хотя, возможно, было бы правильнее назвать это множественным обобщением). Элемент-прямой потомок ссылается на элемент-прямой предок и поэтому должен видеть его.
Обобщение можно применять как к ассоциациям, так и к классификаторам, состояниям, событиям и кооперациям.
Более подробно об обобщении ассоциации изложено в статье энциклопедии association generalization.
Подробную информацию, касающуюся обобщения вариантов использования, вы найдете в статье энциклопедии use case generalization.
Узлы и компоненты во многом похожи на классы, поэтому и применении к ним обобщение выглядит таким же, как и для классов.
К множеству обобщений и к участвующим в них элементам-прямым потомкам, имеющим общего прямого предка, может применяться ограничение, которое может иметь следующие свойства.
Несовместность
(disjoint)
Ни один элемент не может иметь двух прямых потомков в качестве предков (в случае множественного наследования). Ни один экземпляр не может быть непосредственным или непрямым экземпляром двух элементов-прямых потомков (согласно семантике множественной классификации).
Перекрывание
(overlapping)
У элемента может быть два или более элементов-прямых потомков в качестве предков. Экземпляр может быть экземпляром двух или более элементов-прямых потомков.
Полный
(complete)
Перечислены все возможные элементы-прямые потомки, Других быть не может.
Неполный
(incomplete)
Все возможные элементы пока не перечислены. Есть еще такие, которые могут появиться, однако при этом еще, но были объявлены.
Обобщение между классификаторами изображается в виде непрерывной линии, идущей от элемента-прямого потомка (например, подкласса) к элементу-прямому предку (например, суперклассу). На конце линии (возле более общего элемента) находится большой не закрашенный треугольник (рис. 102). Идущие к прямому предку линии можно совместить — получится дерево (рис. 103).
Рис. 103. Обобщение, изображенное в виде дерева
Обобщения могут применяться не только к классификаторам, но и к ассоциациям, хотя в этом случае из-за обилия линий нотация будет несколько запутанной. Ассоциацию можно изображать в виде класса ассоциации, к символу которого будет удобнее проводить стрелки обобщения.
Дополнительные классы модели, которые не показаны на диаграмме, можно изобразить в виде многоточия (…). (Это не означает, что дополнительные классы могут быть добавлены когда-либо в будущем. Такая нотация говорит о том, что дополнительные классы уже существуют, просто они не изображены на этой диаграмме. Это общепринятое условное обозначение, указывающее на скрытую информацию, но не на элемент семантики.) Многоточие в качестве подкласса обозначает, что в семантической модели есть, по крайней мере, один подкласс класса, не указанный на данной диаграмме. У многоточия может быть указан дискриминатор.
Такой индикатор не должен вводиться вручную, а должен предоставляться инструментом моделирования.
Несколько маршрутов обобщения какого-либо суперкласса может изображаться в виде дерева с одним общим для всех сегментом, идущим к суперклассу (к нему же относится и треугольник на конце). Затем этот сегмент делится на несколько маршрутов-ветвей, которые идут к своим подклассам. Дерево не обозначает n-арные отношения, ЭТО просто еще один вариант нотации. В базовой модели существует ми одному обобщению на каждую пару подкласс-суперкласс. Если изобразить дуги по отдельности, семантика от этого не изменится.
Если на треугольник, которым заканчивается общий для всего дерева сегмент обобщения, помещается текстовая метка, она относится ко всем маршрутам, ведущим к подклассам. Иначе говоря, это само собой является общим для всех подклассов.
На рис. 104 показано объявление ограничений на обобщения. На нем вы также видите два разных стиля оформления обобщения — дерево, в котором все маршруты изображены перпендикулярными фрагментами и имеют общий родительский сегмент с треугольником, и второй — бинарный, в котором у каждого отношения прямой потомок-прямой предок есть своя наклонная линия для описания отношения обобщения.
Рис. 104. Ограничения обобщения
В отношениях обобщения элемент-прямой предок можно определить, ничего не зная о его потомках. Элементы-потомки, наоборот, должны знать структуру своего прямого предка, в противном случае они не смогут правильно функционировать. Однако в большинстве случаев элемент-предок проектируется таким образом, чтобы потомки вносили в него необходимые дополнения, иначе говоря, наличие элементов-потомков предполагается заранее. Одна из причин популярности механизма обобщения состоит в том, что зачастую в систему вносятся элементы-потомки, которые не ожидались при проектировании родительского элемента. Это ведет к расширению и усилению первоначально ожидаемого результата.
Отношение реализации во многом напоминает отношение обобщения, за той лишь разницей, что при нем наследуется не структура и не реализация, а спецификация поведения. Если элемент спецификации представляет собой абстрактный класс, у которого нет ни атрибутов, ни ассоциаций, а только абстрактные операции, это значит, что кроме спецификации поведения у него нечего наследовать и отношения реализации, и обобщения в этом случае в целом эквивалентны.
complete (полный), disjoint (несовместимый), implementation (организация), incomplete (неполный), overlapping (перекрывание).