ГЛАВА 11. Статические модели объектно-ориентированных программных систем
Статические модели обеспечивают представление структуры систем в терминах базовых строительных блоков и отношений между ними. «Статичность» этих моделей состоит в том, что здесь не показывается динамика изменений системы во времени. Вместе с тем следует понимать, что эти модели несут в себе не только структурные описания, но и описания операций, реализующих заданное поведение системы. Основным средством для представления статических моделей являются диаграммы классов [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 | В объект поступает несколько потоков вызовов операций (из параллельных потоков управления). Разрешается параллельное (и множественное) выполнение операции. Подразумевается, что такие операции являются атомарными |
Дата добавления: 2019-02-07; просмотров: 389;