Стереотипы
UML - это язык для описания структурных, поведенческих, группирующих и аннотационных сущностей. Эти четыре основных вида сущностей позволяют моделировать огромное количество систем (см. главу 2). Однако время от времени приходится вводить новые сущности, которые специфичны для словаря предметной области, хотя выглядят подобно примитивным строительным блокам, уже имеющимся в языке.
Стереотип - это не то же самое, что родительский класс в отношении обобщения "родитель/потомок". Точнее было бы охарактеризовать его как некоторый метатип, поскольку каждый стереотип создает эквивалент нового класса в мета-модели UML. Например, при моделировании бизнеспроцесса вам потребуется ввести в модель элементы, представляющие работников, документы и стратегии.
Пользуясь такой методикой разработки, как Рациональный Унифицированный
Процесс (Rational Unified Process, см. "Приложение С"), вы должны будете оперировать классами границ, управления и сущностей. Здесь и возникает необходимость в стереотипах. Приписывая стереотип таким элементам, как узел или класс, вы по сути дела расширяете UML, создавая новый строительный блок, который напоминает существующий, но обладает новыми специальными свойствами (каждый стереотип может содержать свой набор помеченных значений), новой семантикой (у каждого стереотипа могут быть собственные ограничения) и нотацией (каждому стереотипу может быть присвоена пиктограмма).
В самом простом случае стереотип изображается в виде имени в кавычках (например, "name"), расположенного над именем другого элемента. Для наглядно--сти стереотипу можно назначить пиктограмму, разместив ее справа от имени (если вы пользуетесь базовой нотацией для элемента) или применяя как базовый символ для стереотипной сущности. Все три подхода показаны на рис. 6.5. Определенные в UML стереотипы обсуждаются в "Приложении В".

