Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

PrIS

.pdf
Скачиваний:
55
Добавлен:
07.12.2018
Размер:
7.24 Mб
Скачать

491

Сенс вказання попередніх повідомлень полягає в тому, що це повідомлення не може бути передане, поки не будуть передані своїм адресатам всі повідомлення, номери яких записані в цьому списку.

Приклад запису попередніх повідомлень:

A3, В4/ С5: помилка запису (сектор).

Сторожова умова є звичайним булевим виразом і призначена для синхронізації окремих „ниток” потоку керування. Записується в квадратних дужках і може бути опущена, якщо вона відсутня у цьому повідомленні. Семантика сторожової умови забезпечує передавання повідомлення тільки в тому випадку, якщо ця умова набуваєзначення "істина".

Приклад запису сторожових умов без номерів попередніх повідомлень:

[(х>=0)&(х<=255)] 1.2: відобразіть_на_екрані_колір(х) [кількість цифр номера = 7] 3.1: набрати_телефонний_номер()

Вираз послідовності – це розділений крапками список окремих термів послідовностей, після якого записується двокрапка:

<Терм послідовності'.'><Терм послідовності'.'>':'

Кожний з термів відображає окремий рівень процедурної вкладеності у формі закінченої ітерації. Найвищий рівень відповідає найлівішому терму послідовності. Якщо всі потоки керування паралельні, то вкладеність відсутня. Кожний з термів послідовності має такий синтаксис:

[Ціле число| Ім'я] [Символ рекурентності].

Ціле число вказує на порядковий номер повідомлення у процедурній послідовності верхнього рівня. Повідомлення, номери яких відрізняються на одиницю, слідують підряд один за одним.

Наприклад, повідомлення з номером "3.1.4" слідує за повідомленням з номером "3.1.3" у процедурній послідовності "3.1".

Ім'я використовується для специфікації паралельних „ниток” керування. Повідомлення, які відрізняються тільки іменем, є паралельними на цьому рівні вкладеності. На одному рівні вкладеності всі „нитки” керування еквівалентні в сенсі пріоритету передавання повідомлень.

Наприклад, повідомлення з виразами "3.1а" і "3.1б" є паралельними у процедурній послідовності "3.1".

Символ рекурентності використовується для вказання умовного або ітеративного виконання. Семантика рекурентності відображає нуль або більше повідомлень, які мають виконуватися залежно від записаної умови. Можливі два випадки запису рекурентності.

'*' '['Пропозиція-ітерація']' для запису ітеративного виконання відповідного виразу. Ітерація відображає послідовність повідомлень

492

одного рівня вкладеності. Пропозиція-ітерація може бути опущена, якщо умови ітерації ніяк не специфікуються. Найчастіше пропозиціяітерація записується на деякому псевдокоді або мові програмування. У мові UML формат запису цієї пропозиції не визначений. Наприклад, "*[/:=/..n]" означає послідовне передавання повідомлення з параметром /, який змінюється від 1 до деякого цілого числа n з кроком

1.

'['вираз-умова’]’ для запису розгалуження. Ця умова відображає таке повідомлення, передавання якого цією гілкою можливе тільки при істинності цієї умови. Найчастіше пропозицію-умову записують на деякому псевдокоді або мові програмування, оскільки в мові UML формат запису цієї пропозиції не визначений. Наприклад, [х>у] означає, що повідомлення деякою гілкою буде передане лише в тому випадку, якщо значення х більше значення у.

Примітка

Зазначимо, що умова записується так само, як і ітерація, але без зірочки. Це можна розуміти як деяку однокрокову ітерацію. При цьому передбачається, що ітерація виконується послідовно. Якщо необхідно відзначити можливість паралельного виконання ітерації, в мові UML використовується символ "*||". Ітерація не розповсюджується на вкладені рівні цього потоку або нитки. Кожен рівень повинен мати своє власне подання для ітеративного повторення процедурної послідовності.

