Рисунок5 – Структура задания атрибута
Квантор видимости может принимать одно из трех возможных значений и отображается при помощи специальных символов:
- «+» обозначает атрибут с областью видимости типа общедоступный (public). Атрибут с этой областью видимости доступен или виден из любого другого класса пакета, в котором определена диаграмма;
- «#» обозначает атрибут с областью видимости типа защищенный (protected). Атрибут с этой областью видимости недоступен или невиден для всех классов, за исключением подклассов данного класса;
- «–» обозначает атрибут с областью видимости типа закрытый (private). Атрибут с этой областью видимости недоступен или невиден для всех классов без исключения.
Квантор видимости может быть опущен. Отсутствие квантора видимости обычно трактуется как private. Вместо условных графических обозначений можно записывать соответствующее ключевое слово: public, protected, private.
Имя атрибута должно быть уникальным в пределах данного класса. Имя атрибута является обязательным элементом синтаксического обозначения атрибута.
Кратность атрибута характеризует общее количество конкретных атрибутов данного типа, входящих в состав отдельного класса. В общем случае кратность записывается в форме строки текста в квадратных скобках после имени соответствующего атрибута:
[нижняя_граница1. верхняя_граница1, нижняя_граница2. верхняя_грашца2,…, нuжняя_гpaнuцa k. верхняя_граница k],
где нижняя_граница и верхняя_граница являются положительными целыми числами, каждая пара которых служит для обозначения отдельного замкнутого интервала целых чисел, у которого нижняя (верхняя) граница равна значению нижняя_граница (верхняя_граница). В качестве верхней_границы может использоваться специальный символ «*», который означает произвольное положительное целое число.
Значения кратности из интервала следуют в монотонно возрастающем порядке без пропуска отдельных чисел, лежащих между нижней и верхней границами. При этом соответствующие нижние и верхние границы интервалов включаются в значение кратности.
Тип атрибута представляет собой выражение, семантика которого определяется языком спецификации соответствующей модели. В нотации UML тип атрибута обычно определяется в зависимости от языка программирования, который предполагается использовать для реализации данной модели.
Исходное значение служит для задания некоторого начального значения для соответствующего атрибута в момент создания отдельного экземпляра класса. Здесь необходимо придерживаться правила принадлежности значения типу конкретного атрибута. Если исходное значение не указано, то значение соответствующего атрибута не определено на момент создания нового экземпляра класса.
В третьей сверху секции прямоугольника записываются операции или методы класса. Операция (operation) представляет собой некоторый сервис, предоставляющий каждый экземпляр класса по определенному требованию. Совокупность операций характеризует функциональный аспект поведения класса. Запись операций класса в языке UML также стандартизована и подчиняется определенным синтаксическим правилам. При этом каждой операции класса соответствует отдельная строка, структура которой приведена на рисунке 6:
Рисунок6 – Структура задания операции
Список параметров является перечнем разделенных запятой формальных параметров, каждый из которых может быть представлен в следующем виде (см. рисунок 7):
Рисунок7 – Структура задания параметра
Здесь вид параметра – есть одно из ключевых слов in, out или inout со значением in по умолчанию, в случае если вид параметра не указывается.
Операция, которая не может изменять состояние системы и, соответственно, не имеет никакого побочного эффекта, обозначается строкой-свойством «{запрос}» («{query}»). В противном случае операция может изменять состояние системы, хотя нет никаких гарантий, что она будет это делать. При этом придерживаются следующей семантики для данных значений:
последовательная (sequential) – для данной операции необходимо обеспечить ее единственное выполнение в системе, одновременное выполнение других операций может привести к ошибкам или нарушениям целостности объектов класса.
параллельная (concurrent) – данная операция в силу своих особенностей может выполняться параллельно с другими операциями в системе, при этом параллельность должна поддерживаться на уровне реализации модели.
охраняемая (guarded) – все обращения к данной операции должны быть строго упорядочены во времени с целью сохранения целостности объектов данного класса, при этом могут быть приняты дополнительные меры по контролю исключительных ситуаций на этапе ее выполнения.
На рисунке 8 приведен пример задания класса, содержащего атрибуты и операции.
Рисунок8 – Пример задания класса
Если класс оказывает влияние на другой класс, то на диаграмме эта взаимосвязь (отношение) между классами изображается соединительной линией. Анализ разновидностей взаимосвязей (в дальнейшем отношений) позволяет выделить следующие:
- отношение зависимости (dependency relationship);
- отношениеассоциации (association relationship);
- отношениеобобщения (generalization relationship);
- отношение реализации (realization relationship).
Каждое из этих отношений имеет собственное графическое представление на диаграмме.
Отношение зависимости используется в такой ситуации, когда некоторое изменение одного элемента модели может потребовать изменения другого зависимого от него элемента модели. Отношение зависимости графически изображается пунктирной линией между соответствующими элементами со стрелкой на одном из ее концов. На диаграмме классов данное отношение связывает отдельные классы между собой, при этом стрелка направлена от класса-клиента зависимости к классу-серверу (рисунок 9).
Рисунок9 – Графическое изображение отношения зависимости
Рисунок10 – Графическое представление зависимости между классом-клиентом (Класс_С) и классами-источниками (Класс_A и Класс_Б)
Стрелка может помечаться необязательным, но стандартным ключевым словом в кавычках и необязательным индивидуальным именем. Для отношения зависимости предопределены ключевые слова, которые обозначают некоторые специальные виды зависимостей. Эти ключевые слова (стереотипы) записываются в кавычках рядом со стрелкой, которая соответствует данной зависимости. Примеры стереотипов для отношения зависимости представлены ниже:
«access» – служит для обозначения доступности открытых атрибутов и операций класса-источника для классов-клиентов;
«bind» – класс-клиент может использовать некоторый шаблон для своей последующей параметризации;
«derive» – атрибуты класса-клиента могут быть вычислены по атрибутам класса-источника;
«import» – открытые атрибуты и операции класса-источника становятся частью класса-клиента, как если бы они были объявлены непосредственно в нем;
«refine» – указывает, что класс-клиент служит уточнением класса-источника в силу причин исторического характера, когда появляется дополнительная информация в ходе работы над проектом.
Примечание
Отношение зависимости является наиболее общей формой отношения в языке UML. Все другие типы рассматриваемых отношений можно считать частным случаем данного отношения. Однако важность выделения специфических семантических свойств и дополнительных характеристик для других типов отношений обусловливают их самостоятельное рассмотрение при построении диаграмм.
Отношение ассоциации соответствует наличию некоторого отношения между классами. Данное отношение обозначается сплошной линией с дополнительными специальными символами, которые характеризуют отдельные свойства конкретной ассоциации. В качестве дополнительных специальных символов могут использоваться имя ассоциации, а также имена и кратность классов-ролей ассоциации. Имя ассоциации является необязательным элементом ее обозначения. Если оно задано, то записывается с заглавной (большой) буквы рядом с линией соответствующей ассоциации.
Наиболее простой случай данного отношения – бинарная ассоциация. Она связывает в точности два класса. Простым примером отношения бинарной ассоциации является отношение между двумя классами – классом «Компания» и классом «Сотрудник» (см. рисунок 11). Они связаны между собой бинарной ассоциацией Работа, имя которой указано на рисунке рядом с линией ассоциации.
Рисунок11 – Графическое изображение отношения бинарной ассоциации
Кратность отдельного класса обозначается в виде интервала целых чисел. Так, для рассмотренного примера кратность «1» для класса «Компания» означает, что каждый сотрудник может работать только в одной компании. Кратность «1..*» для класса «Сотрудник» означает, что в каждой компании могут работать несколько сотрудников, общее число которых заранее неизвестно и ничем не ограничено. Заметим, что вместо кратности «1..*» записать только символ «*» нельзя, поскольку последний означает кратность «0..*». Для данного примера это означало бы, что отдельные компании могут совсем не иметь сотрудников в своем штате.