Лекція 12. Нотація UML. Моделювання поведінки

 

1. Моделі стану та взаємодії

2. Діаграми станів

 

1.                 Моделі стану та взаємодії

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

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

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

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

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

Будь-який варіант використання повинен виконувати певний обсяг роботи. З точки зору діючої особи він робить щось, що представляє певну цінність: наприклад, обчислює результат, створює новий об'єкт або змінює стан іншого об'єкту.

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

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

Варіанти використання та діючі особи в UML зображуються, як показано на рисунку 12.1.

Рисунок 12.1 – Приклад зображення варіанта використання та діючій особи

 

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

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

Кожен варіант використання повинен мати ім'я, що відрізняє його від інших. Ім'я варіанта використання являє собою текстовий рядок і називається простим ім'ям. До кваліфікованого імені додається префікс – ім’я пакета, в якому знаходиться варіант використання. Зазвичай при зображенні варіанту використання вказується тільки його ім’я. Наприклад:

Діюча особа представляє собою пов'язану безліч ролей, які виконують користувачі варіантів використання під час взаємодії з ними. Зазвичай діюча особа представляє ту роль, яку в даній системі грає людина, апаратний пристрій або навіть інша система.

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

Діючі особи можна пов'язувати з варіантами використання тільки за допомогою асоціацій. Асоціація між дійовою особою і варіантом використання показує, що вони спілкуються один з одним, можливо, посилаючи або приймаючи повідомлення.

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

На наступному рисунку показано, що реалізацію варіанту використання можна специфікувати явно через кооперацію.

Для організації варіантів використання їх групують в пакети так само, як класи. Крім того, можна організувати варіанти використання, визначивши між ними зв'язки узагальнення, включення та розширення.

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

Узагальнення між варіантами використання подібні узагальненням між класами. Це означає, що дочірній варіант використання успадковує поведінку і суть батьківського варіанту використання; нащадок може додати або перевизначити поведінку батьків, а крім того, бути підставленим замість нього в будь-якому місці, де той з'являється.

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

Наприклад:

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

Базовий варіант використання можна розширити лише викликом з певної точки, – так званої точки розширення (extension point). Щоб наочно представити ситуацію, можна уявити, що розширюючий варіант використання «заштовхує» поведінку в базовий. Зв'язок розширення зображується як залежність зі стереотипом extend. У додатковій секції можна перерахувати точки розширення базового варіанту використання. Ці точки розширення – прості мітки, які можуть з'являтися в потоці базового варіанту використання.

Наприклад:

Щоб змоделювати поведінку елемента, необхідно:

1. Ідентифікувати діючі особи, які взаємодіють з елементом. Кандидати на включення в цю групу - ті, хто потребує певної поведінки елемента для виконання своїх власних завдань, або ті, хто прямо або побічно задіяно у функціонуванні елементу.

2. Організувати діючі особи, визначивши загальні і більш спеціалізовані ролі.

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

4. Розглянути виняткові шляхи взаємодії кожної діючої особи з елементом.

5. Організувати поведінку, виявлену на етапах 3 та 4, у вигляді варіантів використання, застосовуючи зв'язки включення та розширення, щоб виділити загальну поведінку і відокремити виняткове.

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

 

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

Рисунок 12.2 – Приклад діаграми варіантів використання

 

Розглянемо приклади діаграм варіантів використання.

Приклад 1.

 

Приклад 2.

 

Приклад 3.

 

Приклад 4.

 

2.                 Діаграми станів

 

Діаграми станів – це один з п'яти видів діаграм UML, призначених для моделювання динамічних аспектів поведінки систем. Діаграми станів підходять для моделювання життєвого циклу об'єкта.

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

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

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

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

Діаграма станів (state diagram) показує автомат, зосереджуючи увагу на потоці управління від одного стану до іншого. Зображується у вигляді графа з вершинами та дугами (ребрами).

Автомат (state machine) – це опис послідовності станів, через які проходить об'єкт протягом життєвого циклу, реагуючи на події, а також опис реакції на ці події.

Стан (state) – ситуація в життєвому циклі об'єкта, протягом якої він задовольняє деякій умові, виконує деяку діяльність або очікує деяку подію.

