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

Задания, лекции / Червенчук

.pdf
Скачиваний:
54
Добавлен:
02.05.2015
Размер:
818.35 Кб
Скачать

ровно один экземпляр – такой класс называют синглетным (Sing-

leton);

конкретно заданное число экземпляров;

произвольное число экземпляров – вариант по умолчанию. Допустимое количество экземпляров класса называется его кратно-

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

Например, как показано на рис. 2.16, класс HUB является синглетным, а у класса Controller имеется ровно три экземпляра.

Рис. 2.16. Кратность

Кратность применима и к атрибутам. Кратность атрибута записывают в виде выражения, заключенного в квадратные скобки и расположенного сразу после имени атрибута. Например, у экземпляра класса HUB может быть от 1 до 8 экземпляров атрибута DataPort.

2.10.5. Атрибуты. Полное описание

При детальном описании классификатора определяются его атрибуты, при моделировании общей структуры просто записываются имена атрибутов. Иногда этого вполне достаточно, чтобы понять общее назначение модели. В дополнение к этому, можно определить видимость, область действия и кратность каждого атрибута. Кроме того, можно задать тип, начальное значение и изменяемость атрибутов. А для обозначения множества логически связанных атрибутов допустимо использовать стереотипы.

51

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

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

Примеры допустимых объявлений атрибутов: nElem – только имя;

+ nElem – видимость и имя; nElem : Int – имя и тип;

LastItem : *Item – имя и сложный тип; cArray [0..1] : String – имя, кратность и тип;

origin : Point = (0,0) – имя, тип и начальное значение; pID : Int {frozen} – имя и свойство.

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

1){changeable} (изменяемый) – ограничений на изменение значений атрибута не установлено;

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

3){frozen} (замороженный) – после инициализации объекта нельзя изменять значения его атрибутов. Данное свойство соответствует ключевому слову const в языке C++.

Если явно не оговорено противное, то все атрибуты изменяемы

(changeable).

2.10.6. Операции. Полное описание

При детальном описании поведения классификатора определяются операции, при моделировании общей структуры достаточно указать просто имя. При необходимости можно задать видимость и область действия каждой операции. Можно задать также и ряд дополнительных свойств: тип возвращаемого значения, семантику параллелизма и т. д. Имя операции совместно с ее параметрами (включая тип возвращаемого значения, если таковое имеется) называют сигнатурой операции.

52

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

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

Ниже приводятся некоторые допустимые объявления операций: type() – только имя – скобки обязательны;

+ type() – видимость и имя;

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

getID ()

: Integer – имя и возвращаемое значение;

SetOff()

{guarded} – имя и свойство.

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

[direction] name : type [= default-value]

Параметр direction может принимать любое из нижеперечисленных значений:

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

редать информацию вызвавшей процедуре;

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

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

1){isQuery} (запрос) – выполнение операции не изменяет состояния системы, то есть операция является просто функцией без побочных эффектов.

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

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

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

53

4){concurrent} (параллельная) – семантика и целостность объекта при наличии нескольких потоков управления гарантируются благодаря тому, что операция рассматривается как атомарная. Проектировать параллельные операции необходимо так, чтобы обеспечивалась корректность работы в случае одновременного выполнения в том же объекте какой-либо последовательной или охраняемой операции.

2.11. ШАБЛОНЫ КЛАССОВ

Атрибуты класса должны иметь определенный тип. Иногда возникает необходимость создавать идентичные структуры на базе различных типов. Для этих целей используются шаблоны.

Шаблоном называется параметризованный элемент. В объектно ориентированных языках программирования предусмотрена возможность создавать шаблоны классов, определяющие семейства классов (можно задавать также шаблоны функций, определяющие семейства функций).

Параметрами шаблона могут быть классы, объекты или значения. Шаблон нельзя использовать непосредственно; сначала его нужно инстанцировать, то есть конкретизировать. Процесс инстанцирования – это связывание формальных параметров шаблона с фактическими. В результате из шаблона класса получается конкретный класс, с которым можно работать как с любым другим.

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

