PrIS
.pdf501
Якщо ж компонент подається на рівні екземпляра, то його ім'я записується <ім'я компонента ':' ім'я типу>. При цьому весь рядок імені підкреслюється.
Примітка
Хоча правила іменування об'єктів у мові UML вимагають підкреслення імені окремих екземплярів, то стосовно підкреслення імені компонента в літературі їх часто опускають. У цьому випадку запис імені компонента з малої літери характеризуватиме компонент рівня екземпляра.
Як прості імена прийнято використовувати імена виконуваних файлів (із вказанням розширення ехе після крапки-роздільника), імена динамічних бібліотек (розширення dll), імена Web-сторінок (розширення html), імена текстових файлів (розширення txt або doc) або файлів довідки (hlp), імена файлів баз даних (db) або імена файлів з початковими текстами програм (розширення h, cpp для мови C++, розширення Java для мови Java), скрипти (php, asp) та ін.
Оскільки конкретна реалізація логічного подання моделі системи залежить від використовуваного програмного інструментарію, то й імена компонентів визначатимуться особливостями синтаксису відповідної мови програмування.
В окремих випадках до простого імені компонента може бути додана інформація про ім'я охоплювального пакету і про конкретну версію реалізації цього компонента (рис. 24.1, б). Зазначимо, що у цьому випадку номер версії записується як позначене міткою значення у фіґурних дужках. В інших випадках символ компонента може бути розділений на секції, щоб явно вказати імена реалізованих у ньому інтерфейсів. Таке позначення компонента називається розширеним і розглядається далі в цьому розділі.
24.1.2. Види компонентів
Оскільки компонент як елемент фізичної реалізації моделі задає окремий модуль, іноді його коментують із вказанням додаткових графічних символів, які ілюструють конкретні особливості його реалізації. Ці додаткові позначення для приміток не специфіковані в мові UML. Проте їх застосування спрощує розуміння діаграми компонентів, істотно підвищуючи наочність фізичного подання. Деякі з таких загальноприйнятих позначень для компонентів зображені далі (рис. 24.2).
Умові UML виділяють три види компонентів.
По-перше, компоненти розгортання, які забезпечують безпосереднє виконання системою своїх функцій. Такими компонентами можуть бути бібліотеки, що динамічно підключаються, з розширенням dll (рис.
502
24.2, а), Web-сторінки на мові розмітки гіпертексту з розширенням html (рис. 24.2, б) і файли довідок з розширенням hlр (рис. 24.2, в).
По-друге, компоненти – робочі продукти. Як правило – це файли з початковими текстами програм, наприклад, з розширеннями h або срр для мови C++ (рис. 24.2, г).
По-третє, компоненти виконань, що подають викональні модулі – файли з розширенням ехе. Вони позначаються звичайним способом.
Рис. 24.2. Варіанти графічного зображення компонентів на діаграмі компонент.
Ці елементи іноді називають артефактами, підкреслюючи при цьому їх закінчений інформаційний зміст, який залежить від конкретної технології реалізації відповідних компонентів. Понад усе, розробники можуть з цією метою використовувати самостійні позначення, оскільки в мові UML немає строгої нотації для графічного подання приміток.
Інший спосіб специфікації різних видів компонентів – явне вказання стереотипу компонента перед його іменем. У мові UML для компонентів визначені такі стереотипи:
бібліотека (library) – визначає перший різновид компонента, який подається у формі динамічної або статичної бібліотеки;
таблиця (table) – також визначає перший різновид компонента, який подається у формі таблиці бази даних;
файл (file) – визначає другий різновид компонента, який подається у вигляді файлів з початковими текстами програм;
документ (document) – визначає другий різновид компонента, який подається у формі документу;
викональний (executable) – визначає третій вид компонента, який може виконуватися у вузлі.
503
24.2. Інтерфейси
Наступними елементами діаграми компонентів є інтерфейси. Останні вже неодноразово розглядалися раніше, тому тут будуть відзначені ті їх особливості, які характерні для подання на діаграмах компонентів. Нагадаємо, що в загальному випадку інтерфейс графічно зображається колом, яке з'єднується з компонентом відтинком лінії без стрілок (рис. 24.3, а). При цьому ім'я інтерфейсу, яке обов'язково має починатися з великої літери "I", яка записується поруч із колом. Семантично лінія означає реалізацію інтерфейсу, а наявність інтерфейсів означає, що цей компонент реалізує відповідний набір інтерфейсів.
Рис. 24.3. Графічне зображення інтерфейсів на діаграмі компонентів.
Іншим способом подання інтерфейсу на діаграмі компонентів є його зображення у вигляді прямокутника класу і з стереотипом "інтерфейс" і можливими секціями атрибутів і операцій (рис. 24.3, б). Як правило, цей варіант позначення використовується для подання внутрішньої структури інтерфейсу, яка може бути важлива для реалізації.
При розробленні програмних систем інтерфейси забезпечують не тільки сумісність різних версій, але й можливість вносити істотні зміни до одних частин програми, не змінюючи інші її частині. Отже, призначення інтерфейсів істотно ширше, ніж специфікація взаємодії з користувачами системи (акторами).
Примітка
Характер використання інтерфейсів окремими компонентами може відрізнятися. Тому розрізняють два способи зв'язку між інтерфейсами і компонентами. Якщо компонент реалізує деякий інтерфейс, то такий інтерфейс називають експортованим, оскільки цей компонент надає його як сервіс іншим компонентам. Якщо ж компонент використовує деякий інтерфейс, який реалізується іншим компонентом, то такий інтерфейс для першого компонента називається імпортованим. Особливість інтерфейсу, що імпортується, полягає в
504
тому, що на діаграмі компонентів це відношення зображається за допомогою залежності.
24.3.Залежності
Узагальному випадку відношення залежності було розглянуте раніше (див. розділ 19). Нагадаємо, що залежність не є асоціацією, а служить для подання тільки факту наявності такого зв'язку, коли зміна одного елемента моделі має вплив або приводить до зміни іншого елемента моделі. Відношення залежності на діаграмі компонентів зображається пунктирною лінією і з стрілкою, яка напрямлена від клієнта (залежного елемента) до джерела (незалежного елемента).
Залежності можуть відображати зв'язки модулів програми на етапі компіляції і генерування програмних кодів. В іншому випадку залежність може відображати наявність в незалежному компоненті описів класів, які використовуються в залежному компоненті для створення відповідних об'єктів. Стосовно діаграми компонентів залежності можуть зв'язувати компоненти та імпортовані цим компонентом інтерфейси, а також різні види компонентів між собою.
Упершому випадку малюють стрілку від компонента-клієнта до інтерфейсу, що імпортується (рис. 24.4). Наявність такої стрілки означає, що компонент не реалізує відповідний інтерфейс, а використовує його в процесі свого виконання. Причому на цій діаграмі може бути присутнім і інший компонент, який реалізує цей інтерфейс. Так, наприклад, зображений нижче фраґмент діаграми компонентів задає інформацію про те, що компонент з іменем "main.exe" залежить від імпортованого інтерфейсу IDialog, який, своєю чергою, реалізується компонентом з іменем "image.java". Для другого компонента цей інтерфейс є експортованим.
Рис. 24.4. Фраґмент діаграми компонентів з відношенням залежності.
Зазначимо, що зобразити другий компонент з іменем "image.java" у формі варіанту примітки не можна саме через той факт, що цей компонент реалізує інтерфейс.
505
Іншим випадком відношення залежності на діаграмі компонентів є відношення між різними видами компонентів (рис. 24.5). Наявність подібної залежності означає, що внесення змін до початкових текстів програм або динамічних бібліотек приводить до змін самого компонента. При цьому характер змін може бути відзначений додатково.
index.html |
context.hlp |
main.exe
dialog.dll |
main.cpp |
Рис. 24.5. Графічне зображення відношення залежності між компонентами.
Нарешті, на діаграмі компонентів можуть бути подані відношення залежності між компонентами і реалізованими в них класами. Ця інформація має важливе значення для забезпечення узгодження логічного і фізичного подань моделі системи. Зрозуміло, зміни у структурі описів класів можуть привести до зміни компонента. Нижче наводиться фраґмент залежності подібного роду, коли деякий компонент залежить від відповідних класів (Рис. 24.6).
506
Рис. 24.6. Графічне зображення залежності між компонентом і класами.
Зазначимо, що у цьому випадку з діаграми компонентів не випливає, що класи реалізовані цим компонентом. Якщо треба підкреслити, що деякий компонент реалізує окремі класи, то для позначення компонента використовується розширений символ прямокутника. При цьому прямокутник компонента ділиться на дві секції горизонтальною лінією. Верхня секція служить для запису імені компонента, а нижня секція – для вказання додаткової інформації (рис. 24.7).
Рис. 24.7. Графічне зображення компонента з додатковою інформацією про класи, що ним реалізуються.
Всередині символа компонента можуть зображатися інші елементи графічної нотації, такі як класи (компонент рівня типу) або об'єкти (компонент рівня екземпляра). У цьому випадку символ компонента зображається так, щоб вміщати ці додаткові символи. Так, наприклад, зображений нижче компонент (рис. 24.8) є екземпляром і реалізує три окремі об'єкти.
507
Контролер1:Контролер
Діалог
Аутенфікація Пошук
Рис. 24.8. Графічне зображення компонента рівня екземпляра, що реалізує окремі об'єкти.
Об'єкти, які містяться в окремому компоненті-екземплярі, зображаються вкладеними в символ цього компонента. Подібна вкладеність означає, що виконання компонента здійснює виконання відповідних об'єктів. Іншими словами, існування компонента протягом часу виконання програми забезпечує існування, а можливо, і доступ до всіх вкладених у нього об'єктів. Що стосується доступу до цих об'єктів, то він може бути додатково специфікований за допомогою кванторів видимості, подібно до видимості пакетів. Зміст видимості може відрізнятися для різних видів пакетів.
Так, для компонентів з початковим текстом програми видимість може означати можливість внесення змін у відповідні тексти програм з їх подальшою перекомпіляцією. Для компонентів з виконуваним кодом програми видимість може характеризувати можливість запуску для виконання відповідного компонента або викликання реалізованих у ньому операцій чи методів.
24.4. Рекомендації з побудови діаграми компонентів
Розроблення діаграми компонентів припускає використання інформації як про логічне подання моделі системи, так і про особливості її фізичної реалізації. До початку розроблення необхідно прийняти рішення про вибір обчислювальних платформ і операційних систем, на яких передбачається реалізовувати систему, а також про вибір конкретних баз даних і мов програмування.
Після цього можна приступати до загальної структуризації діаграми компонентів. У першу чергу, необхідно вирішити, з яких фізичних частин (файлів) складатиметься програмна система. На цьому етапі треба
508
звернути увагу на таку реалізацію системи, яка забезпечувала б не тільки можливість повторного використання кодів за рахунок раціональної декомпозиції компонентів, але й при необхідності створення об'єктів.
Мова йде про те, що загальна продуктивність програмної системи істотно залежить від раціонального використання нею обчислювальних ресурсів. Із цією метою необхідно велику частину описів класів, їх операцій і методів винести в динамічні бібліотеки, залишивши у виконуваних компонентах тільки найнеобхідніші для ініціалізації програми фраґменти програмних кодів.
Після загальної структуризації фізичного подання системи необхідно доповнити модель інтерфейсами і схемами бази даних. При розробленні інтерфейсів треба звертати увагу на узгодження різних частин програмної системи. Включення в модель схеми бази даних припускає специфікацію окремих таблиць і встановлення інформаційних зв'язків між таблицями.
Нарешті, завершує етап побудови діаграми компонентів встановлення і нанесення на діаграму взаємозв'язків між компонентами, а також відношень реалізації. Ці відношення повинні ілюструвати всі найважливіші аспекти фізичної реалізації системи, починаючи з особливостей компіляції початкових текстів програм і закінчуючи виконанням окремих частин програми на етапі її виконання. Із цією метою можна використовувати різні види графічного зображення компонентів.
Під час розроблення діаграми компонентів треба дотримуватися загальних принципів створення моделей на мові UML. Зокрема, в першу чергу необхідно використовувати вже наявні в мові UML компоненти і стереотипи. Для більшості типових проектів цього набору елементів може виявитися достатньо для подання компонентів і залежностей між ними.
Якщо ж проект містить деякі фізичні елементи, опис яких відсутній в мові UML, то треба скористатися механізмом розширення. Зокрема, використовувати додаткові стереотипи для окремих нетипових компонентів або позначені мітками значення для уточнення їх окремих характеристик.
На закінчення звертаємо увагу, що діаграма компонентів, як правило, розробляється спільно з діаграмою розгортання, на якій подається інформація про фізичне закріплення компонентів програмної системи за окремими вузлами. Особливості побудови діаграми розгортання будуть розглянуті в наступному розділі.
Контрольні запитання
1. Призначення діаграми компонентів.
509
2.Позначення компонента.
3.Ім'я компонента.
4.Види компонентів.
5.Інтерфейси.
6.Залежності на діаграмі компонентів
510
РОЗДІЛ 25. Діаграма розгортання (deployment diagram)
Вузол
З'єднання
Рекомендації з побудови діаграми розгортання
Фізичне подання програмної системи не може бути повним, якщо відсутня інформація про те, на якій платформі і якими обчислювальними засобами вона реалізована. Звичайно, якщо розробляється проста програма, яка може виконуватися локально на комп'ютері користувача, не задіюючи ніяких периферійних пристроїв і ресурсів, то в цьому випадку немає необхідності в розробленні додаткових діаграм. Проте при розробленні корпоративних систем ситуація вимагає зовсім іншого.
По-перше, складні програмні системи можуть реалізовуватися в мережевому варіанті на різних обчислювальних платформах і технологіях доступу до розподілених баз даних. Наявність локальної корпоративної мережі вимагає вирішення цілого комплексу додаткових завдань з раціонального закріплення компонентів за вузлами цієї мережі, що визначає загальну продуктивність програмної системи.
По-друге, інтеґрація програмної системи з Інтернетом визначає необхідність вирішення додаткових питань під час проектування системи, таких як досягнення безпеки, криптобезпеки і стійкості доступу до інформації для корпоративних клієнтів. Ці аспекти неабиякою мірою залежать від реалізації проекту у формі наявних фізично вузлів системи, таких як сервери, робочі станції, брандмауери, канали зв'язку і сховища даних.
Нарешті, технології доступу і маніпулювання даними в рамках загальної схеми "клієнт-сервер" також вимагають розміщення великих баз даних в різних сеґментах корпоративної мережі, їх резервного копіювання, архівації, кешування для забезпечення необхідної продуктивності системи загалом. Ці аспекти також вимагають візуального подання з метою специфікації програмних і технологічних особливостей реалізації розподіленої архітектури.
Як було відзначено в розділі 24, першою з діаграм фізичного подання є діаграма компонентів. Другою формою фізичного подання програмної системи є діаграма розгортання (синонім – діаграма розміщення). Вона застосовується для подання загальної конфіґурації і топології розподіленої програмної системи і містить розподіл компонентів по окремих вузлах системи. Крім того, діаграма розгортання