Подія (event) – специфікація суттєвого факту, який відбувається в часі та просторі. В контексті автомата подія - це вплив, який викликає перехід між станами.

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

Діяльність (activity) специфікує роботу, яка відбувається всередині автомата.

Дія (action) – примітивне виконуване обчислення, що приводить до зміни стану моделі або поверненню значення. Діаграми стану зазвичай містять прості та складові стани, а також переходи, події і дії. Крім того, як і всі діаграми, можуть включати примітки та обмеження.

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

На відміну від діаграм діяльності, які моделюють потік управління від однієї діяльності до іншої, діаграма станів моделює потік управління від однієї події до іншої.

При моделюванні поведінки реактивного об'єкта, по суті, специфікуються три речі :

– стабільні стани, в яких об'єкт може перебувати,

– події, що викликають переходи від стану до стану,

– дії, що виконуються при кожній зміні станів.

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

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

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

Щоб змоделювати реактивний об'єкт, необхідно:

– Вибрати контекст автомата – клас, варіант використання або систему в цілому

– Встановити початковий та кінцевий стани об'єкта.

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

 – Прийняти рішення щодо подій, які можуть викликати переходи з одного стану в інший.

– Приєднати дії до переходів та / або до станів.

– Переконатися, що усі стани досяжні при деякому збігу обставин.

– Перевірити, чи немає яких-небудь «мертвих» станів, з яких об'єкт не зможе вийти ні при якому поєднанні подій.

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

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

Список основних дій включає наступні значення :

entry – дія, яка виконується в момент входу в даний стан (вхідна дія);

exit – дія, яка виконується в момент виходу з цього стану (вихідна дія);

do – діяльність, яка виконується ("do activity") протягом усього часу, поки об'єкт знаходиться в даному стані

defer – подія, обробка якої пропонується в іншому стані, але після того, як всі операції в поточному будуть завершені.

Наприклад:

Факт зміни одного стану іншим зображується за допомогою переходу. Перехід здійснюється при настанні деякої події:

– закінчення виконання діяльності (do activity),

– отриманні об'єктом повідомлення

– прийомом сигналу.

Перехід може бути тригерний та нетригерним.

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

Якщо перехід ініціюється якою-небудь подією, він вважається тригерним. Для тригерного переходу характерна наявність імені, яке може бути записано в наступному форматі:

 

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

Сторожева умова (guard condition) завжди записується в прямих дужках після події-тригера і являє собою деякий булевский вираз. У загальному випадку з одного стану може бути кілька переходів з однією і тією ж подією-тригером, при цьому цільовий стан буде залежати від того яка з сторожових умов прийме значення «істина».

Також ім'я переходу може містити вислів дії (action expression). В даному випадку вказана дія виконується відразу при спрацьовуванні переходу і до початку будь-яких дій в цільовому стані. У загальному випадку вислів дії може містити цілий список окремих дій, розділених символом «;».

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

 

Існує також два види псевдостанів:

– початкове, в якому знаходиться об'єкт відразу після його створення (позначається суцільним кружком),

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

Якщо необхідно відобразити знищення об'єкта використовується вузол завершення (terminate node) – псевдостан, вхід в який означає завершення виконання поведінки кінцевого автомата в контексті його об'єкта.

Наприклад:

 

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

Наприклад:

 

На діаграмі можуть бути представлені як прості стани, так і складні стани. Складні або складові стани (composite state) включають в себе вкладені підстани.

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

Наприклад:

 

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

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

Наприклад:

Підстани можуть бути:

– послідовними (неортогональні)

– паралельними (ортогональні)

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

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

Наприклад:

Історичний стан (history state) дозволяє складовому стану, що включає неортогональні підстани, «пам'ятати» підстан, який був активним на момент останнього переходу з складного стану зовні. Історичний стан зображується у вигляді маленького кружечка з буквою «H» (History).

Приклад діаграми станів:

 

Запитання для самоперевірки

1. Що таке варіант використання?

2. Що таке діюча особа?

3. Які зв'язки можна організувати між варіанти використання?

4. Для чого використовується діаграма станів?

5. Розкрийте поняття стан, подія, перехід та діяльність.