Разработка модели турникета платной автомагистрали

Особенности объектно-ориентированного подхода к проектированию и разработке информационных систем (ИС). Разработка программного обеспечения встроенного процессора турникета для въезда на платную автомагистраль. Основные варианты использования ИС.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.12.2011
Размер файла 576,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Федеральное агентство по образованию

Государственное образовательное учреждение

Высшего профессионального образования

"Ярославский государственный технический университет"

Кафедра "Информационные системы и технологии"

Курсовая работа защищена

РАЗРАБОТКА МОДЕЛИ ТУРНИКЕТА ПЛАТНОЙ АВТОМАГИСТРАЛИ

Расчетно-пояснительная записка к курсовой работе

по дисциплине “Объектное моделирование информационных систем ”

ЯГТУ 230201.65-009 КР

Руководитель, доцент Т.К. Смирнов

Работу выполнил студент гр. ЭИС-34

С.А. Василевич

2011

Задание

1. Изучить особенности объектно-ориентированного подхода к проектированию и разработке ИС. Познакомиться с основами языка UML

2. Провести объектно-ориентированный анализ предметной области.

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

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

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

Если данные не удается считать, или карта просрочена, или заблокирована, то карта возвращается водителю, и турникет остается в исходном состоянии. В другом случае с карты списывается сумма въезда на платную автомагистраль, карта возвращается из приемника, "Стоп" гаснет, зажигается индикатор "Проезд", и машина может проехать через турникет. Получив от одного из датчиков сигнал, турникет ожидает время, отведенное на проезд (15 секунд), после чего он возвращается в начальное состояние.

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

Содержание

  • Введение
  • 1. Принципы моделирования
  • 2. Разработка модели системы управления работой турникета платной автомагистрали
  • Варианты использования
  • Диаграмма классов
  • Диаграмма коопераций
  • Диаграмма последовательности
  • Диаграмма состояний
  • Диаграмма деятельности
  • Диаграмма компонентов
  • Заключение
  • Список использованных источников информации
  • Приложения

Введение

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

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

1. Принципы моделирования

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

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

· Абстракция - характеристика сущности, которая отличается от других сущностей.

· Наследование - это наличие у разных классов, образующих иерархию, общих атрибутов и операция.

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

· Полиморфизм - свойство объектов принимать различные внешние формы в зависимости от обстоятельств.

В чем же суть каждого из принципов? Суть абстракции в том, чтобы выбрать у реальных у группы объектов общие свойства и на их основе создать класс. Описание классов идет от общего к более частному. В начале, создается родительский класс, возможно реально не существующий, но который характеризует собой другие классы - классы-наследники или дочерние. Например, в Delphiтаковым является класс TObject.

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

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

Разработка модели системы, особенно если система крупная, не тривиальный процесс и состоит из нескольких этапов:

1. Концептуализация системы

2. Анализ

3. Проектирование системы

4. Проектирование классов

5. Реализация

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

Для полного описания системы строятся три модели:

1. Модель классов,

2. Модель состояний,

3. Модель взаимодействия.

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

информационная система модель автомагистраль

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

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

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

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

Варианты использования

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

· определить общие границы и контекст моделируемой предметной области;

· сформулировать общие требования к функциональному поведению проектируемой системы;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В языке UML существует несколько стандартных видов отношений между актерами и вариантами использования:

· ассоциации;

· расширения;

· общения;

· включения.

Рисунок 1 - Диаграмма вариантов использования турникета платной автомагистрали

Рассмотрим диаграмму вариантов использования системы учета товаров - рисунок 1. На ней есть следующие элементы:

· актеры,

· варианты использования,

· отношения.

На данной схеме представлены отношения:

· включения - это отношения со стереотипом "include", отношение между вариантами использования "Оформить заказ товара" и "Занести информацию о новом товаре в базу";

· расширения - это отношения со стереотипом "extend", отношение между вариантами использования "Получить информацию о товаре" и "Оформить заказ товара";

· ассоциации - это отношения, изображенные сплошной линией, отношения между

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

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

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

Диаграмма классов

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

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

подтипы (частный клиент является разновидностью клиента).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рисунок 2 - Диаграмма классов для модели турникета платной автомагистрали

