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

Проектирование ПО экономических ИС - Вендров А.М

..pdf
Скачиваний:
614
Добавлен:
24.05.2014
Размер:
4.73 Mб
Скачать

Объектно-ориентированный подход

121

кооперативные диаграммы (collaboration diagrams);

диаграммы состояний (statechart diagrams) — для моделирования поведения объектов системы при переходе из одного состояния в другое;

диаграммы деятельностей (activity diagrams) —для моделирования поведения системы в рамках различных вариантов использования или моделирования деятельностей;

диаграммы реализации (implementation diagrams):

диаграммы компонентов (component diagrams) — для моделирования иерархии компонентов (подсистем) системы;

диаграммыразмещения (deployment diagrams) - для моделирования физической архитектуры системы.

3.3. ВАРИАНТЫ ИСПОЛЬЗОВАНИЯ

В течение достаточно длительного периода времени в процессе как объектно-ориентированного, так и традиционного структурного проектирования разработчики использовали типичные сценарии, помогающие лучше понять требования к системе. Эти сценарии трактовались весьма неформально —они почти всегда использовались и крайне редко документировались. Ивар Якобсон впервые ввел понятие "вариант использования" (use case) и придал ему такую значимость, что он превратился в основной элемент разработки и планирования проекта.

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

122

Глава 3

Когда Якобсон в 1994 г. предложил варианты использования в качестве основных элементов процесса разработки ПО, он также предложил применять для их наглядного представления диаграммы вариантов использования. На рис. 3.1 показаны некоторые варианты использования для системы торговой организации; человеческие

Установить

предельные

цены

Менеджер по продажам

роанализиро-

Система учета

вать риск

«использует»

 

Оптовый

торговец

Действующее

лицо

Вариант

использования

Рис. 3.1. Диаграмма вариантов использования

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

Действующее лицо (actor) — это роль, которую пользователь играет по отношению к системе. На рис. 3.1 четыре действующих лица:

Объектно-ориентированный подход

123

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

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

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

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

Вдополнение к связям между действующими лицами и вариантами использования существуют два других типа связей (см. рис. 3.1): "использование" (uses) и "расширение" (extends) между вариантами использования. Связь типа "расширение" применяется тогда, когда один вариант использования подобен другому, но несет несколько большую нагрузку.

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

124 Глава3

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

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

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

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

Выбор применяемой связи определяется следующими правилами:

связь "расширение" следует применять при описании изменений в нормальном поведении системы;

связь "использование" следует применять для избежания повторов в двух (или более) вариантах использования.

Варианты использования являются необходимым средством

на стадии формирования требований к ПО. Каждый вариант

Объектно-ориентированный подход

125

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

Различные разработчики подходят к описанию вариантов использования с разной степенью детализации. Например, Ивар Якобсон утверждает, что для проекта с трудоемкостью в 10 человеко-лет количество вариантов использования может составлять около 20 (не считая связей "использование" и "расширение").Следует предпочитать небольшие и детализированные варианты использования, поскольку они облегчают составление и реализацию согласованного плана проекта.

3.4. ДИАГРАММЫ КЛАССОВ

3.4.1. ОБЩИЕ СВЕДЕНИЯ

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

ассоциации (например, клиент может сделать заказ);

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

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

На рис. 3.2 изображена типичная диаграмма классов.

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

Построение диафамм классов можно рассматривать в различных аспектах:

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

126

Глава 3

Заказ

Множественность:

 

обязательная

Клиент

 

 

 

ДатаПолучения

 

 

Проплачен

 

имя

номер: Строка

 

адрес

цена: Деньги

 

кредитныйРейтинг():

 

Ассоциация

отправитЦ)

Строка

 

закрыть))

 

 

 

Обобщение

 

Ограничение

 

Класс

 

 

 

{если

 

 

1 \

Заказ.клиент.

 

 

 

кредитныйРейтинг

 

 

в «низкий»,то

 

 

 

значение

 

 

 

Заказ.Про плачен

Корпоративный

Частный клиент

должно

 

клиент

 

быть истинным)

 

номерКредитнойКарты

 

 

 

 

 

 

контактноеИмя

 

Атрибуты

кредитныйРейтинг

 

кредитныйЛимит

 

 

 

 

 

 

кредитныйРейтингО • •

Операции .

сделать

«низкий»

 

напоминание!)

 

 

счетЗаМесяц(Целое)

 

 

отчет

 

Множественность:

 

0..1

необязательная

 

о закупках

 

Имя

Служащий

 

роли

Множественность:

 

 