Повернене значення подається у формі списку імен значень, що повертаються після закінчення комунікації або взаємодії в повній ітерації цієї процедурної послідовності. Ці ідентифікатори можуть виступати як арґументи в подальших повідомленнях. Якщо повідомлення не повертає жодного значення, то ні значення, ні оператор присвоєння на діаграмі кооперації не вказуються.

Наприклад, повідомлення

1.2.3: р:= знайти_документ (специфікація_документу)

означає передавання вкладеного повідомлення із запитом пошуку в базі даних потрібного документу за його специфікацією, причому джерелу повідомлення має бути повернений знайдений документ.

Ім'я повідомлення, записане в сигнатурі після значення, що повертається, означає ім'я події, яка ініціюється об'єктом-одержувачем повідомлення після його приймання. Найчастіше такою подією є виклик операції об'єкту. Це може бути реалізовано різними способами, один з яких – виклик операції. Тоді відповідна операція має бути визначена в тому класі, якому належить об'єкт-одержувач.

Список арґументів, розділених комами і взятих у круглі дужки, є дійсно параметрами тієї операції, виклик якої ініціюється цим повідомленням. Список арґументів може бути порожнім, проте дужки все

493

одно записуються. Для запису арґументів також може бути використаний деякий псевдокод або мова програмування.

Так, в наведеному вище прикладі повідомлення

1.2.3: р:= знайти_документ (специфікація_документу)

арґумент знайти_документ є іменем повідомлення, а специфікація_документу – списком арґументів, що складається з єдиного дійсного параметра операції. При цьому ім'я повідомлення означає звернення до операції знайти_ документ, яка має бути визначена у відповідному класі об'єкту-одержувача.

Примітка

На діаграмі кооперації при записі повідомлень також можуть використовуватися стереотипи, розглянуті раніше під час побудови діаграми послідовності (див. розділ 21). Їх семантика і синтаксис залишаються без зміни, оскільки визначені в нотації мови UML

23.5. Приклад побудови діаграми кооперації

Як приклад розглянемо побудову діаграми кооперації для моделювання процесу телефонної розмови з використанням звичайної телефонної мережі (див. розділ 21). Нагадаємо, що об'єктами в цьому прикладі є два абоненти а і b, два телефонні апарати c і d, комутатор і сама розмова як об'єкт моделювання. При цьому як комутатор, так і розмова є анонімними об'єктами.

На початковому етапі зобразимо всі об'єкти і зв'язки між ними на діаграмі кооперації за допомогою відповідних позначень (рис. 23.11). Відзначимо, що перший телефонний апарат зображений як активний об'єкт, а другий – як пасивний.

494

Рис. 23.11. Початковий фраґмент діаграми кооперації для прикладу моделювання звичайної телефонної розмови.

У подальшому необхідно специфікувати всі зв'язки на цій діаграмі, вказавши на їх кінцях необхідну інформацію у формі ролей зв'язків. Доповнений таким чином варіант діаграми кооперації зображений нижче (рис. 23.12). Зазначимо, що для об'єкту "Розмова" вказано позначене міткою значення {transient}, яке означає, що цей об'єкт створюється у процесі виконання охопного процесу і знищується до його завершення. Нагадаємо, що позначені міткою значення (tagged values) є стандартними елементами мови UML.

Рис. 23.12. Фраґмент діаграми кооперації, доповнений стереотипами ролей зв'язків, іменами асоціацій і позначеним міткою значенням об'єкту.

Нарешті, на діаграму кооперації необхідно нанести всі повідомлення, вказавши їх порядок і семантичні особливості. Остаточний фраґмент діаграми кооперації зображений на рис. 23.13 і містить, строго кажучи, модель кооперації тільки для початку розмови. Ця діаграма може бути доповнена повідомленнями, необхідними для закінчення розмови, що читачам пропонується виконати самостійно як вправу.

