Статические модели обеспечивают представление структуры систем в терминах базовых строительных блоков и отношений между ними. «Статичность» этих моделей состоит в том, что здесь не показывается динамика изменений системы во времени. Вместе с тем следует понимать, что эти модели несут в себе не только структурные описания, но и описания операций, реализующих заданное поведение системы. Основным средством для представления статических моделей являются диаграммы классов [8], [23], [53], [67]. Вершины диаграмм классов нагружены классами, а дуги (ребра) — отношениями между ними. Диаграммы используются:
q в ходе анализа — для указания ролей и обязанностей сущностей, которые обеспечивают поведение системы;
q в ходе проектирования — для фиксации структуры классов, которые формируют системную архитектуру.
Вершины в диаграммах классов
Итак, вершина в диаграмме классов — класс. Обозначение класса показано на рис. 11.1.
Рис. 11.1. Обозначение класса
Имя класса указывается всегда, свойства и операции — выборочно. Предусмотрено задание области действия свойства (операции). Если свойство (операция) подчеркивается, его областью действия является класс, в противном случае областью Действия является экземпляр (рис. 11.2).
Что это значит? Если областью действия свойства является класс, то все его экземпляры (объекты) используют общее значение этого свойства, в противном случае у каждого экземпляра свое значение свойства.
Рис. 11.2. Свойства уровней класса и экземпляра
Свойства
Общий синтаксис представления свойства имеет вид
Видимость Имя [Множественность]: Тип = НачальнЗначение {Характеристики}
Рассмотрим видимость и характеристики свойств.
В языке UML определены три уровня видимости:
public protected private | Любой клиент класса может использовать свойство (операцию), обозначается символом + Любой наследник класса может использовать свойство (операцию), обозначается символом # Свойство (операция) может использоваться только самим классом, обозначается символом - |
ПРИМЕЧАНИЕ
Если видимость не указана, считают, что свойство объявлено с публичной видимостью.
Определены три характеристики свойств:
changeable addOnly frozen | Нет ограничений на модификацию значения свойства Для свойств с множественностью, большей единицы; дополнительные значения могут быть добавлены, но после создания значение не может удаляться или изменяться После инициализации объекта значение свойства не изменяется |
ПРИМЕЧАНИЕ
Если характеристика не указана, считают, что свойство объявлено с характеристикой changeable.
Примеры объявления свойств:
начало + начало начало: Координаты имяфамилия [0..1]: String левыйУгол: Координаты=(0, 10) сумма: Integer {frozen} | Только имя Видимость и имя Имя и тип Имя, множественность, тип Имя, тип, начальное значение Имя и характеристика |
Операции
Общий синтаксис представления операции имеет вид
Видимость Имя (Список Параметров): ВозвращаемыйТип {Характеристики}
Примеры объявления операций:
записать + записать зарегистрировать) и: Имя, ф: Фамилия) балансСчета (): Integer нагревать () (guarded) | Только имя Видимость и имя Имя и параметры Имя и возвращаемый тип Имя и характеристика |
В сигнатуре операции можно указать ноль или более параметров, форма представления параметра имеет следующий синтаксис:
Направление Имя: Тип = ЗначениеПоУмолчанию
Элемент Направление может принимать одно из следующих значений:
in out inout | Входной параметр, не может модифицироваться Выходной параметр, может модифицироваться для передачи информации в вызывающий объект Входной параметр, может модифицироваться |
Допустимо применение следующих характеристик операций:
leaf isQuery sequential guarded concurrent | Конечная операция, операция не может быть полиморфной и не может переопределяться (в цепочке наследования) Выполнение операции не изменяет состояния объекта В каждый момент времени в объект поступает только один вызов операций. Как следствие, в каждый момент времени выполняется только одна операция объекта. Другими словами, допустим только один поток вызовов (поток управления) Допускается одновременное поступление в объект нескольких вызовов, но в каждый момент времени обрабатывается только один вызов охраняемой операции. Иначе говоря, параллельные потоки управления исполняются последовательно (за счет постановки вызовов в очередь) В объект поступает несколько потоков вызовов операций (из параллельных потоков управления). Разрешается параллельное (и множественное) выполнение операции. Подразумевается, что такие операции являются атомарными |