Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Самовчитель по UML.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

6.6. Складні переходи

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

Переходи між паралельними станами

В окремих випадках перехід може мати декілька станів‑ джерела і декілька цільових станів. Такий перехід одержав спеціальну назву – паралельний перехід. Введення в розгляд паралельного переходу обумовлено необхідністю синхронізувати и/или розділити окремі підпроцеси на паралельні нитки без специфікації додаткової синхронізації в паралельних підавтоматах.

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

Мал. 6.11. Графічне зображення паралельного переходу з паралельних станів (а) і паралельного переходу в паралельні стани (б)

Спрацьовування паралельного переходу відбувається таким чином. В першому випадку (перехід‑ з'єднання) перехід спрацьовує, якщо має місце подія‑ трігер для всіх початкових станів цього переходу, і виконано (при його наявності) сторожову умову. При спрацьовуванні переходу‑ з'єднання одночасно покидаються всі початкові стани переходу (стани 1 і 2) і відбувається перехід в цільовий стан. При цьому кожний з початкових станів переходу повинен належати окремому підавтомату, що входить до складу автомата (процесу 1).

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

Переходи між складовими станами

Перехід, стрілка якого сполучена з межею деякого складового стану, позначає перехід в складовий стан (перехід b на мал. 6.12). Він еквівалентний переходу в початковий стан кожного з підавтоматів (можливо, єдиному), що входять до складу даного суперстану. Перехід, що виходить з складового стану (переходи f і g на мал. 6.12), відноситься до кожного з вкладених підстанів. Це означає, що об'єкт може покинути складовий суперстан, знаходячись в будь-якому з його підстанів. Для цього цілком достатньо виконання події і сторожової умови.

Мал. 6.12. Різні варіанти переходів в (з) складовий стан

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

Синхронізуючі стани

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

Синхронізуюче стан (synch state) позначається невеликим колом, усередині якого поміщений символ зірочки "*". Воно використовується спільно з переходом‑ з'єднанням або переходом‑ галуженням для того, щоб явно вказати події в інших підавтоматах, що роблять безпосередній вплив на поведінку даного підавтомата.

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

Зокрема, прокладка прихованої електропроводки може початися лише після того, як буде завершено зведення фундаменту і стін. А обробні роботи слід почати лише після того, як буде закінчена прокладка прихованої електропроводки. Інакше обробні роботи доведеться проводити повторно. Розглянуті особливості синхронізації цих паралельних процесів враховані на відповідній діаграмі станів за допомогою двох синхронізуючих станів (мал. 6.13).

Мал. 6.13. Діаграма станів для прикладу з будівництвом удома

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

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

Мал. 6.14. Діаграма станів процесу функціонування телефонного апарату

Далі телефонний апарат знаходитиметься в змозі «тоновий сигнал». При цьому безперервно видаватиме цей сигнал до тих пір, поки не відбудеться подія‑ трігер «набір цифри (п)», або не закінчиться 15 секунд з моменту підняття трубки. В першому випадку апарат перейде в стан «набір номера», а в другому – в стан «закінчення часу очікування». Остання ситуація може бути результатом сумнівів з приводу «дзвонити – не дзвонити?», слідством чого можуть стати гудки в трубці. При цьому нам нічого не залишається робити, як опустити її на важіль.

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

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

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

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

Примітка

Строго кажучи, розглянутий приклад відображає не всі аспекти поведінки навіть такого нескладного на перший погляд пристрою, яким є звичайний телефонний апарат. Зокрема, дана діаграма станів може бути доповнена переходом із стану «очікування» по події‑ трігеру «телефонний дзвінок», який може відразу перевести нас у внутрішній підстан «розмова», якщо ми вирішили зняти телефонну трубку (перехід типу а на мал. 6.12).

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