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

OpenU.Ru

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



package (пакет)

Механизм общего назначения для организации элементов в группы. Пакеты могут быть вложены в другие пакеты. Вся система может иметь вид одного высокоуровневого пакета, в котором рекурсивно располагается все содержимое модели. В пакете могут находиться как элементы модели, так и диаграммы.
См. access; dependency; import; model; namespace; subsystem.

Семантика

Пакет - это вид группировки элементов модели и диаграмм. Каждый элемент модели, который не является при этом частью другого элемента модели, должен быть объявлен исключительно в одном
пространстве имен. Говорят, что элемент принадлежит пространству имен, в котором хранится его объявление. Пакет - это пространство имен общего назначения, которому может принадлежать элемент модели любого вида, если только для этого элемента не ограничен вид владельца. Каждая диаграмма должна принадлежать только одному пакету, который может быть вложен в другой пакет (принадлежать ему). В пакете могут храниться другие, второстепенные пакеты, а также обычные элементы модели. Некоторые пакеты могут представлять собой подсистемы или модели. Все описание системы можно представить как единый высокоуровневый пакет типа подсистемы, куда входит все остальное содержание модели. По пакетам можно распределить любые виды элементов UML-моделей и диаграмм.
Пакетам принадлежат элементы моделей, подмножества моделей и диаграммы. Они являются основой для управления конфигурацией, хранения и управления доступом. Каждый элемент может непосредственно принадлежать другому элементу модели или одному пакету, поэтому иерархия принадлежности представляет собой дерево. Элементы модели (в том числе и пакеты) могут ссылаться на другие элементы в других пакетах, таким образом, схема их использования представляет собой граф.
Особыми видами пакетов являются модель, подсистема и система. Система - это корневая подсистема в иерархии пакетов. Это единственный вид элементов модели, который не может принадлежать другому элементу. Система неявно включает в себя все прочее содержимое модели. У модели и подсистемы есть несколько предопределенных стереотипов.
Между пакетами могут существовать отношения зависимости. В большинстве случаев они обобщают зависимости, которые существуют между содержимым этих пакетов. Если между двумя пакетами есть зависимость использования, это означает, что существует, по меньшей мере, одна такая зависимость между парой элементов этих пакетов (однако не между каждой парой элементов).
Зависимость доступа отличается от всех прочих видов зависимости и относится к самим пакетам, а не к их элементам. Она указывает на то, что элементам пакета клиента дано разрешение на наличие отношений с элементами пакета-поставщика. Спецификация видимости также касается отношений. Зависимость доступа не означает, что имена элементов целевого пакета занимают пространство имен исходного пакета, так как пространства имен различны и элементы могут идентифицироваться при помощи путей, которые включают в себя имена вложенных пакетов. Импорт (вариант зависимости доступа) похож на оператор uses в языке Ada. При импорте имена, находящиеся в пространстве имен поставщика, добавляются в пространство имен клиента (поэтому между ними не должно быть конфликтной ситуации). Зависимость доступа не вносит изменений в пространство имен клиента. Она представляет собой скорее механизм управления доступом в крупных проектах, чем фундаментальное семантическое отношение.
Вложенный пакет имеет доступ ко всем элементам, которые содержатся во внешних пакетах (это справедливо для вложений любого уровня). При этом ему не нужна ни зависимость импорта, ни видимость. А вот пакет-контейнер должен импортировать вложенный пакет, чтобы увидеть его содержимое. В целом, вложенный пакет представляет собой границу инкапсуляции.
Пакет определяет видимость элементов, которые в нем содержатся. Она может быть закрытой, защищенной или открытой. Закрытые элементы недоступны для всех элементов, находящихся вне данного пакета-контейнера (безотносительно зависимостей импорта). Защищенные элементы доступны только для пакетов, состоящих с пакетом-контейнером в отношениях обобщения. Открытые элементы доступны всем импортирующим пакетам и потомкам на мета-контейнерах.
См. более полное описание правил видимости элементов, находящихся в различных пакетах, в статье access.