Як неважко помітити, діаграма кооперації для прикладу з телефонною розмовою не містить ні тимчасових особливостей передавання повідомлень, ні особливостей життєвого циклу об'єктів, що беруть участь у цій кооперації. Тому може бути ухвалене рішення про те, що вона є надмірною за наявності побудованої діаграми послідовності. Цей факт не викликає сумнівів в тих випадках, коли структура об'єктів, які взаємодіють є достатньо тривіальною.

495

Якщо ж такі об'єкти взаємодіють, утворюють між собою різні типи відношень-асоціацій (композиція, аґреґація), то діаграма кооперації виявляється необхідним поданням моделі на всіх її рівнях.

5: комутація (a,b)

4: [1:=1..n]: набір

 

 

: Комутатор

 

 

 

 

 

 

 

 

 

цифри(і)

 

 

 

 

 

 

 

 

8: виклик абонента

 

 

 

 

 

Лінія зв'язку

 

 

 

 

Лінія зв'язку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c: Телефонний

 

6: створити()

 

 

7: підтвердити()

d: Телефонний

 

 

 

 

 

 

 

 

 

апарат

 

 

 

 

 

 

 

 

 

апарат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1: підняти трубку()

 

 

 

 

 

9: дзвінок()

 

 

 

 

 

 

 

 

 

3: поворот диска()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11б: почати

 

 

 

 

 

 

 

 

 

 

 

 

“local”

 

 

 

 

 

розмову

 

 

: Розмова

 

11а: почати

 

 

 

 

 

 

 

 

розмову

 

 

 

 

 

 

 

 

 

{Transient}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

“global”

 

 

 

 

 

 

 

 

 

“global” учасник розмови

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

учасник розмови

а: Абонент

 

 

 

 

 

 

 

 

b: Абонент

Рис. 23.13. Остаточний варіант діаграми кооперації для моделювання телефонної розмови.

23.6. Рекомендації з побудови діаграм кооперації

Побудову діаграми кооперації можна починати відразу після побудови діаграми варіантів використання. У цьому випадку кожен з варіантів використання може бути специфікований у вигляді окремої діаграми кооперації рівня специфікації. Ця діаграма сприяє повнішому розумінню особливостей реалізації функцій системою, хоча і не може містити всю інформацію, необхідну для їх реалізації.

Надалі, після побудови діаграми класів, кожна з діаграм кооперації може уточнюватися у вигляді відповідної діаграми рівня прикладів. Важливо розуміти, що діаграма кооперації цього рівня може містити ті і лише ті об'єкти і зв'язки, які вже визначені на побудованій раніше діаграмі класів. Інакше, якщо виникає необхідність включення в діаграму кооперації об'єктів, які створюються на основі відсутніх класів, відповідні діаграми класів мають бути модифіковані явним описом цих класів.

496

Треба пам'ятати, що на діаграмі кооперації зображаються тільки ті об'єкти, які безпосередньо в ній беруть участь. При цьому об'єкти можуть виступати в різних ролях, які мають явно вказуватися на відповідних кінцях зв'язків діаграми. Застосування стереотипів уніфікує кооперацію, забезпечуючи їй адекватну інтерпретацію як зі сторони замовників, так і зі сторони розробників. Проте, доцільно розрізняти термінологію, яка використовується на діаграмах кооперації рівня специфікації і рівня прикладів.

Так, при побудові діаграм кооперації рівня специфікації бажано застосовувати найзрозумілішу замовникові термінологію, уникаючи технічних фраз і словосполучень. Наприклад, "оформити замовлення", "відвантажити товар", "надати звіт", "розробити план" тощо. Такі відомі розробникам слова як "сервер", "захищений протокол", "закрита операція класу", а також стереотипи і позначені мітками значення на цьому рівні застосовувати не рекомендується. На рівні специфікації треба прагнути досягти, за можливістю, повного взаєморозуміння між замовником і командою розробників всіх варіантів використання проектованої системи в контексті їх кооперації.

