
- •Діаграма кооперації (collaboration diagram)
- •Кооперація
- •Діаграма кооперації рівня специфікації
- •Мультиоб’єкт
- •Активний об'єкт
- •Складений об'єкт
- •Зв'язки
- •Стереотипи зв'язків
- •Повідомлення
- •Формат запису повідомлень
- •Приклад побудови діаграми кооперації
- •Завершальні рекомендації по побудові діаграм кооперації
Формат запису повідомлень
Кожне повідомлення може бути помічене рядком тексту, який має наступний формат:
<Попередні повідомлення> <[Сторожова умова]>
<Вираз послідовності>
<Результат– ім'я повідомлення> <Список аргументів>
Розглянемо кожен з цих елементів детальніше.
• Попередні повідомлення - є розділені комами номери повідомлень, записані перед похилою рискою: <Номер повідомлення ','>< Номер сообщения,'> '/'
Якщо список номерів повідомлень порожній, то весь запис, включаючи похилу риску (слеш), опускається. Кожен номер повідомлення може бути виразом послідовності без рекурсивних символів. Вираз повинен визначати номер іншого повідомлення в цій же послідовності.
Примітка. Відмітимо, що номери послідовності повідомлень з однаковим префіксом утворюють відношення впорядкованості і, відповідно, неявно вказують на попередні повідомлення. Таким попереднім повідомленням буде повідомлення з номером, найправіша цифра якого на одиницю менша, ніж в даного повідомлення. Наприклад, повідомлення з номером "3.1.4.6" має попереднє повідомлення з номером "3.1.4.5".
Смисл вказівки попередніх повідомлень полягає в тому, що дане повідомлення не може бути передане, поки не будуть передані своїм адресатам всі повідомлення, номери яких записані в даному списку.
Приклад запису попередніх повідомлень:
A3, В4/ С5: помилка запису (сектор).
• Сторожова умова є звичайним булівським виразом і призначена для синхронізації окремих потоків процесу управління. Записується в квадратних дужках і може бути опущене, якщо воно відсутнє в даного повідомлення. Семантика сторожової умови забезпечує передачу повідомлення лише у випадку "істиності" цієї умови.
Приклад запису сторожових умов без номерів попередніх повідомлень:
•[(х>=0)&(х<=255)] 1.2: відобразити_на_екрані_колір(х)
•[кількість цифр номеру = 7] 3.1: набрати_телефонний_номер()
• Вираз послідовності – є розділений крапками список окремих термів послідовностей, після якого записується двокрапка: <Терм послідовності'.'><Терм послідовності'.'>':'
Кожен з термів представляє окремий рівень процедурної вкладеності у формі закінченої ітерації. Найбільш верхній рівень відповідає найлівішому терму послідовності. Якщо всі потоки управління паралельні, то вкладеність відсутня. Кожен з термів послідовності має наступний синтаксис:
[Ціле число| Ім'я] [Символ рекурентності].
– Ціле число вказує на порядковий номер повідомлення в процедурній послідовності верхнього рівня. Повідомлення, номери яких відрізняються на одиницю, слідують підряд один за одним.
Наприклад, повідомлення з номером "3.1.4" слідує за повідомленням з номером "3.1.3" в процедурній послідовності "3.1".
– Ім'я використовується для специфікації паралельних потоків управління. Повідомлення, які відрізняються лише ім'ям, є паралельними на цьому рівні вкладеності. На одному рівні вкладеності всі потоки управління еквівалентні в сенсі пріоритету передачі повідомлень.
Напр., повідомлення з виразами "З.1 а" і "3.1 б" є паралельними в процедурній послідовності "3.1".
– Символ рекурентності використовується для вказівки умовного або ітеративного виконання. Семантика рекурентності представляє нуль або більше повідомлень, які мають бути виконані залежно від записаної умови. Можливі два випадки запису рекурентності:
1) '*' '['Ітерація']' для запису ітеративного виконання відповідного виразу.
Ітерація представляє послідовність повідомлень одного рівня вкладеності. Ітерація може бути опущена, якщо умови ітерації ніяк не специфікуються. Найчастіше ітерація записується на деякому псевдокоді або мові програмування. У мові UML формат запису ітерації не визначений. Наприклад, "*[i:=1..n]", що означає послідовну передачу повідомлення з параметром i, який змінюється від 1 до деякого цілого числа n з кроком 1.
2. '['Умова']' для запису галуження. Цю умову представляє таке повідомлення, передача якого по даній гілці можлива лише при істинності цієї умови. Найчастіше умову записують на деякому псевдокоді або мові програмування, оскільки в мові UML формат запису умови не визначений. Наприклад, [х>у] означає, що повідомлення по деякій гілці буде передано лише в тому випадку, якщо значення x більше значення y.
Примітка. Відмітимо, що умова записується так само, як і ітерація, але без зірочки. Це можна розуміти як деяку однокрокову ітерацію. При цьому передбачається, що ітерація виконується послідовно. Якщо необхідно відзначити можливість паралельного виконання ітерації, в мові UML використовується символ "*||". Ітерація не поширюється на вкладені рівні даного потоку. Кожен рівень повинен мати своє власне представлення для ітеративного повторення процедурної послідовності.
• Результат представляється списком імен значень, які повертаються після закінчення комунікації в повній ітерації даної процедурної послідовності. Ці ідентифікатори можуть бути як аргументи в подальших повідомленнях. Якщо повідомлення не повертає жодного значення, то ні значення, ні оператор присвоєння на діаграмі кооперації не вказуються.
Наприклад, повідомлення
1.2.3: р:= знайти_документ (специфікація_документу)
означає передачу вкладеного повідомлення із запитом пошуку в базі даних потрібного документа по його специфікації, причому джерелу повідомлення має бути повернений знайдений документ.
• Ім'я повідомлення, записане в сигнатурі після результату, означає ім'я події, яка ініціюється об'єктом-одержувачем повідомлення після його прийому. Найчастіше такою подією є виклик операції об'єкту. Це може бути реалізовано різними способами, один з яких - виклик операції. Тоді відповідна операція має бути визначена в тому класі, якому належить об'єкт-одержувач.
• Список аргументів є розділеним комами у круглих дужках дійсні параметри тієї операції, виклик якої ініціюється даним повідомленням. Список аргументів може бути порожнім, проте дужки все одно записуються. Для запису аргументів також може бути використаний деякий псевдокод або мова програмування.
Так, в наведеному вище прикладі повідомлення
1.2.3: р:= знайти_документ (специфікація_документу)
Аргумент знайти_документ є ім'ям повідомлення, а специфікація_документу - списком аргументів, що складається з єдиного параметра операції. При цьому ім'я повідомлення означає звернення до операції знайти_ документ, яка має бути визначена у відповідному класі об'єкту-одержувача.
Примітка. На діаграмі кооперації при записі повідомлень також можуть використовуватися стереотипи, розглянуті раніше при побудові діаграми послідовності (див. главу 8). Їх семантика і синтаксис залишаються без зміни, оскільки визначені в нотації мови UML