На данной диаграмме классов, представленной на рис.2, определены следующие сущности:

· Граничный класс (Оптические датчики определения проезда, Устройство чтения карточки, Клавиатура, Таймер, Устройство подачи звукового сигнала, Индикаторы проезд/стоп, оптические датчики определения проезда, устройство приема наличных)

· Класс сущность (Транзакция турникета)

· Управляющий класс (Контроллер турникета)

Диаграмма коопераций

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

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

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

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

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

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

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

Кооперация на уровне спецификации изображается на диаграмме пунктирным эллипсом, внутри которого записывается имя этой кооперации. Такое представление кооперации относится к отдельному варианту использования и детализирует особенности его последующей реализации. Символ эллипса кооперации соединяется отрезками пунктирной линии с каждым из участников этой кооперации, в качестве которых могут выступать объекты или классы. Каждая из этих пунктирных линий помечается ролью (role) участника. Роли соответствуют именам элементов в контексте всей кооперации. Эти имена трактуются как параметры, которые ограничивают спецификацию элементов при любом их появлении в отдельных представлениях модели.

Простой класс на диаграмме кооперации обозначается прямоугольником класса, внутри которого записывается строка текста. Эта строка текста называется ролью классификатора (classifier role). Роль классификатора показывает особенность использования объектов данного класса. Обычно в прямоугольнике показывается только секция имени класса, хотя не исключается возможность указания секций атрибутов и операций.

Строка текста в прямоугольнике должна иметь следующий формат:

/ <Имя роли классификатора>: <Имя классификатора>

[: <Имя классификатора >] *

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

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

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

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

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

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

Как отмечалось выше, объект (object) является отдельным экземпляром класса, который создается на этапе выполнения программы. Он может иметь свое собственное имя и конкретные значения атрибутов. Применительно к объектам формат строки классификатора дополняется именем объекта и приобретает следующий вид (при этом вся запись подчеркивается):

<Имя объекта>/<Имя роли классификатора>: <Имя классификатора>

[: <Имя классификатора >] *

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

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

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

· : С - анонимный объект, образуемый на основе класса С;

· / R - анонимный объект, играющий роль R;

· / R: С - анонимный объект, образуемый на основе класса С и играющий роль R;

· О / R - объект с именем О, играющий роль R;

· О: С - объект с именем О, образуемый на основе класса С;

· О / R: С - объект с именем О, образуемый на основе класса С и играющий роль R;

· О или - объект с именем О;

· О: - "объект-сирота" с именем О;

· / R - роль с именем R;

· : С - анонимная роль на базе класса С;

· / R: С - роль с именем R на основе класса С.

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

В контексте языка UML все объекты делятся на две категории: пассивные и активные.

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

Активный объект (active object) имеет свою собственную нить (thread) управления и может инициировать деятельность по управлению другими объектами. Под нитью здесь понимается некоторый облегченный поток управления, который может выполняться параллельно с другими вычислительными нитями или нитями управления в пределах одного вычислительного процесса или процесса управления.

Активные объекты на канонических диаграммах обозначаются прямоугольником с более широкими границами. Иногда может быть явно указано ключевое слово {active}, чтобы выделить активный объект на диаграмме. Каждый активный объект может инициировать единственную нить или процесс управления и представлять исходную точку потока управления.

Составной объект (composite object) или объект-контейнер предназначен для представления объекта, имеющего собственную структуру и внутренние потоки (нити) управления. Составной объект является экземпляром составного класса (класса-контейнера), который связан отношением агрегации или композиции со своими частями. Аналогичные отношения связывают между собой и соответствующие объекты.

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

Связь (link) является экземпляром или примером произвольной ассоциации. Связь как элемент языка UML может иметь место между двумя и более объектами. Бинарная связь на диаграмме кооперации изображается отрезком прямой линии, соединяющей два прямоугольника объектов. На каждом из концов этой линии могут быть явно указаны имена ролей данной ассоциации. Рядом с линией в ее средней части может записываться имя соответствующей ассоциации.

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

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

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

· "parameter" - параметр метода. Соответствующий объект может быть только параметром некоторого метода;

· "local" - локальная переменная метода. Ее область видимости ограничена только соседним объектом;