Під час побудови діаграм кооперації рівня прикладів термінологія повинна найточніше відображати всі аспекти реалізації відповідних об'єктів і зв'язків. Оскільки діаграма цього рівня є документацією для розробників системи, тут допустимо використовувати весь арсенал стереотипів, обмежень і позначених мітками значень, який є в мові UML. Якщо типових позначень недостатньо, розробники можуть доповнити діаграму власними елементами, використовуючи механізми розширень мови UML.

Процес побудови діаграми кооперації рівня прикладів має бути узгоджений із процесами побудови діаграми класів і діаграми послідовності. У першому випадку, як вже наголошувалося, необхідно стежити за використанням тільки тих об'єктів, для яких визначені класи, що породжують їх. У другому випадку треба погоджувати послідовності повідомлень, що передаються. Мова йде про те, що не допускається різний порядок проходження повідомлень для моделювання однієї і тієї самої взаємодії на діаграмі кооперації і діаграмі послідовності. Отже, діаграма кооперації, з одного боку, забезпечує концептуально узгоджений перехід від статичної моделі діаграми класів до динамічних моделей поведінки, що подаються діаграмами послідовності, станів і діяльності. З іншого боку, діаграма цього типу зумовлює особливості реалізації моделі на діаграмах компонентів і розгортання, які є предметом розгляду двох подальших розділів.

497

Контрольні запитання

1.Призначення діаграми кооперації.

2.Позначення кооперації.

3.Активний об'єкт.

4.Мультиоб'єкт.

5.Складений об'єкт.

6.Стереотипи зв'язків.

7.Формат запису повідомлень.

8.Наведіть приклад побудови діаграми кооперації.

498

РОЗДІЛ 24. Діаграма компонентів (component diagram)

Компоненти. Види компонентів

Інтерфейси

Залежності

Рекомендації з побудови діаграми компонентів

Всі розглянуті раніше діаграми відображали концептуальні аспекти побудови моделі системи і відносилися до логічного рівня подання. Особливість логічного подання полягає в тому, що воно оперує поняттями, які не мають самостійного матеріального втілення. Іншими словами, різні елементи логічного подання, такі як класи, асоціації, стани, повідомлення, не існують матеріально або фізично. Вони лише відображають наше розуміння структури фізичної системи або аспекти її поведінки.

Основне призначення логічного подання полягає в аналізі структурних і функціональних відношень між елементами моделі системи. Проте для створення конкретної фізичної системи необхідно деяким чином реалізувати всі елементи логічного подання в конкретну матеріальну сутність. Для опису такої реальної сутності призначено інший аспект модельного подання, а саме фізичне подання моделі.

Щоб пояснити відмінність логічного і фізичного подань, розглянемо у загальних рисах процес розроблення деякої програмної системи. Її початковим логічним поданням можуть служити структурні схеми алгоритмів і процедур, описи інтерфейсів і концептуальні схеми баз даних. Проте для реалізації цієї системи необхідно розробити початковий текст програми на деякій мові програмування (C++, Pascal, Basic/VBA, Java). При цьому вже в тексті програми передбачається така організація програмних кодів, яка припускає її розбиття на окремі модулі.

Проте початкові тексти програми ще не є остаточною реалізацією проекту, хоча і служать фраґментом її фізичного подання. Очевидно, програмна система може вважатися реалізованою у тому випадку, коли вона буде здатна виконувати функції свого цільового призначення. А це можливо, тільки якщо програмний код системи буде реалізований у формі виконуваних модулів, бібліотек класів і процедур, стандартних графічних інтерфейсів, файлах баз даних. Саме ці компоненти є необхідними елементами фізичного подання системи.

Отже, повним проектом програмної системи є сукупність моделей логічного і фізичного подань, які мають бути узгоджені між собою. У

499