Нотация

Пакет изображается в виде большого прямоугольника, к одному углу которого прикреплен другой прямоугольник, поменьше ("закладка"). Как правило, "закладка" находится в, верхнем левом углу прямоугольника. Эта пиктограмма выглядит как пиктограмма папки в Windows
Если содержимое пакета не изображается, то внутри большого прямоугольника ставится имя пакета, В противном случае имя пакет помещается внутри маленького прямоугольника, "закладки".
Над именем пакета может располагаться строка с ключевым словом. К ключевым словам могут относиться слова система (system), подсистема (subsystem) и модель (model). Стереотипы, которые определяются пользователями, тоже изображаются в виде ключевых слов, однако при этом они не должны вступать в конфликт с предопределенными ключевыми словами.
Список свойств можно разместить в фигурных скобках после имени пакета или под ним.
Например: {abstract}.
Содержимое пакета может изображаться внутри большого прямоугольника.
Чтобы показать, какую видимость имеет элемент вне своего пакета, перед именем этого элемента можно поставить символ видимости ("+" - открытая видимость, "-" - закрытая, "#" - защищенная).
Отношения, изображенные между символами пакетов, указывают на отношения, которые существуют, по крайней мере, между несколькими элементами этих пакетов. Так, наличие между пакетами зависимости (за исключением зависимости доступа и импорта) свидетельствует о том, что между элементами пакетов существует одна или несколько таких зависимостей.

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

Инструмент моделирования может также выборочно показывать только те элементы, которые обладают заданным уровнем видимости, например, только открытые элементы.
Кроме того, инструмент моделирования может выделять различные типы видимости с помощью цвета или шрифта.

Стилистические указания

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

Пример

На рис. 140 изображена структура пакетов подсистемы, занимающейся обработкой заказов. Сама подсистема тоже показана в виде пакета с соответствующим стереотипом. В этом главном пакете содержится несколько обычных пакетов. Зависимости, существующие между ними, изображены в виде пунктирных стрелок. На рисунке также показано несколько внешних пакетов, от которых зависит подсистема. Они могут представлять собой готовые компоненты или элементы библиотеки.
Обобщение между пакетами служит для изображения вариаций исходного пакета. Например, пакет ExternalStore (Внешний Склад) можно реализовать в программном коде как RandomStore (СкладПроизвольногоДоступа) или StreamStore (СкладПоследовательногоДоступа).

Рис. 140. Пакеты я отношения между ними

Обсуждение

Пакеты предназначены, главным образом, для управления доступом и конфигурацией. Разбиение модели на пакеты - это механизм, который позволяет разработчикам (особенно в крупных проектах) формировать большие модели таким образом, чтобы не мешать друг другу при работе. Теоретически содержание и значение пакета целиком определяется разработчиком, однако, на практике пакеты должны быть несколько ограничены с точки зрения семантики своих границ, иначе ими невозможно будет пользоваться. Пакеты создаются как блоки управления конфигурацией, поэтому и них должны содержаться элементы, которые, скорее всего, будут разрабатываться вместе. В них также удобно хранить группы элементов, которые предназначаются для совместной компиляции. Если изменение в одном элементе влечет за собой повторную компиляцию других элементов, то их тоже можно поместить в один пакет.
Каждый элемент модели должен принадлежать только одному паке ту или другому элементу модели. В противном случае нельзя будет ни поддерживать модель, ни управлять ее версиями и конфигурацией. Пакет, в котором находится элемент модели, управляет его определением. На этот элемент могут ссылаться (или использовать) эти пакеты, однако, чтобы внести в него изменения, необходимо наличие разрешения на доступ и обновление пакета, в котором этот элемент хранится.

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

access (быть доступным), extend (расширять), facade (фасад), framework (каркас), stub (заглушка), system (система).

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