Итак, что делать, если модель достаточно велика? Ответ очевиден: ее нужно
разделить на части обозримого размера и рассматривать их по отдельности. Для
этой цели в UML используется одно универсальное средство — пакет.
Пакет — это группирующая сущность в UML.
Хотя в UML предусмотрена только одна сущность для структурирования модели,
этого оказывается достаточно. Рассмотрим свойства пакета в UML.
• Отношение владения. Говорят, что пакет владеет объявленными в нем
элементами модели, а элементы принадлежат владеющему ими пакету. Пакет
может владеть любыми элементами модели, в частности, пакетами. Отношение
владения является строгой композицией, т. е. каждый элемент модели
принадлежит ровно одному пакету. Всегда имеется корневой пакет (с именем
по умолчанию). Таким образом, структура
пакетов по отношению владения
(или вложенности) образует в модели строгую иерархию, подобную иерархии
папок и файлов в файловой системе.
•
Пространство имен. Каждый пакет в модели образует пространство имен, т. е.
область определения и использования имен. Рассмотрим понятие пространства
имен в UML чуть подробнее. Имена однотипных элементов в одном
пространстве имен уникальны — элемент данного типа однозначно
определяется по имени в данном пространстве имен — в этом и состоит
основное назначение пространства имен. В другом пространстве имен это имя
может быть использовано для именования любого другого элемента. Например,
все классы в данном пакете должны иметь различные имена, в то же время
ассоциация (будучи сущностью иного типа) может иметь имя, совпадающее с
именем класса. Пакет — не единственное средство образования пространства
имен в UML. Все сущности, имеющие составляющие, которые не существуют
отдельно от этих сущностей, образуют собственное пространство имен.
Таковыми сущностями являются, в частности, классификаторы, ассоциации,
машины состояний и кооперации. Например, атрибуты в разных классах могут
иметь совпадающие имена, поскольку эти атрибуты принадлежат различным
пространствам имен. Пространства имен вложены друг в друга. Пространства
имен пакетов вложены в соответствии
с иерархией отношения владения,
пространства имен прочих элементов вложены в соответствии со
специфической иерархией элементов. В частности, каждое составное состояние
машины состояний образует вложенное пространство имен. Таким образом,
пространства имен также образуют строгую иерархию. Для указания точного
положения любого элемента в этой иерархии используются составные
имена — последовательность имен вложенных пространств имен, разделенных
двойным двоеточием (::), которая заканчивается именем элемента.
•
Видимость элементов. Все элементы, которыми владеет пакет, обладают
определенной видимостью. Закрытые (ключевое слово
private, символ –)
элементы видимы только в том пакете, где определены. Защищенные (ключевое
слово
protected, символ #) элементы видимы в том пакете, где определены, и
во всех пакетах, которые обобщает данный (см. ниже про отношение
обобщения для пакетов). Только открытые (ключевое слово public, символ +)
элементы данного пакета могут быть видимы в иных пакетах.