11.5. Зависимости пакетов 255
доступ к элементам поставщика с помощью неполных имен. Разница
между этими двумя зависимостями в том, что «import» осуществляет
открытое объединение, т. е. объединенные элементы поставщика ста
новятся открытыми в клиенте. Тогда как «access» проводит закрытое
объединение, т. е. объединенные элементы становятся в клиенте за
крытыми.
«trace» – «останется только один». Тогда как другие зависимости паке
тов устанавливаются между сущностями одной модели, «trace» обычно
представляет некоторое историческое развитие одного пакета в другой.
Поэтому «trace» часто отражает отношения между разными моделями.
Полная UMLмодель может быть представлена в виде пакета с малень
ким треугольником в верхнем правом углу. В табл. 11.3 показана
межмодельная зависимость «trace» между аналитической моделью и
проектной моделью. Очевидно, что такая диаграмма является метамо
делью, в которой моделируются отношения между моделями! Как та
ковая она используется не очень часто.
«merge» – сложное отношение, которое обозначает ряд трансформаций
между элементами пакетапоставщика и пакетаклиента. Элементы
пакетапоставщика объединяются с элементами клиента для создания
новых, расширенных клиентских элементов. Эта зависимость исполь
зуется только при создании метамоделей (например, она широко при
меняется в метамодели UML) и не должна применяться в обычном ОО
анализе и проектировании. Далее в книге она нигде не обсуждается.
Дополнительную информацию можно найти в книге [Rumbaugh 1].
11.5.1. Транзитивность
Транзитивность (transitivity) – термин, применяемый к отношениям.
Он означает, что если существует отношение между сущностями A и B
и отношение между сущностями B и C, то существует неявное отноше
ние между сущностями A и C.
«import» – транзитивное отношение, «access» – нет.
Важно отметить, что зависимость «import» – транзитивная, а зависи
мость «access» – нет. Как было показано выше, это объясняется тем,
что при наличии зависимости «import» между клиентом и поставщиком
открытые элементы пакетапоставщика становятся открытыми эле
ментами клиента. Эти импортированные открытые элементы доступ
ны вне клиентского пакета. С другой стороны, когда между клиентом
и поставщиком установлена зависимость «access», открытые элементы
пакетапоставщика становятся закрытыми элементами клиента. Эти
закрытые элементы не доступны вне клиентского пакета.
Рассмотрим пример, приведенный на рис. 11.6. Пакет A обеспечивает
доступ к пакету B, а пакет B – к пакету C.