Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

generalization (обобщение)

Таксономическое отношение между более общим и более специализированным элементами. Более специализированный элемент полностью совместим с более общим, и содержит дополнительную информацию. Экземпляр более специализированного элемента можно использовать везде, где объявлен более общий элемент.
См. association generalization; inheritance; use case generalization.

Семантика

Обобщение - это направленное отношение между двумя обобщаемыми элементами одного вида, например, между классами, пакетами и т. д. Один из элементов называется прямым предком, другой - прямым потомком. В случае обобщения классов прямой предок может именоваться суперклассом, а прямой потомок - подклассом. Прямой предок представляет собой описание множества (непрямых) экземпляров, имеющих одни и те же общие черты. Прямой потомок - это описание подмножества этих экземпляров, обладающих свойствами предка, однако, в отличие от них имеющих некоторые дополнительные свойства, присущие только элемента м-потомкам. Обобщение транзитивно и асимметрично. В одну сторону его можно проследить до элемента-прямого предка, в другую - до элемента - прямого потомка. Элемент, который прослеживается через несколько обобщений в сторону, идущую к прямому предку, именуется предком; элемент, который прослеживается в противоположном направлении, - потомком. Обобщение не допускает цикличности, так как класс не может быть предком или потомком самого себя.
В самом простом случае у класса (или другого обобщаемого элемента) есть только один прямой предок. В более сложной ситуации у потомка может быть несколько прямых предков, от которых он наследует структуру, повеление и ограничения. Это называется множественным наследованием (хотя, возможно, было бы правильнее назвать это множественным обобщением). Элемент-прямой потомок ссылается на элемент-прямой предок и поэтому должен видеть его.
Обобщение можно применять как к ассоциациям, так и к классификаторам, состояниям, событиям и кооперациям.
Более подробно об обобщении ассоциации изложено в статье энциклопедии association generalization.
Подробную информацию, касающуюся обобщения вариантов использования, вы найдете в статье энциклопедии use case generalization.
Узлы и компоненты во многом похожи на классы, поэтому и применении к ним обобщение выглядит таким же, как и для классов.

Ограничения

К множеству обобщений и к участвующим в них элементам-прямым потомкам, имеющим общего прямого предка, может применяться ограничение, которое может иметь следующие свойства.
Несовместность
(disjoint)
Ни один элемент не может иметь двух прямых потомков в качестве предков (в случае множественного наследования). Ни один экземпляр не может быть непосредственным или непрямым экземпляром двух элементов-прямых потомков (согласно семантике множественной классификации).
Перекрывание
(overlapping)
У элемента может быть два или более элементов-прямых потомков в качестве предков. Экземпляр может быть экземпляром двух или более элементов-прямых потомков.
Полный
(complete)
Перечислены все возможные элементы-прямые потомки, Других быть не может.
Неполный
(incomplete)
Все возможные элементы пока не перечислены. Есть еще такие, которые могут появиться, однако при этом еще, но были объявлены.

Нотация

Обобщение между классификаторами изображается в виде непрерывной линии, идущей от элемента-прямого потомка (например, подкласса) к элементу-прямому предку (например, суперклассу). На конце линии (возле более общего элемента) находится большой не закрашенный треугольник (рис. 102). Идущие к прямому предку линии можно совместить - получится дерево (рис. 103).

Рис. 102.

Рис. 103. Обобщение, изображенное в виде дерева
Обобщения могут применяться не только к классификаторам, но и к ассоциациям, хотя в этом случае из-за обилия линий нотация будет несколько запутанной. Ассоциацию можно изображать в виде класса ассоциации, к символу которого будет удобнее проводить стрелки обобщения.
Дополнительные классы модели, которые не показаны на диаграмме, можно изобразить в виде многоточия (…). (Это не означает, что дополнительные классы могут быть добавлены когда-либо в будущем. Такая нотация говорит о том, что дополнительные классы уже существуют, просто они не изображены на этой диаграмме. Это общепринятое условное обозначение, указывающее на скрытую информацию, но не на элемент семантики.) Многоточие в качестве подкласса обозначает, что в семантической модели есть, по крайней мере, один подкласс класса, не указанный на данной диаграмме. У многоточия может быть указан дискриминатор.
Такой индикатор не должен вводиться вручную, а должен предоставляться инструментом моделирования.

Варианты презентации

Несколько маршрутов обобщения какого-либо суперкласса может изображаться в виде дерева с одним общим для всех сегментом, идущим к суперклассу (к нему же относится и треугольник на конце). Затем этот сегмент делится на несколько маршрутов-ветвей, которые идут к своим подклассам. Дерево не обозначает n-арные отношения, ЭТО просто еще один вариант нотации. В базовой модели существует ми одному обобщению на каждую пару подкласс-суперкласс. Если изобразить дуги по отдельности, семантика от этого не изменится.
Если на треугольник, которым заканчивается общий для всего дерева сегмент обобщения, помещается текстовая метка, она относится ко всем маршрутам, ведущим к подклассам. Иначе говоря, это само собой является общим для всех подклассов.

Пример

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

Рис. 104. Ограничения обобщения

Обсуждение

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

Стандартные элементы

complete (полный), disjoint (несовместимый), implementation (организация), incomplete (неполный), overlapping (перекрывание).

Алфавитный указатель