Инкапсуляцией
![]()
|
Взаимодействие объектов Существуют два типа диаграмм Взаимодействия: диаграммы Последовательности и Кооперативные диаграммы. Оба отображают события, участвующие в процессе обработки информации варианта использования, и сообщения, которыми обмениваются объекты. События на диаграмме Последовательности упорядочены по времени, а Кооперативная диаграмма организована вокруг самих объектов. Диаграммы Взаимодействия На диаграмме Взаимодействия (Interaction) отображают один из процессов обработки информации варианте использования. В варианте использования "Снять деньги" из примера ATM имеется несколько альтернативных потоков. Это значит, что для данного варианта использования нужно создать несколько диаграмм Взаимодействия. В результате на одной диаграмме будет показано, что происходит, когда все в порядке. На других будет отображен ход событий в альтернативных потоках: что произойдет, если клиент введет неправильный идентификационный номер, если денег на его счету меньше чем он хочет снять, и т.д. Рассмотрим два типа диаграмм Взаимодействия — диаграммы Последовательности (Sequence) Кооперативные диаграммы (Collaboration). Диаграммы первого типа организованы по времени. Пример такой диаграммы приведен на рис. ![]() На Кооперативной диаграмме отображается та же информация, но организована она по-другому см. рис. ![]() На диаграммах обоих типов представлена одна и та же информация, однако между ними существу: ют два различия. Диаграммы Последовательности заостряют внимание на управлении, Кооперативные диаграммы отображают поток данных. Диаграммы Взаимодействия визуализируют практически те же детали, что уже были описаны в - потоке событий, однако представляют их в форме, более удобной для разработчика. Главное здесь - объекты, которые должны быть созданы для реализации функциональных возможностей, заложенных в вариант использования. На диаграммах Последовательности и Кооперативных диаграммах могут быть показаны объекты, классы или то и другое вместе. Объектом называют нечто, заключающее (инкапсулирующее) в себе некоторые данные и поведение. Это термин, описывающий реальные, конкретные предметы. Класс — это некая сущность, представляющая собой как бы схему (blueprint) объекта. Иными словами, класс определяет данные и поведение, которыми должен обладать объект. Использование диаграмм Взаимодействия С помощью диаграмм Взаимодействия проектировщики и разработчики системы могут определить классы, которые нужно создать, связи между ними, а также операции и ответственности (responsibilities) каждого класса. Диаграммы Взаимодействия — краеугольный камень, на котором возводится оставшаяся часть проекта. Диаграммы Последовательности упорядочены по времени. Они полезны для того, кто хочет понять логическую последовательность событий в сценарии. Хотя информация о последовательности входит и в Кооперативные диаграммы, она лучше воспринимается на диаграмме Последовательности. Кооперативные диаграммы полезны в тех случаях, когда нужно оценить последствия сделанных изменений. Кооперативная диаграмма показывает, какие объекты взаимодействуют друг с другом. При внесении изменений в объект вы сразу поймете, на какие другие объекты это повлияет. Диаграммы Взаимодействия содержат:
Создавая диаграммы Взаимодействия, следует помнить, что вы таким образом назначаете объектам определенные ответственности. Помещая на диаграмму сообщение, вы назначаете ответственность получающему его объекту. Следите за тем, чтобы объекты и их ответственности соответствовали друг другу. Например, в большинстве приложений экраны и формы не должны реализовывать никаких бизнес-процессов. С их помощью следует только вводить и просматривать информацию. Отделяя интерфейс от бизнес-логики, вы создаете архитектуру, уменьшающую "эффект ряби" от изменений. Тогда внесение изменений в бизнес-логику не затронет интерфейс. С другой стороны, если вы меняете формат одного или двух экранов, то хотя бы бизнес-логика останется неизменной. Еще пример: если вам нужно распечатать отчет обо всех балансах на всех счетах, этим не должен заниматься объект Счет Джо, так как его ответственности должны быть связаны только со счетом Джо и его деньгами. За просмотр всех счетов и генерацию соответствующего отчета должен отвечать другой объект. Диаграммы Последовательности Диаграмма Последовательности — это упорядоченная по времени диаграмма Взаимодействия, читать ее следует сверху вниз. Как упоминалось раньше, у каждого варианта использования имеется большое количество альтернативных потоков. Каждая диаграмма Последовательности описывает один из потоков варианта использования. Например, на рис. 4.3 приведена диаграмма Последовательности, показывающая, как клиент банка Джо снимает со счета $20 с помощью автоматического банкомата (ATM). Участвующие в потоке объекты нарисованы в прямоугольниках в верхней части диаграммы. В нашем примере имеются пять объектов: Джо, устройство для чтения карточки, экран ATM, счет Джо и ; кассовый аппарат. Объект действующего лица, Джо, инициирующий вариант использования, показан в верхнем левом углу диаграммы. Процесс начинается, когда Джо вставляет карточку в устройство для ее чтения. Это устройство считывает номер карточки и выдает экрану ATM команду инициализации. ATM запрашивает у Джо его идентификационный номер. Джо вводит свой номер (1234), и ATM открывает его счет. Идентификационный номер Джо подтверждается, и ATM предлагает Джо выбрать транзакцию. Джо указывает "Снятие денег". ATM запрашивает требуемую сумму. Джо вводит $20. ATM удостоверяется, что на счету Джо имеется достаточно денег, и вычитает $20 из его счета. Затем выдается требуемая сумма, и ; Джо получает обратно свою карточку. ![]() У каждого объекта имеется линия жизни (lifeline), изображаемая в виде вертикальной штриховой линии под объектом. Сообщения, соответствующие коммуникациям между объектами, рисуют между линиями жизни объектов. Сообщение показывает, что один объект вызывает функцию другого. Далее, когда мы определим операции классов, каждое сообщение станет операцией. Сообщения могут быть рефлексивными, что соответствует обращению объекта к своей собственной операции. В нашем примере сообщение 2 демонстрирует, что устройство чтения карточки обращается к самому себе, чтобы прочитать номер карточки. Создание диаграммы Последовательности Диаграммы Последовательности можно создавать в представлении Вариантов Использования или в Логическом представлении браузера. Как показано на рис. 4.4, диаграммы Последовательности должны находиться непосредственно внутри варианта использования или непосредственно внутри пакета. Для создания новой диаграммы Последовательности:
Панель инструментов диаграммы Последовательности Когда открывается диаграмма Последовательности, панель инструментов диаграммы изменяется так, чтобы вы могли помещать на диаграмму объекты, сообщения и другие элементы (см. ниже). В таблице приводится список кнопок панели диаграммы Последовательности и объясняется их назначение. ![]() Кооперативные диаграммы Подобно диаграммам Последовательности, Кооперативные диаграммы (Collaboration) отображают по ток событий в конкретном сценарии варианта использования. Диаграммы Последовательности ут£ рядочены по времени, а Кооперативные диаграммы больше внимания заостряют на связях междг объектами. На рис. 4.6 приведена Кооперативная диаграмма, описывающая, как Джо снимает со счета 20$ ![]() Создание Кооперативной диаграммы Как и диаграммы Последовательности, Кооперативные диаграммы обычно создаются в браузере и размещаются под вариантом использования или пакетом. Можно сначала создать диаграмму Последовательности, а затем нажать клавишу F5. В этом случае Rose сама создаст Кооперативную диаграмму из указанной диаграммы Последовательности. Для создания новой Кооперативной диаграммы:
Панель инструментов Кооперативной диаграммы Панель инструментов Кооперативной диаграммы чрезвычайно напоминает панель инструментов диаграммы Последовательности. Однако здесь имеется несколько параметров, которые не доступны на диаграмме Последовательности, например связь с объектом и поток данных. В последующих разделах будет показано, как с помощью кнопок этой панели добавлять на диаграмму новые элементы. В таблице 4.2 приведен список кнопок панели инструментов Кооперативной диаграммы. ![]() ![]() Работа с действующими лицами на диаграмме Взаимодействия На любой диаграмме Последовательности или Кооперативной диаграмме должен быть объект-действующее лицо. Он является внешним стимулом, дающим системе команду на выполнение какой-то функции. Объекты-действующие лица на диаграмме Взаимодействия содержат действующих лиц взаимодействующих с вариантом использования на диаграмме Вариантов Использования. Поместить на диаграмму Взаимодействия объект-действующее лицо можно следующим образом:
Для удаления объекта-действующего лица с диаграммы Взаимодействия:
Определение устойчивости объекта В среде Rose для каждого объекта на диаграмме можно задать его устойчивость (persistence). Поддерживаются следующие варианты:
Для определения устойчивости объекта:
Работа с несколькими экземплярами объекта Rose дает возможность с помощью одной пиктограммы представлять несколько экземпляров одного и того же класса. Допустим, что вы хотите отобразить список сотрудников на диаграмме Последовательности или Кооперативной диаграмме. Вместо того чтобы каждого сотрудника представлять как один объект, вы можете показать их все сразу с помощью значка множественного экземпляра. Нотация UML для множественного экземпляра выглядит следующим образом: ![]() Для работы с множественными экземплярами объекта:
Работа с сообщениями Сообщение (message) — это связь между объектами, в которой один из них (клиент) требует от другого (сервера) выполнения каких-то действий. При генерации кода сообщения транслируются в вызовы функций. В приведенном ниже примере одна форма просит другую, чтобы та вывела ее на экран: ![]() Добавление сообщений на диаграммы Взаимодействия Расположив объекты на диаграмме Последовательности или Кооперативной диаграмме, нужно показать сообщения между объектами. На диаграмме Последовательности рисуется стрелка между линиями жизни двух объектов. На Кооперативной диаграмме указывается связь между объектами, а затем гуда помещаются сообщения. Добавление сообщений на диаграмму Последовательности На диаграмме Последовательности сообщение изображают в виде стрелки, которая проводится между линиями жизни двух объектов или от линии жизни объекта к самой себе. Сообщения располагают в хронологическом порядке сверху вниз. Поместить сообщение на диаграмму Последовательности можно следующим образом:
Удаление сообщений с диаграммы Последовательности В процессе работы с диаграммами Последовательности может потребоваться удалить ранее нарисованные сообщения. При этом оставшиеся сообщения будут автоматически перенумерованы. Для удаления сообщения с диаграммы Последовательности:
Нумерация сообщений на диаграмме Последовательности Хотя диаграмму всегда читают сверху вниз, вы можете еще и пронумеровать сообщения, чтобы показать порядок их. Номера сообщений на диаграммах Взаимодействия показывать необязательно. По умолчанию нумерация сообщений на диаграммах Последовательности отключена. Если нужно включить или выключить нумерацию сообщений:
Установка синхронизации сообщений На вкладке Detail (Подробно) окна спецификации сообщений можно определить синхронизацию посылаемых сообщений ![]() Соответствующая сообщению стрелка изменится, если этот параметр будет определен как "с отказом становиться в очередь", "с лимитированным временем ожидания" или "асинхронное". Доступны пять значений параметра синхронизации: Simple (Простое) Используется по умолчанию. Означает, что все сообщения выполняются в одном потоке управления. На диаграммах Последовательности и Кооперативных диаграммах сообщения такого типа показывают следующим образом: ![]() Synchronous (Синхронное) Применяется, когда клиент посылает сообщение и ждет ответа пользователя. На диаграммах Последовательности и Кооперативных диаграммах синхронные сообщения показывают следующим образом: ![]() Balking (С отказом становиться в очередь) Клиент посылает сообщение серверу. Если сервер не может немедленно принять сообщение, оно отменяется. На диаграммах Последовательности и Кооперативных диаграммах такие сообщения показывают следующим образом: ![]() Timeout (С лимитированным временем ожидания) Клиент посылает сообщение серверу, а затем ждет указанное время. Если в течение этого времени сервер не принимает сообщение, оно отменяется. На диаграммах Последовательности и Кооперативных диаграммах сообщения с лимитированным временем ожидания показывают следующим образом: ![]() Asynchronous (Асинхронное) Клиент посылает сообщение серверу и продолжает свою работу, не ожидая подтверждения о получении. На диаграммах Последовательности и Кооперативных диаграммах такие сообщения показывают следующим образом: ![]() Задать синхронизацию сообщения можно следующим образом:
|