Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабUML.doc
Скачиваний:
30
Добавлен:
16.03.2015
Размер:
1.46 Mб
Скачать

Лабораторная работа № 2 Построение модели анализа

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

В UML, также, как и в объектно-ориентированном программировании [ ],класс (class) – описание множества объектов, обладающих общими атрибутами, операциями, отношениями и поведением. Класс является результатом операции обобщения.

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

Для некоторых классов создание прямых экземпляров невозможно, такие классы используются только для описания общей структуры потомков и называется абстрактными. Класс, имеющий конкретные экземпляры, условно называетсяконкретным(хотя на самом деле он абстрактен).

Класс имеет имя, списки атрибутов, операций или методов.

Операция(operation) – спецификация (описание) результата преобразования или запроса, которые должен выполнить вызываемый объект. Имеет имя и список параметров.

Метод(method) – процедура, непосредственно реализующая операцию; у нее есть алгоритм и описание процедуры. Обычно метод задаётся на физическом уровне представления класса в модели проектирования, когда уже выбран алгоритм и способ его реализации.

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

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

Графически класс изображается прямоугольником, который дополнительно делится горизонтальными линиями на разделы или секции. В них указываются имя класса, его атрибуты и операции. Различные варианты обозначений классов представлены на рис. 2. В разделе имени в двойных угловых кавычках дополнительно может быть указан стереотип класса – группа, к которой принадлежит класс.

Атрибуты класса(classattributes) (свойства,properties) – свойства или характеристики данного класса, которые могут принимать только одно значение из некоторого множества значений определенного типа.

Совокупность значений атрибутов определяет экземпляр класса – объект или абстрактный класс – потомок.

Рисунок 2 – Варианты обозначений класса в UML

Атрибуты сами можно толковать как простые, конкретные классы (строки, даты, денежные единицы, целые, вещественные, вес, масса, ФИО, и так далее), экземпляры которых определяют экземпляр основного объекта, которому они принадлежат.

Атрибуты находятся в отношении ассоциации с основным классом, которая всегда подразумевается, но в явном виде не изображается на диаграмме. В свою очередь, каждый атрибут как класс, также обладает свойствами. Основной набор этих свойств фиксирован, однако, дополнительные свойства разработчик может указать отдельной строкой в описании атрибута [ ].

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

Процедура явного создания экземпляра (конструктор) может замещать начальное значение своим (“перебивать” это указание).

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

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

Тип (type) – имя класса или типа данных, экземплярами которых являются значения данного атрибута. Указывается через двоеточие, например, ФИО_сотрудника: String (определяется выбранным для реализации языком программирования).

Видимость (visibility) (область видимости):

  • + public (открытый, общедоступный) – атрибут доступен или виден из любого другого класса пакета, в котором определена диаграмма;

  • # protected (защищённый) – атрибут недоступен или невиден для всех классов, за исключением подклассов данного класса;

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

Множественность(multiplicity) – выражение в квадратных скобках после имени атрибута, задаёт количество одновременно задаваемых значений сложного или составного атрибута (вектора или массива). Например, ФИО_сотрудника[1..3] – составной атрибут, который может иметь одновременно от одного до трёх значений: фамилия и дополнительно имя , отчество сотрудника.

Полный синтаксис описания атрибута класса в UML выглядит следующим образом [ ].

«стереотип» видимость имя множественность : тип = начальное значение {строка особых свойств}

В этом описании все свойства, кроме имени, необязательны для указания. Строка особых свойств, задаваемых через запятую (изменяемость, именованные значения и т.д.), играет роль комментария. Неполное описание атрибута сильно затрудняет, либо делает невозможным процесс автоматической кодогенерации в среде Rational Rose.

Примеры описания атрибутов приведены ниже.

+size: Area=(100,100) открытый, исходное значение

#visibility: Boolean=invisible защищённый, исходное значение

+оклад: Integer {персональный=20000} открытый, комментарий с именованным значением.

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

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

«стереотип» видимость имя (список параметров): возвращаемый тип {строка свойств}.

Видимость операции задаётся так же, как и для атрибута.

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

Список параметров - взятый в круглые скобки список объявлений параметров, разделённых запятыми. Скобки остаются и в том случае, если список параметров пустой.

Синтаксис записи параметров:

<вид параметра> <имя параметра> : <выражение типа> = <значение по умолчанию>.

Вид параметра указывается ключевыми словами in, out, inout в зависимости от того, является ли параметр входным, выходным или и тем и другим (по умолчанию принимается inзадаваемый при вызове операции по значению неизменяемый параметр).

В строке свойств даются описания дополнительных свойств операции. Например, если операция не должна изменять состояние системы при вызове, то ставится ключевое слово query (запрос). Может также указываться свойство параллелизма конструкцией вида {concurrency = имя}. Здесь имя – одно из ключевых слов:

  • sequential (последовательная, по умолчанию);

  • concurrent (параллельная, её можно без каких-либо ограничений выполнять параллельно с другими операциями);

  • guarded (охраняемая, параллелизм допускается, но все вызовы данной операции выстраиваются в очередь, выполняются поочерёдно и строго контролируются).

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

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

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

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

Рисунок 3 – Пример более детального обозначения класса

Операции могут быть сигналами. Сигналявляется фундаментальным видом коммуникации, имеет характер одностороннего сообщения, идущего от одного объекта к другому. Поэтому операция по сигналу не имеет возвращаемого значения. Перед ней ставится стереотип «signal». Более подробно сигналы, события и сообщения будут изучаться далее.

Классы могут находиться между собой в различных отношениях (связях). Базовыми отношениями являются:

  • отношения зависимости (dependency relationship);

  • отношения ассоциации (association relationship);

  • отношения обобщения (generalization relationship);

  • отношения реализации (realization relationship).

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

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