Например, в нижеприведенном фрагменте кода на языке C++ объявляется параметризованный класс Stack (Стэк):

Template <class Item, int Size> class Map { public:

void Push ( void) ; void Pop ( void) ; };

54

Затем можно инстанцировать этот шаблон для создания стека целых чисел IntStack на базе шаблона стека Stack сзаданием параметровшаблона:

Stack < Int, 10000 >

Язык UML также позволяет моделировать шаблоны классов. Как видно из рис. 2.17, такой класс изображается как обычный, но в верхнем правом углу его пиктограммы находится дополнительная ячейка, нарисованная пунктиром; в ней перечислены параметры шаблона.

Рис. 2.17. Шаблоны классов

На рис. 2.17 показано также, что моделировать инстанцирование шаблона класса можно двумя способами. Во-первых – неявно, для чего требуется объявить класс, имя которого обеспечивает связывание. Во-вторых, можно явным образом определить зависимость со стереотипом «bind», показывающую, что источник инстанцирует целевой шаблон с заданными фактическими параметрами.

2.12. РЕКОМЕНДАЦИИ К МОДЕЛИРОВАНИЮ КЛАССОВ

При моделировании классов в UML необходимо иметь ввиду, что каждому классу должна соответствовать некоторая реальная сущность или концептуальная абстракция предметной области. Хорошо структурированный класс обладает следующими свойствами:

является четко очерченной абстракцией некоторого понятия из словаря проблемной области или области решения;

55

содержит небольшой, точно определенный набор обязанностей

ивыполняет каждую из них;

поддерживает четкое разделение спецификаций абстракции и ее реализации;

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

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

показывайте только те его свойства, которые важны для понимания абстракции в данном контексте;

разделяйте длинные списки атрибутов и операций на группы в соответствии с их категориями;

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

ВЫВОДЫ

Базовым понятием объектно ориентированного программирования является класс. Классом называется описание совокупности объектов с общими атрибутами, операциями, отношениями и семантикой. UML имеет развитые средства, позволяющие отобразить структуру классов и связи между ними, соответствующие статическому виду системы с точки зрения проектирования. Имеющиеся в арсенале UML диаграммы классов и объектов при моделировании объектно ориентированных систем используются чаще всего (особенно диаграммы классов).

Графически класс изображается в виде прямоугольника. Прямоугольник разделяется на три раздела: первый содержит имя, второй – атрибуты (свойства), третий – операции. Кроме того, могут использоваться дополнительные разделы, содержащие обязанности класса, список принимаемых сигналов и т. п. Имеются развитые средства описания свойств атрибутов, свойств и структуры операций (области видимости и действия, типы атрибутов, атрибуты операций и их свойства и т. д.).

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

56

рощенную спецификацию классов, содержащую только имя класса и его обязанности.

При моделировании систем, особенно интерактивных, возникает необходимость работать с объектами принципиально различного типа. Язык UML имеет возможности моделирования классов (и соответственно объектов) в широком диапазоне от непрограммных сущностей до примитивных типов данных.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Дайте определение понятию «класс».

2.В чем разница между понятиями «класс» и объект?

3.Какие основные элементы содержит спецификация класса?

4.Какими свойствами могут обладать атрибуты?

5.Что включает в себя описание процедуры?

6.Что специфицируют обязанности классов и на каком этапе проектирования их рекомендуется использовать?

7.Дайте характеристику понятию «словарь системы».

8.Чем рекомендуется руководствоваться при распределении обязанностей классов?

9.Приведите примеры внепрограммных сущностей. Как они представляются средствами UML?

10.Когда применяются примитивные типы? Приведите примеры спецификации примитивных типов на UML-диаграммах.

11.Чем рекомендуется руководствоваться при моделировании классов?