многозначная

элементы

 

строки

 

 

Строка заказа

количество: Целое цена: Деньги

Удовлетворен: Двоичное

Продукт

Рис. 3.2. Диаграмма классов

Объектно-ориентированный подход

127

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

аспект спецификации —модель спускается на уровень ПО, но рассматриваются только интерфейсы, а не программная реализация классов (под интерфейсом здесь понимается набор операций класса, видимых извне);

аспект реализации — модель действительно определяет реализацию классов ПО. Этот аспект наиболее важен для программистов.

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

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

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

3.4.2.

АССОЦИАЦИИ

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

Ассоциации представляют собой связи между экземплярами классов (личность работает в компании, компания имеет ряд офисов).

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

128 Глава3

Заказ должен поступить от единственного Клиента, а Клиент в течение некоторого времени может сделать несколько Заказов. Каждый из этих Заказов содержит несколько Строк заказа, каждая из которых соответствует единственному Продукту.

Каждая ассоциация обладает двумя ролями; каждая роль представляет собой направление ассоциации. Таким образом, ассоциация между Клиентом и Заказом содержит две роли: одна от Клиента к Заказу, другая — от Заказа к Клиенту.

Роль может быть явно поименована с помощью метки. Например, роль ассоциации в направлении от Заказа к Строкам заказа называется "позиции заказа". Если такая метка отсутствует, роли присваивается имя класса-цели —таким образом, роль ассоциации от Заказа к Клиенту может быть названа Клиент (термины "начало" (source) и "цель" (target) употребляются для обозначения классов, являющихся соответственно начальным и конечным для ассоциации).

Роль также обладает множественностью, которая показывает, сколько объектов может участвовать в данной связи. На рис. 3.2 символ "*" над ассоциацией между Клиентом и Заказом означает, что с одним Клиентом может быть связано много Заказов; символ " 1" показывает, что любой Заказ может поступить только от одного Клиента.

В общем случае множественность указывает нижнюю и верхнюю границы количества объектов, которые могут участвовать в связи. Символ "*" в действительности выражает диапазон "ноль-бесконеч- ность": Клиент может и не сделать ни одного Заказа, а может сделать неограниченное количество Заказов (теоретически). Единица означает диапазон "один-один": Заказ должен быть сделан одним и только одним Клиентом.

На практике наиболее распространенными вариантами множественности являются " 1 " , "*" и "0..1" (либо ноль, либо единица). В общем случае может использоваться единственное число (например, 11 для количества игроков в команде), диапазон (например, 2..4 для игроков в карты) или дискретная комбинация из чисел и диапазонов (например, 2,4 для количества дверей в автомобиле).

Ассоциации в аспекте спецификации представляют собой ответственности классов.

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

Объектно-ориентированный подход

129

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

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

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

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

Рассмотрим теперь рис. 3.3. В основном он совпадает с рис. 3.2, за исключением того, что к ассоциациям добавлены стрелки. Эти стрелки показывают направление навигации.

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

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

Если навигация указана только в одном направлении, то такая ассоциация называется однонаправленной. У двунаправленной ассоциации навигация указана в обоих направлениях. Вязыке UML отсутствие стрелок у ассоциации трактуется следующим образом: направление

130

Глава 3

Заказ

 

 

 

 

Клиент

ДатаПолучения

 

 

 

 

Проплачен

 

 

имя

 

номер: Строка

 

 

адрес

 

цена: Деньги

 

 

 

 

 

Направление

крвдитныйРейтинг():

отправить))

 

Строка

навиаации

 

закрыт ь()

 

I

 

 

 

{если

 

 

 

Закаэ.клиент.

 

 

 

кредитныйРейтинг

 

 

 

•«низкий»,то

 

 

 

 

значение

 

 

 

 

Заказ.Проплачен

Корпоративный

Частный клиент

должно

 

 

клиент

 

 

быть истинным)

 

 

 

 

номерКредитнойКарты

 

 

 

 

 

 

контакт»овИмя

 

 

 

 

кредитныйРейтинг

 

 

 

кредитныйЛимит

 

 

 

 

 

крвдитныйРейтинг()

 

 

сделать

 

«низкий»

 

 

напоминание()

 

 

 

 

счетЗаМвсяц(Целов)

 

отчет

о закупках

0..1

 

Служащий

элементы

строки

Строка заказа

 

количество: Целое

 

цена: Деньги

 

Удовлетворен: Двоичное

Продукт

 

Рис. 3.3. Диаграмма классов с направлениями навигации

Соседние файлы в предмете Экономика