4.1. Теоретические сведения
В UML существует 5 видов диаграмм, которые отображают динамические свойства системы: последовательностей и коопераций (эти два типа называются диаграммами взаимодействий), деятельности, состояний и прецедентов. В нашем курсе рассмотрим диаграммы последовательностей.
Эти диаграммы описывают взаимодействия множества объектов, включая сообщения, которыми они обмениваются.
В отличие от диаграммы классов, на которой изображаются абстрактные элементы в виде классов, на диаграмме последовательностей используются конкретные экземпляры классов – объекты. Объекты отображаются прямоугольником без полей. Для того чтобы подчеркнуть, что это экземпляр абстрактной сущности название объекта подчеркивается. При необходимости через двоеточие после названия можно указать сущность (класс) экземпляром которой является этот объект. Отметим, что объект может быть экземпляром не только класса, но и других абстракций, например, актера. Обратите внимание, что при указании в качестве классификатора актера измениться графическое обозначение объекта (рис. 3) .
Рис. 3. Графическое обозначение объекта UML
На диаграмме последовательностей у объекта может присутствовать линия жизни, на которой отмечаются происходящие с объектом события. Линия жизни отображается пунктирной линией (рис.).
Между собой объекты могут связаны связями. Связь – это экземпляр отношения ассоциация, и имеет такое же графическое обозначение, что и ассоциация. Они применяются, обычно, на диаграмме коопераций.
На диаграмме последовательностей объекты обмениваются сообщениями. Сообщение – это спецификация передачи данных от одного объекта другому, который предполагает какое-то ответное действие. Графически сообщение обозначается сплошной линией со стрелкой.
Часто операция вызывает какую-либо операцию в объекте. Очевидно, что класс, экземпляром которого является объект, должен иметь такую операцию. Привязка сообщения к операции класса объекта выполняется в свойствах сообщения (рис. 4).
Рис. 4. Сообщение UML и его свойства
При построении диаграммы классов обычно определяются только основные свойства сущностей, а такие детали, как операции удобно создавать при построении диаграммы последовательности, для чего в свойствах сообщения UML есть кнопка создания операции.
Диаграммы последовательностей, как и другие диаграммы для отображения динамических свойств системы, могут быть выполнены в контексте многих сущностей UML. Они могут описывать поведение системы в целом, подсистемы, класса или операции класса и др. К сожалению, Visio не достаточно гибка в плане поддержки раскрытия содержания отдельных элементов с помощью других диаграмм. Например, кликнув правой кнопкой мыши по классу можно обнаружить, что для его описания можно создать лишь диаграммы классов, состояний и деятельности. Поэтому возможность привязать диаграмму последовательностей к элементу, который она реализует, средствами Visio не возможно, эту связь нужно подразумевать.
В рамках нашего курса диаграммы последовательностей мы будем делать в контексте прецедентов с диаграммы прецедентов, реализуя те функции, которые должна выполнять наша система.
Как говорилось выше, при построении динамических диаграмм используется уже разработанная структура информационной системы. Для диаграммы последовательностей не нужно придумывать объекты, а достаточно определить, экземпляры каких классов участвуют в этом действии.
Определив необходимые объекты (как экземпляры классов, так и экземпляры актеров), вторым этапом построения диаграмм последовательностей определяются сообщения, пересылаемые между актерами. Фактически определяется последовательность шагов, для выполнения нужного действия.
ЗАДАНИЕ К РАБОТЕ
1) Выбрать три наиболее значимых прецедента на диаграмме прецедентов, для каждого из них создать диаграмму взаимодействий.
2) Для каждой диаграммы определить объекты, участвующие во взаимодействии, расположить их на диаграммах.
3) Определить сообщения между объектами на диаграммах, создайте необходимые операции для классов.
Содержание отчета
1) Цель работы.
2) Задание по лабораторной работе.
3) Диаграмма классов.
4) Описание всех этапов построения диаграмм.
5) Выводы по проделанной работе.
Контрольные вопросы
1) Что общего и в чем различие понятий класса и объекта?
2) Что такое классификатор объекта, какие значения он может принимать?
3) Какие элементы UML обычно присутствуют на диаграмме последовательностей?
4) Почему при добавлении объекта на диаграмму последовательностей он не появляется в проводнике по модели UML?
5) С операцией какого элемента связывается сообщение?
6) Каким образом можно указать аргумент для операции в сообщении?
7) Назовите все типы динамических диаграмм, поддерживаемых Visio
АНАЛИЗ ДИАГРАММ ВЗАИМОДЕЙСТВИЙ И КЛАССОВ
Теоретические сведения
Существует много различных методов проектирования, которые акцентируются на различных аспектах информационной системы. Так, функциональный анализ разбивает систему на отдельные функции, а объектно-ориентированный анализ на объекты. Каждый из подходов имеет свои преимущества, но все они не лишены и недостатков – не основным чертам уделяется меньшее внимание.
В объектно-ориентированном анализе в первую очередь строится структурная схема. При ее построении динамические аспекты поведения системы не учитываются, однако они могут оказать существенное влияние.
Например, при проектировании структуры системы составления расписания мы можем выделить сущности «студенты», «преподаватели» и «аудиторий». Однако начав расписывать диаграммы последовательностей для прецедентов «ввод данных», «выбор свободной пары» или другие, мы обнаружим, что над этими сущностями осуществляются одинаковые действия, например, просматривается их расписание. При этом можно значительно упростить диаграммы последовательностей, введя абстрактную сущность «участник пары» и сделав имеющиеся сущности наследниками.
Хотя в рассмотренном примере «участник пары» мог появиться уже на этапе построения диаграммы классов, тем не менее, выявление общих свойства классов при построении диаграммы последовательностей встречается довольно часто. В общем случае, при построении любых диаграмм могут открываться свойства системы, которые желательно учесть на ранее созданных диаграммах.
Изменение структуры системы (без изменения ее внешних свойств) называется рефакторингом. Основная цель рефакторинга – упростить систему, сделать ее более понятной. В общем случае рефакторинг может проводиться даже на стадии программирования, когда часть системы уже реализована.
Изменение уже частично спроектированной системы требует дополнительной работы. Не всегда результат оправдывает затраты на эту работу. Однако, во многих методиках проектирования и разработки информационных систем рекомендуется проводить рефакторинг как можно чаще и раньше, во всех случаях когда есть возможность упростить систему, поскольку это позволит значительно сэкономить на последующих стадиях – программирование, тестирование, отладка, внедрение.
В текущей лабораторной работе нужно попытаться упростить структурную схему (диаграмму классов) после построения диаграмм взаимодействий (последовательностей).
Некоторые динамические свойства системы отображаются на структурной схеме средствами Visio – в классах появятся операции, введенные на диаграммах последовательностей. Если количество операций в различных классах сильно отличается, то это может говорить о несбалансированности нагрузки на классы. Также нужно обратить внимание на частоту использования объектов на диаграмме последовательностей – если объекты какого-либо класса используются слишком часто, то, возможно, класс имеет слишком много обязанностей.
Проанализировав все диаграммы можно попытаться перераспределить обязанности между классами (или создать/сократить какие-либо классы). Главная цель и критерий необходимости всех изменений – упрощение системы, т.е. улучшение понимания диаграмм их читателем, уменьшение количество связей между элементами, приведение количество элементов к удобному для восприятия числу (от 3 до 5).
ЗАДАНИЕ К РАБОТЕ
1) Проанализировать диаграммы взаимодействий, выявить функционально недогруженные или перегруженные, имеющие общие свойства объекты и классы.
2) Провести перераспределение обязанностей между классами, переделать таблицы «сущность-связь-ответсвенность».
3) Переделать диаграммы классов и взаимодействий в соответствии с внесенными изменениями
