Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектування інформаційних систем.doc
Скачиваний:
95
Добавлен:
21.09.2019
Размер:
28.77 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примітка

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

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