Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Атрибуты

На самом высоком уровне абстракции, моделируя структурные свойства класса (то есть атрибуты), вы просто записываете их имена. Обычно этого вполне доста­точно, чтобы читатель мог понять общее назначение модели. В дополнение к этому, как было описано выше, можно определить видимость, область действия и кратность каждого атрибута. Кроме того, можно задать тип, начальное значение и изменяемость атрибутов. А для обозначения множества логически связанных атрибутов допустимо использовать стереотипы (см. главу 6).

Полная форма синтаксиса атрибута в языке UML следующая:

[visibility] name [multiplicity] [: type] [= initial-value] [{property-string}]

Ниже приводятся примеры допустимых объявлений атрибутов:

  • origin - только имя;

  • + origin - видимость и имя;

  • origin : Point - имя и тип;

  • head : *ltem - имя и сложный тип;

  • name [0..1] : String - имя, кратность и тип;

  • origin : Point = (0 , 0)- имя, тип и начальное значение;

  • id : Integer {frozen} - имя и свойство.

Наряду с атрибутами можно использовать три свойства:

  • changeable (изменяемый) - ограничений на изменение значений атрибута не установлено;

  • addOnly (только добавляемый) - разрешается добавлять новые значения для атрибутов с кратностью больше единицы, но созданное значение не мо­жет быть изменено или удалено;

  • frozen (замороженный) - после инициализации объекта нельзя изменять значения его атрибутов.

Если явно не оговорено противное, то все атрибуты изменяемы (changeable). При моделировании постоянных или однократно задаваемых атрибутов можно использовать свойство frozen.

Примечание Свойство frozen соответствует ключевому слову const в языке С+ +.

Операции

На самом высоком уровне абстракции при моделировании поведенческих харак­теристик класса (то есть его операций и сигналов, см. главу 20) вы просто записы­ваете их имена. Этого обычно бывает достаточно, чтобы читатель мог понять общее назначение модели. Кроме этого, как описывалось в предыдущих разделах, вы мо­жете определить видимость и область действия каждой операции. Можно задан, также ее параметры, тип возвращаемого значения, семантику параллелизма и неко­торые другие свойства. Имя операции совместно с ее параметрами (включая тип возвращаемого значения, если таковое имеется) называют сигнатурой операции. Для описания множества логически связанных операций, таких, например, как вспомогательные функции, можно использовать стереотипы (см. главу 6).

Примечание В языке UML существует различие между операцией и методом. Операциями называются услуги, которые можно запросить у любого объекта класса для изменения поведения; метод - это реали­зация операции. Для любой неабстрактной операции класса должен быть определен метод, содержащий ее исполняемый алгоритм (обычно записываемый в виде структурированного текста или каком-либо языке программирования). В иерархии наследования для одной операции может быть определено несколько методов, из которых нужный полиморфно выбирается во время выполнение.

Полный синтаксис операции в языке UML таков:

[visibility] name [(parameter-list)] [: return-type] [ {property-string}]

Ниже приводятся некоторые допустимые объявления операций:

  • display - только имя;

  • + display - видимость и имя;

  • set (n: Name, s: String) - имя и параметры;

  • getID () : Integer - имя и возвращаемое значение;

  • restart () {guarded} - имя и свойство.

Сигнатура операции может содержать ноль или более параметров, каждый из которых имеет следующий синтаксис:

[direction] name : type [= default-value] Параметр direction может принимать любое из нижеперечисленных значений:

  • in - входящий параметр, который не может быть модифицирован;

  • out - выходящий параметр, который может быть изменен, чтобы передать информацию вызвавшей процедуре;

  • inout - входящий параметр, который может быть изменен.

Помимо описанного ранее свойства leaf для операций определены еще четы­ре свойства:

  • isQuery (запрос) - выполнение операции не изменяет состояния системы. Другими словами, операция является просто функцией без побочных эф­фектов;

  • sequential (последовательная) - при вызове операции необходимо гаранти­ровать, что в любой момент объект выполняет только один поток. При нали­чии нескольких потоков управления нельзя обеспечить семантику и целост­ность объекта;

  • guarded (охраняемая) - семантика и целостность объекта при наличии не­скольких потоков управления гарантируются упорядочением всех обраще­ний к его охраняемым операциям. На практике это означает возможность вызова только одной операции объекта в любой момент времени, то есть все сводится к семантике sequential;

  • concurrent (параллельная) - семантика и целостность объекта при нали­чии нескольких потоков управления гарантируются благодаря тому, что опе­рация рассматривается как атомарная. Разные параллельные потоки управ­ления могут одновременно вызывать одну и ту же параллельную операцию объекта без нарушения семантики. Проектировать параллельные операции необходимо так, чтобы обеспечивалась корректность работы в случае одно­временного выполнения в том же объекте какой-либо последовательной или охраняемой операции.

Последние три свойства (sequential, guarded и concurrent) описывают семантику параллелизма операции, поэтому задавать их имеет смысл только при наличии в вашей модели активных объектов, процессов или нитей (см. главу 22).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]