УПРАЖНЕНИЯ

1.Смоделируйте класс «Студент», специфицируйте свойства его атрибутов.

2.Смоделируйте класс «Статистическая выборка», включающий массив исходных данных и вычисляющий минимальное, максимальное, среднее значение и среднеквадратичное отклонение. Специфицируйте конструкторы и операции, укажите область видимости операций.

57

3.С использованием класса «Статистическая выборка» из упражнения 2 определите класс «Упорядоченная выборка», позволяющий получить упорядоченный массив элементов. Специфицируйте конструкторы и операции, укажите область видимости операций.

4.Информационная система хранит сведения о сотрудниках небольшого предприятия. Сотрудники могут работать на различных должностях. Часть информации должна быть общедоступна, часть доступна только пользователям с полномочиями. Редактирование данных также предполагает наличие специальных прав. Для построения модели данной системы введите классы и распределите обязанности между ними.

5.После выполнения упражнения 4 определите атрибуты и операции введенных классов, результаты отобразите на диаграмме классов UML.

6.Информационная система торгового предприятия производит учет товаров, клиентов, фиксирует осуществленные продажи. Для построения модели данной системы введите классы и распределите обязанности между ними.

7.После выполнения упражнения 6 определите атрибуты и операции введенных классов, результаты отобразите на диаграмме классов UML.

58

3. ИНТЕРФЕЙСЫ

Все моделируемые средствами UML элементы подразделяются с одной стороны на классификаторы и их экземпляры, с другой стороны – на интерфейсы и их реализацию. Таким образом, интерфейс определяет границу между спецификацией того, что должна делать абстракция (декларативная часть), и собственно реализацией (исполняющая часть). Интерфейс UML – это набор операций, используемых для специфицирования услуг, предоставляемых классом или компонентом.

Прежде всего, интерфейсы используются для визуализации, специфицирования, конструирования и документирования стыковочных узлов системы. Хорошо структурированный интерфейс предусматривает четкую границу между внешним и внутренним представлениями абстракции. Такой подход позволяет работать с абстракцией, не углубляясь в детали реализации.

Многие современные языки программирования, в том числе Java и CORBA IDL, поддерживают концепцию интерфейсов. Интерфейсы важны не только для отделения спецификации от реализации класса или компонента, но и для внешнего описания пакета модуля или подсистемы в случае наращивания системы по принципу собирания из различных блоков.

Графическое представление интерфейсов в языке UML показано на рис. 3.1.

I_User

I_Admin

I_Gues EditSpec

Рис. 3.1. Интерфейсы

Данная нотация позволяет раздельно визуализировать внешнее описание абстракции и собственно реализацию.

59

3.1. ТЕРМИНЫ И ПОНЯТИЯ

Интерфейсом (Interface) называется набор операций, используемый для специфицирования услуг, предоставляемых классом или компонентом.

Типом (Туре) называют стереотип класса, используемый для определения области значений объектов вместе с применимыми к ним операциями (но не методами).

Роль (Role) – это поведение сущности в данном контексте. Графически интерфейс изображается в виде кружочка; в развернутой форме его можно представить как стереотипный класс, чтобы раскрыть операции

идругие свойства.

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

3.2.ИМЕНА

Улюбого интерфейса должно быть уникальное в пределах области видимости имя. Имя интерфейса представляет собой текстовую строку, состоящую из различных символов, кроме некоторых специальных. Одиночное имя, которое может содержать и более одного слова, называется простым. Составное имя дополнительно включает имя пакета, в который входит данный интерфейс, причем имя пакета, в свою очередь, может быть также составным. Имя интерфейса от имени пакета отделяется двойным двоеточием. Имяинтерфейса должнобыть уникальнымвнутри объемлющего пакета.

Рис. 3.2. Простые и составные имена

При изображении интерфейса можно ограничиться только его именем, как показано на рис. 3.2.

60

Соседние файлы в папке Задания, лекции