Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Проектный практикум

.pdf
Скачиваний:
397
Добавлен:
13.03.2015
Размер:
1.99 Mб
Скачать

Определив атрибуты, следует добавить их к соответствующим классам вашей модели. При этом с атрибутами можно связать три основных фрагмен-

та информации: имя атрибута, тип его данных и первоначальное значение.

Имя и тип атрибута должны быть определены перед генерацией кода, перво-

начальное значение задавать необязательно.

Добавление атрибута выполняется непосредственно на диаграмме Классов, в браузере или в окне спецификации класса.

С атрибутом можно связать некоторое текстовое описание. Как прави-

ло, это короткое описание или определение атрибута. В генерируемый код оно войдет в качестве комментария. Таким образом, документируя атрибут,

вы начинаете документировать и код.

Для добавления атрибута к классу:

1.Щелкните правой кнопкой мыши на классе диаграммы Классов.

2.В открывшемся меню выберите пункт New > Attribute (Создать >-

Атрибут).

3. Введите имя атрибута в формате Имя : Тип данных = Начальное значение. Например:

Address : String

IDNumber : Integer = 0

4. Чтобы еще добавить атрибуты, нажмите клавишу Enter и введите новые атрибуты непосредственно на диаграмму Классов.

ИЛИ

1.Щелкните правой кнопкой мыши на классе в браузере.

2.В открывшемся меню выберите пункт New > Attribute (Создать >-

Атрибут).

3.Под классом в браузере появится новый атрибут Name (имя).

Введите имя этого атрибута. Тип данных и значение атрибута по умолчанию не могут быть назначены в браузере, их можно ввести на диаграмме Классов.

ИЛИ

41

1.Откройте окно спецификации класса данного атрибута.

2.Перейдите на вкладку Attributes (Атрибуты). Если у класса уже имеются атрибуты, они будут перечислены на этой вкладке.

3.Щелкните правой кнопкой мыши где-нибудь внутри области ат-

рибутов.

4.В открывшемся меню выберите пункт Insert (Вставить).

5.Введите имя нового атрибута.

6.Выполните двойной щелчок на имени атрибута в списке – откро-

ется окно спецификации атрибута (рис. 20).

6.Задайте видимость, стереотип, тип данных и значение по умолча-

нию в соответствующих полях.

Рис. 20. Установка спецификации атрибута

42

Стереотипы атрибутов

Как у действующих лиц, вариантов использования и классов, у атрибу-

тов могут быть стереотипы. Стереотип атрибута является способом его клас-

сификации. Например, некоторые атрибуты могут соответствовать полям ба-

зы данных, а другие нет. Для каждого такого типа можно определить свой стереотип.

В Rose необязательно назначать стереотипы атрибутам. Стереотипы не требуются для генерации кода, но при их использовании легче читать и по-

нимать модель.

Для назначения стереотипа атрибуту:

1.Щелкните правой кнопкой мыши на атрибуте в браузере.

2.В открывшемся меню выберите пункт Open Specification (От-

крыть спецификацию). Вы увидите окно спецификации атрибута класса.

3. Укажите стереотип в раскрывающемся списке или введите новый стереотип.

ИЛИ

1.Выделите атрибут в браузере.

2.Для того чтобы отредактировать имя атрибута, щелкните на нем один раз. Перед именем появятся символы "« »".

3.Введите внутри угловых скобок имя стереотипа.

После выполнения всех операций на диаграмме в нотации класса ото-

бразится стереотип (рис. 21).

Рис. 21. Отображение атрибутов и стереотипа класса

43

Видимость атрибутов

Так как атрибуты содержатся внутри класса, они скрыты от других классов. В связи с этим нужно указать, какие классы имеют право читать и изменять атрибуты. Это свойство называется видимостью атрибута (attribute visibility).

Допустимы четыре значения этого параметра:

Public (Общий, открытый). Атрибут виден всем остальным классам.

Любой класс может просмотреть или изменить значение атрибута. В соот-

ветствии с нотацией UML общему атрибуту на диаграмме предшествует знак

"+".

Private (Закрытый, секретный). Атрибут не виден никаким другим классам. В соответствии с нотацией UML закрытый атрибут обозначается знаком ―-‖.

Protected (Защищенный). Атрибут доступен только самому классу и его потомкам. Нотация UML для защищенного атрибута — знак ―#‖.