· "global" - глобальная переменная. Ее область видимости распространяется на всю диаграмму кооперации;

· "self" - рефлексивная связь объекта с самим собой, которая допускает передачу объектом сообщения самому себе. На диаграмме кооперации рефлексивная связь изображается петлей в верхней части прямоугольника объекта.

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

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

Каждое сообщение может быть помечено строкой текста, которая имеет следующий формат:

< Предшествующие сообщения> < [Сторожевое условие] >

<Выражение последовательности>

<Возвращаемое значение - имя сообщения> <Список аргументов>

Предшествующие сообщения - это разделенные запятыми номера сообщений, записанные перед наклонной черточкой:

<Номер сообщения,>< Номер сообщения,>/

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

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

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

Выражение последовательности - это разделенный точками список отдельных термов последовательностей, после которого записывается двоеточие:

<Терм последовательности.><Терм последовательности.>:

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

[Целое число| Имя] [Символ рекуррентности].

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

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

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

· * [ Предложение-итерация] для записи итеративного выполнения соответствующего выражения. Итерация представляет последовательность сообщений одного уровня вложенности. Предложение-итерация может быть опущено, если условия итерации никак не специфицируются. Наиболее часто предложение-итерация записывается на некотором псевдокоде или языке программирования. В языке UML формат записи этого предложения не определен. Например, "* [/: =/. n]", что означает последовательную передачу сообщения с параметром /, который изменяется от 1 до некоторого целого числа n с шагом 1;

· [Предложение-условие У] для записи ветвления. Это условие представляет такое сообщение, передача которого по данной ветви возможна только при истинности этого условия. Чаще всего предложение-условие записывают на некотором псевдокоде или языке программирования, поскольку в языке UML формат записи этого предложения не определен. Например, [х>у] означает, что сообщение по некоторой ветви будет передано только в том случае, если значение х больше значения у.

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

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

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

Рисунок 3 - Диаграмма коопераций для варианта использования проезд по карточке

Рисунок 4 - Диаграмма кооперации для варианта использования проезд с использованием наличных

Рисунок 5 - Диаграмма кооперации для ситуации когда карта заблокирована

Рисунок 6 - Диаграмма кооперации для ситуации когда недостаточно внесено наличных

Рисунок 7 - Диаграмма кооперации для ситуации с блокированием кредитной карты

На данных диаграммах кооперации, представленных на рис.3-8, определены следующие сущности:

· Граничный класс (Оптические датчики определения проезда, Устройство чтения карточки, Клавиатура, Таймер, Устройство подачи звукового сигнала, Индикаторы проезд/стоп, оптические датчики определения проезда, устройство приема наличных)

· Класс сущность (Транзакция турникета)

· Управляющий класс (Контроллер турникета)

Диаграмма последовательности

Для моделирования взаимодействия объектов во времени в языке UML используются диаграммы последовательности.

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

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

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

Вторым измерением диаграммы последовательности является вертикальная временная ось, направленная сверху вниз. Начальному моменту времени соответствует самая верхняя часть диаграммы. Взаимодействия объектов реализуются посредством сообщений, которые посылаются одними объектами другим. Сообщения изображаются в виде горизонтальных стрелок с именем сообщения, а их порядок определяется временем возникновения. То есть, сообщения, расположенные на диаграмме последовательности выше, инициируются раньше тех, которые расположены ниже. Масштаб на оси времени не указывается, поскольку диаграмма последовательности моделирует лишь временную упорядоченность взаимодействий типа "раньше-позже".

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

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

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

В процессе функционирования объектно-ориентированных систем одни объекты могут находиться в активном состоянии, непосредственно выполняя определенные действия, или состоянии пассивного ожидания сообщений от других объектов. Чтобы явно выделить подобную активность объектов, в языке UML применяется специальное понятие, получившее название фокуса управления (focus of control). Фокус управления изображается в форме вытянутого узкого прямоугольника, верхняя сторона которого обозначает начало получения фокуса управления объекта (начало активности), а его нижняя сторона - окончание фокуса управления (окончание активности). Прямоугольник располагается ниже обозначения соответствующего объекта и может заменять его линию жизни, если на всем ее протяжении он является активным.

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

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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.