АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Примітка. Іноді після виразу дії може бути записане повідомлення у форматі: 'Л' <ім'я об'єкту приймача повідомлення> '.' <ім'я посланого повідомлення>

Читайте также:
  1. Примітка
  2. Примітка
  3. Примітка
  4. Примітка
  5. Примітка
  6. Примітка
  7. Примітка
  8. Примітка
  9. Примітка
  10. Примітка
  11. Примітка

Іноді після виразу дії може бути записане повідомлення у форматі: 'Л' <ім'я об'єкту приймача повідомлення> '.' <ім'я посланого повідомлення> '('<параметр>':'<тип>',)'. При цьому повідомлення має чисто інформаційний характер і не передає керування на об'єкт-приймач повідомлення.

15.4. Складений стан і підстан

Складений стан (composite state) – це складний стан, який складається з інших вкладених у нього станів. Останні виступатимуть по відношенню до першого як підстани (substate). Хоча між ними має місце відношення композиції, графічно всі вершини діаграми, які відповідають вкладеним станам, зображаються всередині символу складеного стану (рис. 20.6). У цьому випадку розміри графічного символу складеного стану збільшуються, так щоб вміщати в себе всі підстани.

Рис. 20.6. Графічне представлення складеного стану з двома вкладеними в нього послідовними підстанами

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

20.4.1. Послідовні підстани

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

Для прикладу розглянемо звичайний телефонний апарат. Він може знаходитися в різних станах, одним з яких є стан дозвону до абонента. Очевидно, для того, щоб подзвонити, необхідно зняти телефонну трубку, почути тоновий сигнал, після чого набрати потрібний телефонний номер. Таким чином, стан дозвону до абонента є складеним і складається з двох послідовних підстанів: "підняти телефонну трубку" і "набрати телефонний номер". Фрагмент діаграми станів для цього прикладу містить один складений стан і два послідовних підстанів (рис. 20.7).

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

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

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

Це можна пояснити таким чином. Кожна сукупність вкладених послідовних підстанів є підавтоматом того автомата, якому належить даний складений стан. Оскільки кожний автомат може мати за визначенням єдиний початковий і єдиний кінцевий стани, то для підавтомата ця умова також повинна виконуватися (рис. 20.7).

20.4.2. Паралельні підстани

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

Проте окремі паралельні підстани можуть, у свою чергу, складатися з декількох послідовних підстанів (підавтомати 1 і 2 на рис. 20.8). В цьому випадку за визначенням об'єкт може знаходитися тільки в одному з послідовних підстанів підавтомата. Таким чином, для абстрактного прикладу (рис. 20.8) допустиме одночасне знаходження об'єкту в підстанах (1, 3, 4) (2, 3, 4) (1, 3, 5) (2, 3, 5). Неприпустимо знаходження об'єкту одночасне в підстанах (1, 2, 3) або (3, 4, 5).

Рис. 20.8. Графічне зображення складеного стану з вкладеними паралельними підстанами

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

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

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

Рис. 20.9. Складений стан з прихованою внутрішньою структурою й спеціальною піктограмою

15.5. Історичний стан

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

Історичний стан (history state) застосовується в контексті складеного стану. Він використовується для запам'ятовування того з послідовних підстанів, який був поточним у момент виходу зі складеного стану. При цьому існує два різновиди історичного стану: недавнє й давнє (рис. 20.10).

Рис. 20.10. Графічне зображення недавнього (а) і давнього (б) історичного стану

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

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

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

Стан, що запам'ятав, у свою чергу, також може бути складеним станом. Давній історичний стан (deep history state) позначається у формі невеликого кола, в яке поміщена латинська буква "Н" із символом "*" (рис. 20.10, б) і служить для запам'ятовування всіх підстанів будь-якого рівня вкладеності для поточного підавтомата.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.)