Package or Implementation (Пакетный). Атрибут является общим, но только в пределах своего пакета. Данный тип видимости не обозначается ни-

каким специальным значком.

Всреде Rose поддерживаются два набора нотаций видимости. Первый

это нотация UML (+, -, #) для общих, закрытых и защищенных атрибутов соответственно. Вторая включает в себя четыре значка Rose, показанных в таблице 6.

Таблица 1. Пиктограммы видимости

Пиктограмма

Описание

 

 

 

Public

 

 

 

Private

 

 

 

Protected

 

 

44

Package or Implementation

Для задания значения видимости атрибута:

1.Щелкните правой кнопкой мыши на атрибуте в браузере.

2.В открывшемся меню выберите пункт Open Specification (От-

крыть спецификацию). Появится окно спецификации атрибута класса.

3. В поле Export Control (Контроль экспорта) выберите видимость атрибута: Public, Protected, Private или Implementation. IIo умолчанию види-

мость всех атрибутов установлена в Private.

ИЛИ

1.Выделите атрибут па диаграмме Классов.

2.Если для обозначения видимости вы используете нотацию UML,

щелкните мышью на значке "+", или "#" рядом с атрибутом. В появившемся

списке выберите значение видимости.

3.Если для обозначения видимости используется нотация Rose,

щелкните мышью на пиктограмме видимости слева от имени атрибутапоя-

вится окно с пиктограммами видимости (рис. 22) В списке значков выберите требуемую видимость.

Рис. 22. Пиктограммы видимости

Изменить нотацию для обозначения видимости можно следующим об-

разом:

1.В меню модели выберите пункт Tools > Options (Инструменты >

Параметры).

2.Перейдите на вкладку Notation (Нотация).

45

3.Установите флажок Visibility as icons (Отображать пиктограммы)

для использования нотации Rose или сбросьте его для применения нотации

UML. На рис. 23 приведен пример изображения видимости в нотации UML (a) и в нотации Rose (в).

Рис. 23. Изображение нотаций видимости

Задание метода локализации атрибута

Метод локализации атрибута (containment) показывает, каким образом атрибут хранится в классе. Возможны три значения этого параметра:

By value (По значению). Предполагается, что атрибут содержит-

ся внутри класса. Например, если атрибут относится к типу string,

эта строка будет содержаться внутри определения класса.

By reference (По ссылке). Предполагается, что атрибут локализо-

ван вне класса, но класс содержит указатель на него.

Unspecified (Не определен). Метод локализации атрибута еще не определен. В этом случае при генерации кода по умолчанию применяется значение By value этого параметра.

Задать метод локализации атрибута можно следующим образом:

1.Щелкните правой кнопкой мыши на атрибуте в браузере.

2.В открывшемся меню выберите пункт Open Specification (От-

крыть спецификацию) или ОреnStandard Specification (Открыть стандартную спецификацию. Появится окно спецификации атрибута класса.

3.Перейдите на вкладку Detail (Подробно).

46

4. Укажите значение метода локализации атрибута (containment): By value, By reference или Unspecified. Значение этого параметра по умолчанию

— Unspecified.

Определение статичного атрибута

Статичный атрибут (static) — это такой атрибут, который используется всеми экземплярами класса. На языке UML статичный атрибут помечают символом $.

Сделать атрибут статичным можно следующим образом:

1.Щелкните правой кнопкой мыши на атрибуте в браузере.

2.В открывшемся меню выберите пункт Open Specification (От-

крыть спецификацию) или Open Standard Specification (Открыть стандартную

спецификацию).Появится окно спецификации атрибута класса.

3.Перейдите на вкладку Detail (Подробно).

4.Установите флажок Static, чтобы сделать атрибут статичным. Пе-

ред именем атрибута на диаграмме Классов появится символ "$".

Определение производного атрибута

Производным (derived) называется атрибут, созданный из одного или нескольких других атрибутов класса. Например, класс Treangl (Прямоуголь-

ный треугольник) может иметь атрибуты Width (Ширина) и Height (Высота).

У него также может быть атрибут Area (Площадь), вычисляемый как полови-

на произведение ширины и высоты. Так как Area получается из этих двух ат-

рибутов, он считается производным атрибутом.

В UML производные атрибуты помечают символом "/".

Указать, что атрибут является производным можно следующим обра-

зом:

1.Щелкните правой кнопкой мыши на атрибуте в браузере.

2.В открывшемся меню выберите пункт Open Specification (От-

крыть спецификацию) или Open Standard Specification (Открыть стандартную

спецификацию). Появится окно спецификации атрибута класса.

47

3.Перейдите на вкладку Detail (Подробно).

4.Установите флажок Derived (Производный). Перед именем атри-

бута на диаграмме Классов появится символ "/" (рис. 24).

Рис. 24. Нотация класса с производным атрибутом Area

1.5.2. Работа с операциями

Операцией называется связанное с классом поведение. Операция со-

стоит из трех частей: имени, параметров и типа возвращаемого значения. Па-

раметры — это аргументы, получаемые операцией "на входе". Тип возвра-

щаемого значения относится к результату действия операции. На диаграмме Классов можно показывать как имена операций, так и их параметры и типы возвращаемого значения.

На некоторых диаграммах полезно показывать полную сигнатуру опе-

раций. Если же нужно упростить диаграмму, лучше оставить только имена.

В языке UML операции имеют следующую нотацию:

Имя операции (аргумент1 : тип данных аргумента, аргумент2 : тип данных аргумента2,...): тип возвращаемого значения.

Операции определяют ответственности классов. При идентификации операций и анализе классов следует иметь в виду следующее:

Если у класса есть только одна или две операции, то его следует объединить с каким-нибудь другим классом.

Если у класса нет операций, то лучше его моделировать как один или несколько атрибутов.

48

Если класс имеет слишком большое число операций лучше раз-

делить класс на два меньших.

Операции реализации

Операции реализации (implementor operations) реализуют некоторую бизнес-функциональность. Такие операции можно найти, исследуя диаграм-

мы Взаимодействия. Диаграммы этого типа фокусируются на бизнесфунк-

циональности, и каждое сообщение диаграммы скорее всего можно соотне-

сти с операцией реализации.

Необходимо, чтобы каждую операцию реализации можно было про-

следить до соответствующего требования. Это достигается на различных этапах моделирования. Операция выводится из сообщения на диаграмме Взаимодействия, сообщения выделяются из подробного описания потока со-

бытий, который создается на основе варианта использования, а последний — на основе требований. Возможность проследить всю эту цепочку гарантиру-

ет, что каждое требование будет воплощено в коде, а каждый фрагмент кода реализует какое-то требование.

Операции управления

Операции управления (manager operations) управляют созданием и раз-

рушением объектов. В эту категорию попадают конструкторы и деструкторы классов.

В среде Rose не требуется вручную создавать конструкторы и деструк-

торы классов. При генерации кода предоставляется возможность сделать это автоматически.

Операции доступа

Атрибуты обычно бывают закрытыми или защищенными. Тем не менее другие классы иногда должны просматривать или изменять их значения. Для этого предназначены операции доступа (access operations).

49

Пусть, например, у нас имеется атрибут Salary класса Employee. Нам бы не хотелось, чтобы другие классы могли изменять этот атрибут.

Но мы добавляем к классу Employee две операции доступа: GetSalary и SetSalary. К первой из них, являющейся общей, могут обращаться остальные классы. Она получает значение атрибута Salary и возвращает его вызвавшему ее классу. Операция SetSalary также является общей, она помогает вызвав-

шему ее классу установить новое значение атрибута Salary. Эта операция может содержать любые правила и условия проверки, которые необходимо выполнить, прежде чем изменить атрибут.

Такой подход дает возможность безопасно инкапсулировать атрибуты внутри класса, защитив их от других классов, но все же позволяет осуществ-

лять контролируемый доступ к ним.

Создание операций Get и Set (получения и изменения значения) для каждого атрибута класса является стандартом.

Как и в случае операций управления, операции доступа не нужно вво-

дить вручную. При генерации кода Rose автоматически создаст операции Get

и Set для каждого атрибута класса.

1.5.3. Вспомогательные операции

Вспомогательными (helper operations) называются такие операции класса, которые необходимы ему для выполнения его ответственностей, но о которых другие классы не должны ничего знать. Это закрытые и защищен-

ные операции класса.

Как и операции реализации, вспомогательные операции можно обна-

ружить на диаграммах Последовательности и Кооперативных диаграммах.

Часто такие операции являются рефлексивными сообщениями.

Для идентификации операций выполните следующие действия:

50