мові UML для фізичного подання моделей систем використовуються так звані діаграми реалізації (implementation diagrams), які включають дві окремі канонічні діаграми: діаграму компонентів і діаграму розгортання. Особливості побудови першої з них розглядаються в цьому розділі, а другої – у наступному.

Діаграма компонентів, на відміну від раніше розглянутих діаграм, описує особливості фізичного подання системи. Діаграма компонентів дозволяє визначити архітектуру системи, що розробляється, встановивши залежності між програмними компонентами, в ролі яких може виступати початковий, бінарний і виконуваний код. У багатьох середовищах розроблення модуль або компонент відповідає файлу. Пунктирні стрілки, що з’єднюють модулі, показують відношення взаємозалежності, аналогічні до тих, які мають місце при компіляції початкових текстів програм. Основними графічними елементами діаграми компонентів є компоненти, інтерфейси і залежності між ними.

Діаграма компонентів розробляється для таких цілей:

візуалізації загальної структури початкового коду програмної системи;

специфікації здійснимого варіанту програмної системи;

забезпечення багатократного використання окремих фраґментів програмних кодів;

подання концептуальної і фізичної схем баз даних.

Урозробленні діаграм компонентів беруть участь як системні аналітики й архітектори, так і програмісти. Діаграма компонентів забезпечує узгоджений перехід від логічного подання до конкретної реалізації проекту у формі програмних кодів. Одні компоненти можуть існувати тільки на етапі компіляції програмних кодів, інші – на етапі його виконання. Діаграма компонентів відображає загальні залежності між компонентами, розглядаючи останні як класифікатори.

Примітка

При застосуванні бізнес-систем програмні компоненти треба розуміти в ширшому сенсі, щоб мати можливість моделювати бізнеспроцеси. У цьому випадку як компоненти розглядаються окремі організаційні підрозділи (відділи, служби) або документи, які реально існують в системі.

24.1. Компоненти

Для подання фізичних сутностей в мові UML застосовується спеціальний термін – компонент (component). Компонент реалізує деякий набір інтерфейсів і служить для загального позначення елементів

500

фізичного подання моделі. Для графічного подання компонента може використовуватися спеціальний символ – прямокутник зі вставленими зліва двома дрібнішими прямокутниками (рис. 24.1). Всередині прямокутника записується ім'я компонента і, можливо, деяка додаткова інформація. Зображення цього символа може трохи змінюватися залежно від характеру асоційованої з компонентом інформації.

Рис. 24.1. Графічне зображення компонентів у мові UML.

У метамоделі мови UML компонент є нащадком класифікатора. Він надає організацію в рамках фізичного пакету асоційованих з ним елементам моделі. Як класифікатор, компонент може мати також свої власні властивості, такі як атрибути і операції.

Так, в першому випадку (рис. 24.1, а) з компонентом рівня екземпляра зв'язується тільки його ім'я, а в другому (рис. 24.1, б) – додаткове ім'я пакету і позначене міткою значення.

Примітка

Зображення компонента походить від позначення модуля програми, що застосовувався якийсь час для відображення особливостей інкапсуляції даних і процедур. Так, верхній маленький прямокутник концептуально асоціюється з даними, які реалізує цей компонент (раніше він зображався у формі овалу). Нижній маленький прямокутник асоціюється з операціями або методами, що реалізовуються компонентом. У простих випадках імена даних і методів записувалися явно в цих маленьких прямокутниках, проте в мові UML вони не вказуються.

24.1.1. Ім'я компонента

Ім'я компонента підкоряється загальним правилам іменування елементів моделі в мові UML і може складатися з будь-якої кількості літер, цифр і деяких розділових знаків. Окремий компонент може бути поданий на рівні типу або на рівні екземпляра. Хоча його графічне зображення в обидвох випадках однакове, правила запису імені компонента дещо відрізняються. Якщо компонент подається на рівні типу, то як його ім’я записується тільки ім'я типу з великої літери.