- •Министерство образования и науки
- •1. Введение в uml
- •1.1 Что такое uml?
- •1.2 НазначениеUml
- •1.3 Модель uml и ее элементы
- •1.4. Диаграммы
- •1.5 Представления
- •1.6 Общие механизмы
- •2. Моделирование использования
- •2.1 Значение моделирования использования
- •Техническое задание
- •2.2 Диаграммы использования
- •2.3 Реализация вариантов использования
- •3. Моделирование структуры
- •3.1 Объектно-ориентированное моделирование структуры
- •3.2 Диаграммы классов
- •3.3 Диаграммы реализации
- •4. Моделирование поведения
- •4.1 Объектно-ориентированное моделирование поведения
- •4.2 Диаграммы состояний
- •4.3. Диаграммы деятельности
- •4.4 Диаграммы взаимодействия
- •4.5 Моделирование параллелизма
1.4. Диаграммы
Мы обрисовали множество слов UML. Переходим к синтаксису, то есть к описанию того, как из слов конструируются предложения.
На первый взгляд, все очень просто: берутся сущности и, если нужно, указываются отношения между ними. В результате получается модель, то есть граф (с разнородными вершинами и ребрами), нагруженный дополнительной информацией. Но при более внимательном рассмотрении обнаруживаются проблемы.
Рассмотрим следующую аналогию с естественным языком. Каждая тройка сущность — отношение — сущность в модели вполне может рассматриваться как простое утверждение: 2<5, ртуть тяжелее железа (все это примеры отношений). Вспомним, что в графе (в модели) никакой упорядочивающей структуры нет: нельзя сказать, что это вершина первая, а это — вторая. Помимо сущностей и отношений, в модели должна быть какая-то структура, которая бы помогала ее составлению и пониманию.
Диаграммы UML и есть та основная накладываемая на модель структура, которая облегчает создание и использование модели.
Диаграмма — это графическое представление некоторой части графа модели.
Вообще говоря, в диаграмму можно было бы включить любые (допустимые) комбинации сущностей и отношений. Поэтому авторы UML определили набор рекомендуемых к использованию типов диаграмм, которые получили название канонических типов диаграмм.
В UML 1.x всего определено 9 канонических типов диаграмм. Ниже перечислены их названия, принятые в этом пособии (в других источниках есть отличия).
Диаграмма использования
Диаграмма классов
Диаграмма объектов
Диаграмма состояний
Диаграмма деятельности
Диаграмма последовательности
Диаграмма кооперации
Диаграмма компонентов
Диаграмма размещения
Канонические диаграммы отнюдь не образуют полного набора: они пересекаются как по включенным в них средствам, так и по области применения. Более того, некоторые из них являются частными случаями других, есть просто семантические эквивалентные пары, можно привести примеры допустимых диаграмм, для которых затруднительно указать однозначно, к какому именно из канонических типов диаграмма относится.
Сказанное можно проиллюстрировать условной классификацией диаграмм, приведенной на рисунке 1.5.
Рисунок. 1.5. - Иерархия типов диаграмм.
Диаграмма использования — это наиболее общее представление функционального назначения системы. Диаграмма использования призвана ответить на главный вопрос моделирования: что делает система во внешнем мире?
На диаграмме использования применяются два типа основных сущностей: варианты использования и действующие лица, между которыми устанавливаются следующие основные типы отношений:
ассоциация между действующим лицом и вариантом использования;
обобщение между действующими лицами;
обобщение между вариантами использования;
зависимости (различных типов) между вариантами использования.
Кроме того, на диаграмме использования можно применить специальный графический комментарий — обозначить границу системы (действующие лица находятся снаружи, а варианты использования — внутри), если это почему-либо не очевидно.
Основные элементы нотации, применяемые на диаграмме использования, показаны на рисунке 1.6.
Рисунок.1.6 - Нотация диаграммы использования (UML 2.0)
Диаграмма классов — основной способ описания структуры системы. На диаграмме классов применяются один основной тип сущностей: классы (включая многочисленные частные случаи классов: интерфейсы, типы, классы- ассоциации и многие другие), между которыми устанавливаются следующие основные типы отношений:
ассоциация между классами (с множеством дополнительных подробностей);
обобщение между классами;
зависимости (различных типов) между классами и интерфейсами.
Основные элементы нотации, применяемые на диаграмме классов, показаны на рисунке 1.7.
Рисунок 1.7 - Нотация диаграммы классов
Диаграмма объектов — это частный случай диаграммы классов. Диаграммы объектов имеют вспомогательный характер — по сути это примеры (можно сказать дампы памяти), показывающие, какие имеются объекты и связи между ними в некоторый конкретный момент функционирования системы.
На диаграмме объектов применяют один основной тип сущностей: объекты (экземпляры классов), между которыми указываются конкретные связи (экземпляры ассоциаций).
Основные элементы нотации, применяемые на диаграмме объектов, показаны на рисунке 1.8.
Рисунок 1.8 - Нотация диаграммы объектов
Диаграмма состояний — это основной способ детального описания поведения в UML. В сущности, диаграммы состояний представляют собой граф состояний и переходов конечного автомата, нагруженный множеством дополнительных деталей и подробностей.
На диаграмме состояний применяют один основной тип сущностей — состояния, и один тип отношений — переходы, но и для тех и для других определено множество разновидностей, специальных случаев и дополнительных обозначений. Перечислять их все во вступительном обзоре не имеет смысла.
Детальное описание всех вариаций диаграмм состояний приведено в главе 4, а на рисунке 1.9 показаны только основные элементы нотации, применяемые на диаграмме состояний.
Рисунок 1.9 - Нотация диаграммы состояний (UML 1.х)
Диаграмма деятельности — это, фактически, блок-схема алгоритма, в которой модернизированы обозначения, а семантика согласована с современным объектно-ориентированным подходом, что позволило органично включить диаграммы деятельности в UML.
На диаграмме деятельности применяют один основной тип сущностей — деятельность, и один тип отношений — переходы (передачи управления), а также графические обозначения (развилки, слияния и ветвления), которые похожи на сущности, но таковыми на самом деле не являются, а представляют собой графический способ изображения некоторых частных случаев гипердуг в гиперграфе. Семантика элементов диаграмм деятельности подробно разобрана в главе 4.
Помимо потока управления на диаграмме деятельности можно показать и поток данных, используя такую сущность, как объект (в определенном состоянии) и соответствующую зависимость. Кроме того, на диаграмме деятельности можно применить специальный графический комментарий — так называемые дорожки — подчеркивающие, что некоторые деятельности отличаются друг от друга, например, выполняются в разных местах. Основные элементы нотации, применяемые на диаграмме деятельности, показаны на рисунке 1.10.
Рисунок 1.10 - Нотация диаграммы деятельности (UML 2.0)
Диаграмма последовательности — это способ описать поведение системы "на примерах". Фактически, диаграмма последовательности — это запись протокола конкретного сеанса работы системы (или фрагмента такого протокола). В объектно-ориентированном программировании самым существенным во время выполнения является посылка сообщений взаимодействующими объектами. Именно последовательность посылки сообщений отображается на данной диаграмме, отсюда и название.
На диаграмме последовательности применяют один основной тип сущностей — объекты (экземпляры взаимодействующих классов и действующих лиц), и один тип отношений — сообщения, которыми обмениваются взаимодействующие объекты. Предусмотрено несколько типов сообщений, которые в графической нотации различаются видом стрелки, соответствующей отношению.
Важным аспектом диаграммы последовательности является явное отображение течения времени. В отличии от всех других типов диаграмм, на диаграмме последовательности имеет значение не только наличие графических связей между элементами, но и взаимное положение элементов на диаграмме. А именно, считается, что имеется (невидимая) ось времени, по умолчанию направленная сверху вниз, и то сообщение, которое отправлено позже, нарисовано ниже.
На рисунке 1.11 показаны основные элементы нотации, применяемые на диаграмме последовательности. Для обозначения самих взаимодействующих объектов применяется стандартная нотация — прямоугольник с подчеркнутым именем объекта. Пунктирная линия, выходящая из объекта, называется линией жизни. Это не обозначение отношение в модели, а графический комментарий, призванный направить взгляд читателя диаграммы в правильном направлении. Фигуры в виде узких полосок, наложенных на линию жизни, также не являются изображениями моделируемых сущностей. Это графический комментарий, показывающий отрезки времени, в течении которых объект имеет управление (как говорят, имеет место активация объекта). Создание объекта в процессе взаимодействия отмечается тем, что значок объекта расположен ниже (т. е. объект появляется позже). Уничтожение объекта отмечает большим косым крестом и прекращением линии жизни.
Рисунок 1.11 - Нотация диаграммы последовательности (UML 2.0)
Диаграмма кооперации, которая в UML 2 переименована в диаграмму коммуникации, семантически эквивалентна диаграмме последовательности. Фактически, это такое же описание последовательности обмена сообщениями взаимодействующих объектов, только выраженное другими графическими средствами. Более того, большинство инструментов умеет автоматически преобразовывать диаграммы последовательности в диаграммы кооперации и обратно. Такое преобразование является взаимно-однозначным.
Таким образом, на диаграмме кооперации также применяют один основной тип сущностей — объекты (экземпляры взаимодействующих классов и действующих лиц), и один тип отношений — сообщения, которыми обмениваются взаимодействующие объекты. Однако здесь акцент делается не на времени, а на связях между конкретными объектами.
На рисунке 1.12 показаны основные элементы нотации, применяемые на диаграмме кооперации. Для обозначения самих взаимодействующих объектов применяется стандартная нотация — прямоугольник с подчеркнутым именем объекта. Взаимное положение объектов на диаграмме кооперации не имеет значения — важны только связи (экземпляры ассоциаций), вдоль которых передаются сообщения. Для отображения упорядоченности сообщений во времени применяется иерархическая десятичная нумерация. Сравните Рисунок 1.11 и Рисунок 1.12 (на них изображена одна и та же диаграмма).
Диаграмма компонентов — это, фактически, список артефактов, из которых состоит моделируемая система, с указанием некоторых отношений между артефактами. Наиболее существенным типом артефактов программных систем являются программы. Таким образом, на диаграмме компонентов основной тип сущностей — это компоненты (как исполнимые модули, так и другие артефакты), а также интерфейсы (чтобы указывать взаимосвязь между компонентами) и объекты (входящие в состав компонентов). На диаграмме компонентов применяются следующие отношения:
реализации между компонентами и интерфейсами (компонент реализует интерфейс);
зависимости между компонентами и интерфейсами (компонент использует интерфейс);
зависимости между объектами и компонентами (объект входит в компонент).
На рисунке 1.13 показаны основные элементы нотации, применяемые на диаграмме компонентов. Отношение зависимости, соответствующее включению (например, объекта в компонент), часто изображают, помещая фигуру одной сущности внутрь фигуры другой сущности.
Рисунок 1.13. Нотация диаграммы компонентов (UML 2.0)
Диаграмма размещения немногим отличается от диаграммы компонентов. Фактически, наряду с отображением состава и связей компонентов здесь показывается, как физически размещены компоненты на вычислительных ресурсах во время выполнения. Таким образом, на диаграмме размещения, по сравнению с диаграммой компонентов, добавляется один тип сущностей — узел (может быть как классификатор, описывающий тип узла, так и конкретный экземпляр), а также отношение ассоциации между узлами, показывающее, что узлы физически связаны во время выполнения.
На рисунке 1.14 показаны основные элементы нотации, применяемые на диаграмме размещения. Прием с включением фигуры одной сущности внутрь фигуры другой сущности здесь применяется особенно часто.
Рисунок 1.14. Нотация диаграммы размещения