Рис. 6.5 Стереотипы
Примечание: Создавая пиктограмму для стереотипа, используйте цвет в качестве удобного визуального идентификатора (хотя злоупотреблять этой возможностью не следует). UML позволяет оформлять пиктограммы любым способом и, если позволяет реализация, они могут войти в набор примитивных инструментов, пополнив таким образом палитру средств, при помощи которых пользователи работают с данной предметной областью.
Следующие стереотипы определены в качестве стандартных элементов UML. В приведенной таблице для каждого стереотипа указываются имя, символ UML, к которому применим стереотип, и назначение.
Примечание: Некоторые из элементов, представленных в таблице, являются, строго говоря, не стереотипами, а стандартными ключевыми словами. Различие между ними довольно тонкое. В метамодели UML некоторые элементы, например trace, имеют очевидную семантику, то есть являются явной частью метамодели, а не настоящими стереотипами. С точки зрения разработчика, однако, они все равно изображаются в нотации стереотипов. Такие элементы определены как стандартные ключевые слова, чтобы можно было зарезервировать их использование в согласии с метамоделъю UML. В таблице ключевые слова выделены курсивом.
Обычно стереотипный элемент изображается следующим образом: имя стереотипа размещается над именем элемента и заключается в двойные кавычки, например "trace". Co стереотипом может быть ассоциирована пиктограмма, используемая как альтернативная форма визуализации данного элемента. Хотя в самом UML такие пиктограммы ни для одного стереотипа не заданы, в таблице все же приводятся некоторые общепринятые изображения.
Стереотип/ ключевое слово | Символ, к которому он применим | Назначение |
actor | Класс (class) | Определяет связанное множество ролей, которые играет пользователь прецедента при взаимодействии с ним |
access | Зависимость (dependency) | Сообщает, что открытое содержание целевого пакета доступно в пространстве имен исходного пакета |
association | Концевая точка связи (link end) | Указывает, что соответствующий объект видим ассоциацией |
become | Сообщение (message) | Целевой объект совпадает с исходным, но в более поздний момент времени. При этом, возможно, у него будут другие значения, состояния или роли |
bind | Зависимость (dependency) | Исходный класс инстанцирует целевой шаблон с данными фактическими параметрами |
call | Зависимость (dependency) | Исходная операция вызывает целевую |
copy | Сообщение (message) | Целевой объект - это точная, но независимая копия исходного |
create | Событие (event), сообщение (message) | Целевой объект создан в результате события или сообщения |
derive | Зависимость (dependency) | Исходный объект может быть вычислен по целевому |
destroy | Событие (event), сообщение (message) | Целевой объект уничтожен в результате события или сообщения |
document![]() | Компонент (component) | Компонент представляет документ |
enumeration | Класс (class) | Определяет перечислимый тип, включая его возможные значения как набор идентификаторов |
exception | Класс (class) | Определяет событие, которое может быть возбуждено или перехвачено операцией |
executable![]() | Компонент (component) | Описывает компонент, который может быть выполнен в узле |
extend | Зависимость (dependency) | Целевой вариант использования расширяет поведение исходного в данной точке расширения |
facade | Пакет (package) | Пакет, который является лишь представлением другого пакета |
file![]() | Компонент (component) | Компонент, который представляет документ, содержащий исходный код или данные |
framework | Пакет (package) | Пакет, состоящий в основном из образцов (паттернов) |
friend | Зависимость (dependency) | Исходный класс имеет специальные права видимости в целевом |
global | Концевая точка связи (link end) | Соответствующий объект видим, поскольку принадлежит объемлющей области действия |
import | Зависимость (dependency) | Открытое содержание целевого пакета становится частью плоского пространства имен исходного пакета, как если бы оно было объявлено непосредственно в нем |
implementation | Обобщение (generalization) | Потомок наследует реализацию родителя, но не открывает и не поддерживает его интерфейсов, вследствие чего не может быть подставлен вместо родителя |
implementationClass | Класс (class) | Реализация класса на некотором языке программирования |
include | Зависимость (dependency) | Исходный прецедент явно включает поведение другого прецедента в точке, определяемой исходным |
instanceOf | Зависимость (dependency) | Исходный объект является экземпляром целевого классификатора |
instantiate | Зависимость (dependency) | Операции над исходным классом создают экземпляры целевого класса |
interface | Класс (class) | Описывает множество операций, определяющих, что может делать класс или компонент |
invariant | Ограничение (constraint) | Ограничение, которое всегда должно выполняться для ассоциированного элемента |
library ![]() | Компонент (component) | Статическая или динамическая объектная библиотека |
local | Концевая точка связи (link end) | Соответствующий объект видим, так как находится в локальной области действия |
metaclass | Классификатор (classifier) | Классификатор, все объекты которого являются классами |
model | Пакет (package) | Описывает семантически замкнутую абстракцию системы |
parameter | Концевая точка связи (link end) | Соответствующий объект видим, так как является параметром |
postcondition | Ограничение (constraint) | Ограничение, которое должно выполняться после выполнения операции |
powertype | Класс (class) | Классификатор, все объекты которого являются потомками данного родителя |
Зависимость (dependency) | Говорит, что целевой классификатор связан с исходным отношением powertype | |
precondition | Ограничение (constraint) | Ограничение, которое должно выполняться перед выполнением операции |
process | Класс (class) | Классификатор, экземпляр которого представляет ресурсоемкий поток управления |
refine | Зависимость (dependency) | Говорит, что исходный объект является более детальной абстракцией, чем целевой |
requirement | Комментарий (comment) | Описывает желаемое свойство или поведение системы |
responsibility | Комментарий (comment) | Описывает контракт или обязательство класса |
send | Зависимость (dependency) | Исходная операция посылает целевое событие |
signal | Класс (class) | Асинхронный стимул, который передается одним экземпляром другому |
stereotype | Класс (class) | Классификатор - это стереотип, который может быть применен к другим элементам |
stub | Пакет (package) | Пакет выступает в роли заместителя для открытого содержимого другого пакета |
subsystem | Пакет (package) | Описывает группирование элементов, ряд которых составляет спецификацию поведения других элементов |
system | Пакет (package) | Описывает пакет, представляющий всю моделируемую систему |
table![]() | Компонент (component) | Компонент, представляющий таблицу базы данных |
thread | Класс (class) | Классификатор, экземпляр которого представляет облегченный поток управления |
trace | Зависимость (dependency) | Целевой элемент - это исторический предок исходного |
type | Класс (class) | Абстрактный класс, который используется только для спецификации структуры и поведения (но не реализации) множества объектов |
use | Зависимость (dependency) | Семантика исходного элемента зависит от семантики открытого содержания целевого элемента |
utility | Класс (class) | Определяет класс, для которого область действия всех атрибутов и операций - класс |