М. Фаулер, К. Скотт - UML Основы (1114905), страница 18
Текст из файла (страница 18)
Самая большая опасность, связанная с диаграммами классов, заключается в том, что вы можете слишком рано увязнуть в деталях реализации. Чтобы этому противостоять, концентрируйте внимание на концептуальной точке зрения и точке зрения спецификации. Если вы все же столкнулись с подобными проблемами, то в атом случае большую пользу могут оказать СЕС-карточки (см. врезку в главе 6).
Где найти дополнительную информацию Для более детального изучения диаграмм классов подходят все из упомянутых в главе 1 книг по общему описанию языка 11МЬ. Из более ранних книг мне особенно нравится книга Кука и Дэниелса, 1994 [131, поскольку авторы рассматривают в ней различные точки зрения и вводят для этого необходимый формализм. Диаграммы взаимодействия Диаграммы взаимодействия (1п)егас(1оп 61аягашз) представляют собой модели, предназначенные для описания поведения взаимодействующих групп объектов.
Как правило, диаграмма взаимодействия описывает поведение только одного варианта использования. На такой диаграмме отображаются только экземпляры объектов и сообщения, которыми они обмениваются между собой в рамках данного варианта использования. Я проиллюстрирую данный подход на примере простого варианта использования, который обладает следующим поведением: ° Окно Ввода Заказа посылает Заказу сообщение еприготовитьсяэ.
° Заказ посылает данное сообщение каждой Строке Заказа в данном Заказе. ° Каждая Строка Заказа проверяет состояние определенного Запаса Товара, Если данная проверка заканчивается успешно с результатом «истина» (багие), то Строка Заказа удаляет соответствующее количество Запаса Товара и создает Позицию Доставки.
Если данная проверка заканчивается неудачей, т. е. количество Запаса Товара ниже требуемого уровня, то Запас Товара запрашивает новую поставку товара. Существует два вида диаграмм взаимодействия: диаграммы последовательности (зециепсе д1аататз) и диаграммы кооперации (соПаЬога$1- оп 61аягатз). вг Глава 5. Диаграммы взаимодейсгвия Диаграммы последовательности На диаграмме последовательности объекты изображаются прямоугольниками на вершине вертикальной пунктирной линии (рис.
5.1). ~приляавиться () ~ Савиние Х Улзоиаи Рис. 5.1. Диаграмма последовательности Эта вертикальная линия называется линией жизни (Ше11пе) объекта. Она представляет собой жизненный цикл объекта в процессе взаимодействия. Такая форма была впервые предложена А. Джекобсоном. Каждое сообщение представляется стрелкой между линиями жизни двух объектов. Порядок следования сообщений устанавливается сверху вниз, то есть так, как они показываются на диаграмме. Каждое сообщение помечается как минимум именем сообщения; можно также Диаграммы последовательности указать аргументы и некоторую управляющую информацию. На диаграмме последовательности могут присутствовать рекурсивные вызовы — сообщения, которые объекты посылают самим себе.
При передаче такого сообщения стрелка указывает на ту же самую линию жизни. Чтобы показать период времени, в течение которого объект является активным (для процедурного взаимодействия это следует указывать, когда процедура помещается в стек), изображается прямоугольник активности.
Можно вообще не указывать прямоугольник активности; в этом случае диаграммы легче рисовать, но зато труднее понимать. Управляющая информация может быть представлена двумя способами. Во-первых, существует некоторое условие, которое указывает, когда сообщение может быть передано (например, (нуженПовторнььйЗаказ)). Сообщение посылается, только если это условие истинно. Условия могут оказаться полезными в простых случаях, однако в более сложных ситуациях я предпочитаю изображать для каждого случая отдельную диаграмму последовательности.
Во-вторых, может оказаться полезным некоторый управляющий маркер, называемый маркером итерации, показывающий, что сообщение посылается несколько раз для множества принимающих объектов. Такая итерация указывается в квадратных скобках с предшествующей звездочкой, например *(для всех позиций заказа). На рис. 5.1 мы видим возврат, который указывает не новое сообщение, а возврат от переданного ранее сообщения.
Возвраты отличаются от обычных сообщений тем, что они изображаются пунктирной линией. Некоторые разработчики изображают возврат для каждого сообщения, но, как мне кажется, это лишь загромождает диаграммы. Поэтому я их указываю только в том случае, когда уверен, что они приводят к большей ясности. Единственная причина, по которой изображен возврат на рис.5.1, — это демонстрация нотации. Если даже удалить возврат, диаграмма не станет менее понятной. Это хороший тест. Как можно видеть, диаграмма последовательности на рис.
5,1 является очень понятной и наглядной. А это очень важно для разработчиков. Одна из наиболее трудных проблем заключается в понимании организации потоков управления в объектно-ориентированной программе. Хороший проект может содержать много небольших методов в различных классах, и временами бывает довольно сложно понять последовательность поведения системы в целом. Можно долго вглядываться в код, пытаясь понять, что же делает программа. Особенно это характерно для тех, кто впервые сталкивается с объектным подходом. Диаграммы последовательности помогут вам разобраться в процессе поведения системы.
Диаграммы последовательности также имеют большое значение для моделирования параллельных процессов. На рис. 5.2 изображено несколько объектов, которые выполняют проверку банковской транзакции. 84 Глава 5. Диаграммы взаимодействия Рис. о.2. Параллельные процессы и активизации Когда создается некоторая Транзакция, она порождает Координатор Транзакции с целью координации проверки втой Транзакции. Этот координатор создает несколько (в данном случае два) объектов Контроллера Транзакции, каждый из которых несет ответственность за свою проверку.
Этот процесс упрощает создание различных дополнительных процессов проверки, поскольку каждая проверка вызывается асинхронно и выполняется параллельно. Когда Контроллер Транзакции завершает свою работу, он посылает сообщение Координатору Транзакции. Координатор проверяет, все ли Контроллеры сообщили о своих проверках.
Если нет, то координатор не выполняет никаких действий. Если же все проверки завершились и завершились успешно, как в данном случае, то координатор посылает сообщение Транзакции о нормальном завершении, Половина стрелки на конце сообщения служит для обозначения асинхронного сообщения. Асинхронное сообщение не блокирует вызывающий объект, то есть последний может продолжать выполнение 85 диаграммы последовательности своего собственного процесса. Асинхронное сообщение может выполнять одно из трех действий: 1. Создание нового потока, при атом сообщение соединяется с прямо- угольником активизации, 2. Создание нового объекта, 3.
Установление связи с потоком, который уже выполняется. Удаление объекта изображается большой буквой Х. Объекты могут самоуничтожаться (как показано на рис. 5. 2) либо могут быть уничтожены другим сообщением (рис. 5.3). На рис. 5.2 и 5.3 показаны два сценария варианта использования епроверка транзакции». Каждый из этих сценариев изображен отдельно. Для включения условной логики в простую диаграмму существуют специальные методы.
Но я предпочитаю не пользоваться ими, так как они слишком усложняют диаграмму. На рис. 5.3 я применил очень полезный прием: поместил текстовые описания происходящих процессов вдоль левой части диаграммы по- Когда Транзакция создается... ...она создав Координатор управления Координатор посл едовател Контроллеров дпя гнедого Эти Контрол выполнеот кажды проверку км процесс. Если заданная закончилась Координатор асе остальные находящиеся выполнения. ...и сообща Транзакции что она не ве Рис.
Б.З, Диаграмма последовательности: неудач наи проверка 86 Глава 5. Диаграммы взаимодействия следовательности. При этом предполагается, что каждый блок текста располагается на одной горизонтальной линии с соответствующим сообщением на диаграмме. Это упрощает понимание диаграмм, хотя и требует некоторой дополнительной работы. Я использую этот прием для тех документов, которые собираюсь хранить. Диаграммы кооперации Еще одним видом диаграммы взаимодействия является диаграмма кооперации.
На такой диаграмме экземпляры объектов изображаются в виде пиктограмм. Так же как и на диаграмме последовательности, стрелки обозначают сообщения, обмен которыми осуществляется в рамках данного варианта использования. Однако их временная последовательность указывается посредством нумерации сообщений (рис. 5.4). Рис. о.в. Диаграмма кооперации с простой нумерацией Подобная нумерация делает более трудным восприятие последовательности сообщений, чем в случае расположения линий на странице сверху вниз.
С другой стороны, при таком пространственном расположении легче изобразить некоторые другие аспекты модели. Можно показать взаимосвязи объектов, схему использования перекрывающихся пакетов или другую информацию. ву Диаграммы кооперации Для диаграмм кооперации можно использовать один из нескольких вариантов нумерации. Самый простой из них показан на рис. 5.4. Другой вариант десятичной нумерации представлен на рис. 5.5. Рис. 5.5. Диаграмма кооперации с десягпичной нумерацией Раньше разработчики пользовались простой схемой нумерации.
В языке УМЬ применяется десятичная схема нумерации, поскольку в этом случае понятно, какая из операций вызывает другую операцию, хотя при этом труднее разглядеть их последовательность в целом. Независимо от используемой схемы нумерации на диаграмме кооперации можно разместить такого же рода управляющую информацию, как и на диаграмме последовательности.