На этом шаге рассмотрим видимость ассоциаций, атрибутов и операций.
Все объектно-ориентированные языки программирования проводят четкое разграничение между интерфейсом и реализацией классов. Большинство языков предусматривают разные уровни доступа к интерфейсу. Например, в языке C++ члены класса могут быть открытыми (доступными для всех клиентов), защищенными (доступными только для подклассов или членов самого класса) или закрытыми (доступными только для членов класса и его друзей). Кроме того, в языке C++ определенные элементы могут быть частью реализации класса и, как следствие, быть недоступными даже для друзей класса. Такой уровень доступа называется видимостью реализации (implementation visibility). Видимость можно задать, указав на диаграмме один из следующих символов [Rumbaugh, Jacobson, and Booch. The Unified Modeling Language Reference Manual, p. 679.]:
Для того чтобы продемонстрировать уровень доступа источника (source end) к цели (target end), возле имен, приписанных к полюсам ассоциации, указываются специальные символы. Например, на рис. 1 имена источника и цели (database (база данных) и crop (растение)) ассоциации между классами CropDatabase (БазаДанныхПоРастениям) и GrainCrop (ЗерноваяКультура) являются открытыми. Это значит, что каждый из этих классов имеет доступ к другому. В противоположность этому, имена источника и конца ассоциации между классами GrainCrop и GrainYieldPredictor (ПрогнозУрожаяЗерновых) свидетельствуют о том, что класс GrainCrop недоступен для класса GrainYieldPredictor.
Рис.1. Уровни доступа
Другая концепция, заслуживающая внимания, заключается в том, что ассоциация имеет направление. На этапе анализа все ассоциации считаются двусторонними логическими связями между классами. Однако на этапе проектирования в центре внимания оказывается направление ассоциации. Ненаправленные ассоциации между классами GrainCrop и GrainYieldPredictor означают, что некоторый метод класса GrainCrop в своей реализации использует члены класса GrainYieldPredictor.
Эти символы относятся также ко всем вложенным сущностям. В частности, в пиктограмме класса можно указать уровень доступа к атрибутам и операциям с помощью соответствующих префиксов, приписанных к их именам. Например, на рис. 1 показано, что класс Crop имеет один открытый атрибут (scientificName), один защищенный (yield) и один закрытый (nutrientValue).
На следующем шаге рассмотрим имена полюсов ассоциации и квалификаторы.