Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВероника Тартаковская
1 Моделирование и проектирование программного обеспечения Лекция 8. Реализация вариантов использования Диаграммы коммуникаций
3 Пример диаграммы коммуникации
4 Пример диаграммы коммуникации (2) Диаграмма последовательности, которая описывает взаимодействия, включающие вставку клиентом в Банкомат карточки и показа ему основного меню.
5 Диаграммы коммуникации Диаграммы коммуникационные (ДК) основное внимание уделяют структуре взаимодействия, тому, как передаются сообщения между участниками. В UML 2 ДК имеют меньше возможностей описания логики взаимодействия чем диаграммы последовательностей.
6 Синтаксис диаграмм коммуникации походит на синтаксис диаграмм последовательностей, за исключением того, что у участников нет линий жизни («хвостов)». Участники соединены между собой связями, образующими коммуникационные каналы для передачи сообщений. Порядок сообщений определяется путем иерархической нумерации.
7 Пример варианта использования Вариант использования AddCourse (добавить курс)
8 Простая коммуникационная диаграмма для прецедента AddCourses, в котором :Registrar добавляет два новых объекта Course. Следует обратить внимание на нумерацию сообщений, обозначающую их последовательность и вложенность в другие сообщения.
9 Пошаговая интерпретация диаграммы коммуникации 1. addCourse("UML") – сообщение addCourse(...), которое отправляется линии жизни объекта :RegistrationManager с параметром "UML". Экземпляр :RegistrationManager инициирует операцию addCourse( … ) и передает в нее параметр "UML", фокус управления переходит в эту операцию.
10 1.1. «create» – порядковый номер 1.1 говорит о том, что фокус управления по-прежнему находится в операции addCourse(...). :RegistrationManager посылает анонимное сообщение, помеченное стереотипом «create». Такие сообщения «create» создают новые объекты, и это конкретное сообщение создает новый объект uml:Course. Позже при анализе или проектировании этому анонимному сообщению будет дано имя и, возможно, параметры, но пока достаточно показать, что создается новый объект uml:Course. После создания объекта из операции addCourse( … ) больше не посылается никаких сообщений, и этот поток возвращается.
11 2. addCourse( "MDA" ) – в :RegistrationManager посылается сообщение addCourse(…) с параметром "MDA". Фокус управления переходит к операции addCourse( … ) «create» – порядковый номер 2.1 говорит о том, что фокус управления по-прежнему находится в операции addCourse(…). :RegistrationManager посылает анонимное сообщение, помеченное стереотипом «create»; это создает новый объект, mda:Course. После создания объекта фокус управления addCourse(…) возвращается и итерация завершается.
12 При чтении коммуникационных диаграмм необходимо понимать, что – в результате отправления сообщения вызывается некоторая операция экземпляра и – сложная нумерация сообщений указывает на вложенность вызовов операций (т. е. вложенный фокус управления).
13 Описание итераций Выражение, описывающее итерацию включает – спецификатор итерации (*) и – (необязательный) блок итерации, в скобках [….]. Выражение итерации задает, сколько раз должно быть отправлено сообщение. UML 2 не определяет никакого конкретного синтаксиса для блоков итераций, поэтому может использоваться все, что имеет смысл. Обычно хорошим вариантом являются код или псевдокод.
14 Блок итерации Однако в спецификации UML ничего не говорится, о том, что ДК могут по умолчанию использовать синтаксис итерации диаграммы последовательностей. Если применить синтаксис итерации из Диаграммы Последовательностей, то описывающее итерацию сообщение могло бы выглядеть следующим образом: [ loop min, max [ условие ] ] – Преимущество такой записи - единообразия, – Но есть некоторая синтаксическая избыточность, поскольку и loop, и символ * являются спецификаторами итерации.
15 Пример описания цикла в ДК В данном примере для обозначения повторения блока итерации при увеличении i от 1 до n применяется псевдокод. Затем i используется как селектор для выбора определенного экземпляра Course, которому отправляется сообщение print(). В результате этого происходит распечатка всех экземпляров Course. Однако такой подход предполагает, что экземпляры Course хранятся в индексированной коллекции.
16 Другой подход Если не нужно делать предположение, о том, что экземпляры Course хранятся в индексированной коллекции, то можно воспользоваться альтернативным подходом. 1.На связи между :RegistrationManager и :Course указано имя роли во множественном числе (courses) и кратность. Все это свидетельствует о том, что :RegistrationManager соединен с коллекцией объектов :Course. 2. К сообщению print() добавлен спецификатор итерации. Это указывает на то, что сообщение print() посылается каждому объекту коллекции.
17 Параллельные операции Стандартный спецификатор итерации (*) означает, что сообщения будут выполняться последовательно. Если необходимо показать, что все сообщения выполняются параллельно, используется спецификатор параллельной итерации *//. – Например: 1.1: *// print()
18 Ветвление в диаграммах коммуникации Ветвление можно смоделировать, добавив в сообщения сторожевые условия. Такие сообщения посылаются только тогда, когда сторожевое условие становится истинным. Ветвление – сообщение посылается, только если условие истинно.
19 Пример ветвления в системе регистрации курсов Пример ветвления в системе регистрации курсов. Эта коммуникационная диаграмма реализует прецедент RegisterStudentForCourse (зарегистрировать студента на курс). В этой системе регистрация является трехэтапным процессом: – найти запись студента – нельзя зарегистрировать студента на курс, если его нет в системе; – найти необходимый курс; – зарегистрировать студента на курс.
20 На рис. широко показаны условия, чтобы продемонстрировать варианты их применения в коммуникационных диаграммах.
21 Условия не имеют формального синтаксиса, но обычно являются выражениями, в которых используются временные переменные области действия текущего фокуса управления или атрибуты классов, участвующих во взаимодействии. Результаты операций findStudent(…) и findCourse(…) записываются в две временные переменные: student (студент) и course (курс). Затем значения этих переменных используются для вычисления значения временной булевой переменной found (найден). – found применяется для образования ветви в шаге 1.3. – found также используется для принятия решения о формировании ошибки для :Registrar на шаге 1.4.
22 1. Пошаговая интерпретация 1.registerStudent( "Jim", "UML" ) – актер :Registrar посылает сообщение registerStudent( "Jim", "UML" ) объекту :RegistrationManager.
23 2. Пошаговая интерпретация 1.1. findStudent( "Jim" ) – :RegistrationManager сам себе посылает сообщение findStudent( Jim ). Возвращаемое в результате этой операции значение сохраняется в переменной student. В случае неудачного поиска значение равно null.
24 3. Пошаговая интерпретация 1.2. findCourse( "UML" ) – :RegistrationManager сам себе посылает сообщение findCourse("UML"). Возвращаемое в результате этой операции значение сохраняется в переменной course. В случае неудачного поиска значение равно null.
25 4. Пошаговая интерпретация 1.3. [found] register( student ) – :RegistrationManager посылает сообщение register( student ) объекту course. Это сообщение защищено условием и будет послано, если и student, и course не null. Иначе говоря, попытка зарегистрировать student на course делается только в случае успешного обнаружения обоих объектов, student и course.
26 5. Пошаговая интерпретация 1.4. [!found] : error() – если found имеет значение false, вызывается операция error() объекта :Registrar.
27 На коммуникационных диаграммах достаточно сложно понятно показать ветвления – создается впечатление, что условия разбросаны по всей диаграмме; – В связи с этим данная диаграмма очень быстро становится достаточно сложной. Основная рекомендация: показывайте на этих диаграммах только очень простое ветвление. – Для представления сложных ветвлений больше подходят диаграммы последовательностей.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.