UML holat mashinasi - UML state machine

UML holat mashinasi,[1] shuningdek, nomi bilan tanilgan UML statechart, ning sezilarli darajada yaxshilangan amalga oshirilishidir matematik tushunchasi a cheklangan avtomat yilda Kompyuter fanlari da ko'rsatilgan dasturlar Birlashtirilgan modellashtirish tili (UML) yozuvlari.

Buning asosidagi tushunchalar, qurilma, kompyuter dasturi yoki boshqa (ko'pincha texnik) jarayonning tashkil etilishi, mavjud ob'ekt yoki uning sub'ektlarining har biri har doim bir qator mumkin bo'lgan holatlarning birida bo'lishi va u erda yaxshi holat bo'lishi kerak. -bu holatlar orasidagi aniqlangan shartli o'tish.

UML holat mashinasi ob'ektga asoslangan variantidir Xarel statechart,[2] UML tomonidan moslashtirilgan va kengaytirilgan.[1],[3] UML holatidagi mashinalarning maqsadi an'anaviy cheklovlarni engib o'tishdir cheklangan holatdagi mashinalar ularning asosiy afzalliklarini saqlab qolishda. UML statecharts yangi tushunchalarni taqdim etadi ierarxik tarzda joylashtirilgan davlatlar va ortogonal mintaqalar, tushunchasini kengaytirganda harakatlar. UML holatidagi mashinalar ikkalasining xususiyatlariga ega Mealy mashinalari va Mur mashinalari. Ular qo'llab-quvvatlaydilar harakatlar bu tizimning holatiga ham, ishga tushirishga ham bog'liq tadbir, Mealy mashinalarida bo'lgani kabi kirish va chiqish harakatlari, Mur mashinalarida bo'lgani kabi, o'tishlar emas, balki holatlar bilan bog'liq.[4]

"UML davlat mashinasi" atamasi ikki turdagi davlat mashinalarini nazarda tutishi mumkin: yurish-turish davlat mashinalari va protokol holati mashinalari. Xulq-atvor holati mashinalari individual sub'ektlar (masalan, sinf misollari), kichik tizim, paket yoki hatto butun tizimning xatti-harakatlarini modellashtirish uchun ishlatilishi mumkin. Protokol holatidagi mashinalar foydalanish protokollarini ifodalash uchun ishlatiladi va ulardan tasniflagichlar, interfeyslar va portlarning qonuniy foydalanish stsenariylarini aniqlash uchun foydalanish mumkin.

Asosiy davlat mashina tushunchalari

Ko'pgina dasturiy ta'minot tizimlari mavjud tadbirlarga asoslangan bu degani, ular doimiy ravishda qandaydir tashqi yoki ichki voqealar sodir bo'lishini kutishadi tadbir sichqonchani bosish, tugmachani bosish, vaqtni belgilash yoki ma'lumotlar paketining kelishi kabi. Hodisani tan olgandan so'ng, bunday tizimlar tegishli hisob-kitoblarni amalga oshirib, apparatni boshqarish yoki boshqa ichki dasturiy ta'minot tarkibiy qismlarini ishga soladigan "yumshoq" hodisalarni ishlab chiqarishni o'z ichiga olishi mumkin. (Shuning uchun voqealarga asoslangan tizimlar muqobil ravishda chaqiriladi reaktiv tizimlar.) Voqealar bilan ishlash tugallangandan so'ng, tizim keyingi hodisani kutishga qaytadi.

Hodisaga javob, odatda, voqea turiga va ichki holatga bog'liq davlat tizimning holati va a ga olib keladigan holat o'zgarishini o'z ichiga olishi mumkin davlatga o'tish. Ushbu davlatlar orasidagi voqealar, holatlar va davlat o'tishlarining namunasi mavhumlashtirilishi va ifodalanishi mumkin cheklangan holatdagi mashina (FSM).

FSM tushunchasi muhim ahamiyatga ega voqealarga asoslangan dasturlash chunki bu voqea bilan ishlashni voqea turiga va tizimning holatiga aniq bog'liq qiladi. To'g'ri ishlatilganda, davlat mashinasi kod orqali bajarilish yo'llarining sonini keskin qisqartirishi, har bir tarmoqlanish nuqtasida sinovdan o'tgan shartlarni soddalashtirishi va turli xil ijro usullari o'rtasida o'tishni soddalashtirishi mumkin.[5] Aksincha, asosiy FSM modelisiz voqealarga asoslangan dasturlash yordamida dasturchilar xatolarga yo'l qo'yishi, kengaytirilishi qiyin va juda murakkab dastur kodlarini ishlab chiqarishi mumkin.[6]

UML holatining asosiy diagrammalari

UML ning umumiy shaklini saqlaydi an'anaviy davlat diagrammalari. UML holat diagrammasi yo'naltirilgan grafikalar unda tugunlar holatlarni bildiradi va ulagichlar holat o'tishini bildiradi. Masalan, 1-rasmda kompyuter klaviatura holati mashinasiga mos keladigan UML holat diagrammasi ko'rsatilgan. UML-da shtatlar davlat nomlari bilan belgilangan yumaloq to'rtburchaklar shaklida namoyish etiladi. Ko'rsatmalar sifatida ko'rsatilgan o'tishlar tetiklantiruvchi hodisalar bilan belgilanadi va ixtiyoriy ravishda bajarilgan harakatlar ro'yxati bilan belgilanadi. The dastlabki o'tish qattiq doiradan kelib chiqadi va tizim birinchi boshlanganda standart holatni belgilaydi. Har qanday davlat diagrammasi shunday o'tishga ega bo'lishi kerak, uni belgilash kerak emas, chunki bu voqea tomonidan qo'zg'atilmaydi. Dastlabki o'tish bilan bog'liq harakatlar bo'lishi mumkin.

1-rasm: kompyuter klaviaturasining holat mashinasini aks ettiruvchi UML holat diagrammasi

Tadbirlar

An tadbir sodir bo'ladigan narsa tizimga ta'sir qiladi. To'liq aytganda, UML spetsifikatsiyasida,[1] voqea atamasi ushbu hodisaning aniq bir misolini emas, balki voqea turini anglatadi. Masalan, "Klaviatura urish" - bu klaviatura uchun voqea, lekin har bir tugmachani bosish voqea emas, balki "Keystrok" hodisasining aniq nusxasi. Klaviaturani qiziqtiradigan yana bir voqea - bu yoqish bo'lishi mumkin, lekin kuchni ertaga soat 10: 05: 36da yoqish - bu faqat "yoqish" hodisasining misoli bo'ladi.

Hodisa bog'liq bo'lishi mumkin parametrlar, voqea instansiyasida nafaqat qiziqarli voqea sodir bo'lganligini, balki ushbu voqea to'g'risida miqdoriy ma'lumotlarni ham etkazish imkoniyatini beradi. Masalan, kompyuter klaviaturasidagi tugmachani bosish natijasida hosil bo'lgan Klaviatura hodisasi Shift, Ctrl va Alt tugmachalari holati bilan bir qatorda belgilarni skanerlash kodini uzatuvchi bog'liq parametrlarga ega.

Hodisa misoli, uni yuzaga keltirgan bir lahzali hodisadan uzoqroq yashaydi va bu hodisani bir yoki bir nechta holat mashinalariga etkazishi mumkin. Yaratilgandan so'ng, voqea misoli uch bosqichdan iborat bo'lishi mumkin bo'lgan qayta ishlash hayot tsikli orqali o'tadi. Birinchidan, voqea misoli qabul qildi u qabul qilinganda va ishlov berishni kutayotganda (masalan, ustiga qo'yiladi voqea navbati ). Keyinchalik, voqea misoli jo'natildi davlat mashinasiga, shu vaqtning o'zida u hozirgi hodisaga aylanadi. Nihoyat, shunday iste'mol qilingan davlat mashinasi voqea nusxasini qayta ishlashni tugatganda. Iste'mol qilingan voqea nusxasi endi qayta ishlash uchun mavjud emas.

Shtatlar

Har bir davlat mashinasida a davlatBu voqea davlat mashinasining reaktsiyasini boshqaradi. Masalan, klaviaturada tugmachani bosganingizda, Caps Lock faol bo'lishiga qarab, hosil bo'lgan belgilar kodi katta yoki kichik belgi bo'ladi. Shuning uchun klaviaturaning xatti-harakatlarini ikkita holatga bo'lish mumkin: "standart" holati va "caps_locked" holati. (Aksariyat klaviaturalarda klaviatura "caps_locked" holatida ekanligini bildiruvchi LED mavjud.) Klaviaturaning ishlashi faqat uning tarixining ba'zi jihatlariga bog'liq, ya'ni Caps Lock tugmachasi bosilganmi yoki yo'qmi, masalan, masalan, ilgari qancha va aniq qaysi boshqa tugmalar bosilganligi to'g'risida. Holat barcha mumkin bo'lgan (ammo ahamiyatsiz) voqealar ketma-ketligini mavhumlashtirishi va faqatgina tegishli bo'lganlarni qamrab olishi mumkin.

Dasturiy ta'minot holatidagi mashinalar (va ayniqsa, klassik FSM) kontekstida atama davlat ko'pincha bitta singari tushuniladi holat o'zgaruvchisi faqat cheklangan miqdordagi apriori belgilangan qiymatlarni qabul qilishi mumkin (masalan, klaviatura uchun ikkita qiymat yoki umuman olganda - o'zgaruvchiga o'xshash enum ko'plab dasturlash tillarida yozing). G'oyasi holat o'zgaruvchisi (va klassik FSM modeli) ning qiymati holat o'zgaruvchisi har qanday vaqtda tizimning hozirgi holatini to'liq belgilaydi. Holat tushunchasi koddagi ijro kontekstini aniqlash muammosini ko'pgina o'zgaruvchilar o'rniga faqat holat o'zgaruvchilarini sinab ko'rish uchun kamaytiradi va shu bilan ko'plab shartli mantiqlarni yo'q qiladi.

Kengaytirilgan shtatlar

Ammo amalda davlat mashinasining butun holatini yagona deb talqin qilish holat o'zgaruvchisi juda oddiy mashinalardan tashqari barcha davlat mashinalari uchun tezda amaliy emas. Haqiqatan ham, bizning mashinamiz holatida bitta 32 bitli tamsayı bo'lsa ham, bu 4 milliarddan ortiq turli holatlarga hissa qo'shishi mumkin - va bu muddatidan oldin davlat portlashi. Ushbu talqin amaliy emas, shuning uchun UML holatidagi mashinalarda hammasi davlat davlat mashinasi odatda (a) sanoqsiz bo'linadi holat o'zgaruvchisi va (b) nomlangan barcha boshqa o'zgaruvchilar kengaytirilgan davlat. Ko'rishning yana bir usuli - sanab o'tilganlarni talqin qilishdir holat o'zgaruvchisi sifat jihati sifatida va kengaytirilgan davlat butun davlatning miqdoriy jihatlari sifatida. Ushbu talqinda o'zgaruvchining o'zgarishi har doim ham tizim xatti-harakatining sifat jihatlari o'zgarishini anglatmaydi va shuning uchun holat o'zgarishiga olib kelmaydi.[7]

Davlat mashinalari bilan to'ldirilgan kengaytirilgan davlat o'zgaruvchilar deyiladi kengaytirilgan davlat mashinalari va UML holatidagi mashinalar ushbu toifaga tegishli. Kengaytirilgan holatdagi mashinalar kengaytirilgan holat o'zgaruvchilarini kiritmasdan, amaliyotga qaraganda ancha murakkab muammolarga asosiy formalizmni qo'llashi mumkin. Masalan, biz FSM-da biron bir cheklovni qo'llashimiz kerak bo'lsa (masalan, klaviatura tugmachalarini bosish sonini 1000 ga qadar cheklash kerak) kengaytirilgan davlat biz 1000 ta davlatni yaratishimiz va qayta ishlashimiz kerak bo'ladi - bu amaliy emas; ammo, kengaytirilgan davlat mashinasi yordamida biz key_count o'zgaruvchan, bu 1000 ga boshlangan va har bir klaviatura bosimi o'zgarmasdan kamaytirilgan holat o'zgaruvchisi.

Shakl 2: kengaytirilgan holat o'zgaruvchan key_count va har xil qo'riqlash sharoitlariga ega bo'lgan "arzon klaviatura" holatidagi kengaytirilgan mashina

2-rasmdagi holat diagrammasi tizimning to'liq holati (. Deb nomlangan) kengaytirilgan holat mashinasining namunasidir kengaytirilgan davlat) - sifat jihatining kombinatsiyasi - bu holat o'zgaruvchisi- va miqdoriy jihatlari - bu kengaytirilgan davlat o'zgaruvchilar.

Kengaytirilgan davlat mashinalarining aniq afzalligi - bu moslashuvchanlik. Masalan, tomonidan boshqariladigan chegarani o'zgartirish key_count 1000 dan 10000 gacha tugmachalarni bosish kengaytirilgan davlat mashinasini umuman qiyinlashtirmaydi. Faqat boshlang'ich qiymatini o'zgartirish zarur bo'lgan yagona o'zgartirish key_count ishga tushirish paytida kengaytirilgan holat o'zgaruvchisi.

Kengaytirilgan holatdagi mashinalarning bu egiluvchanligi narx bilan birga keladi, ammo kengaytirilgan holatning "sifatli" va "miqdoriy" tomonlari o'rtasidagi murakkab bog'lanish tufayli. Birlashma 2-rasmda ko'rsatilgandek o'tishlarga biriktirilgan himoya sharoitlari orqali sodir bo'ladi.

Qo'riqchi shartlari

Qo'riqchi shartlari (yoki oddiygina soqchilar) Mantiqiy ifodalar qiymatiga qarab dinamik ravishda baholanadi kengaytirilgan holat o'zgaruvchilari va voqea parametrlari. Qo'riqlash shartlari davlat mashinasining xatti-harakatlariga ta'sir yoki harakatni faqat DO'GA baholaganda yoqadi va FALSEga baho berganda o'chirib qo'yadi. UML yozuvida himoya shartlari to'rtburchak qavsda ko'rsatiladi (masalan, [key_count == 0] shakl 2).

Qo'riqchilarga ehtiyoj - bu xotirani qo'shishning bevosita natijasidir kengaytirilgan holat o'zgaruvchilari davlat mashinasozlik formalizmiga. Kengaytirilgan holat o'zgaruvchilari va qo'riqchilar tejamkorlik bilan foydalanilganda dizaynlarni soddalashtiradigan kuchli mexanizmni tashkil etadi. Boshqa tomondan, kengaytirilgan davlatlar va soqchilarni osonlikcha suiiste'mol qilish mumkin. [8]

Amallar va o'tish

Qachon voqea misoli jo'natiladi, davlat mashinasi bajarish orqali javob beradi harakatlarmasalan, o'zgaruvchini o'zgartirish, I / U-ni bajarish, funktsiyani chaqirish, boshqa voqea nusxasini yaratish yoki boshqa holatga o'tish. Joriy voqea bilan bog'liq bo'lgan har qanday parametr qiymatlari ushbu voqea to'g'ridan-to'g'ri sabab bo'lgan barcha harakatlar uchun mavjud.

Bir holatdan ikkinchi holatga o'tish deyiladi davlatga o'tish, va uni keltirib chiqaradigan hodisa tetiklovchi hodisa yoki oddiygina deb ataladi qo'zg'atuvchi. Klaviatura misolida, agar CapsLock tugmachasi bosilganda klaviatura "standart" holatida bo'lsa, klaviatura "caps_locked" holatiga kiradi. Ammo, agar klaviatura allaqachon "caps_locked" holatida bo'lsa, CapsLock tugmachasini bosish boshqacha o'tishga olib keladi - "caps_locked" dan "default" holatiga. Ikkala holatda ham CapsLock tugmachasini bosish ogohlantiruvchi hodisadir.

Yilda kengaytirilgan davlat mashinalari, o'tish a bo'lishi mumkin qo'riqchi, demak, o'tish faqat "qo'riqchi" HAQQINI baholagan taqdirda "olov" berishi mumkin. Shtat bir-biriga mos kelmaydigan qo'riqchilarga ega bo'lsa, xuddi shu qo'zg'atuvchiga javoban ko'plab o'tishlarga ega bo'lishi mumkin; ammo, bu holat umumiy qo'zg'atuvchi sodir bo'lganda soqchilarni baholash ketma-ketligida muammolarni keltirib chiqarishi mumkin. UML spetsifikatsiyasi[1] qasddan ma'lum bir buyurtmani nazarda tutmaydi; aksincha, UML dizaynerga qo'riqchilarni shunday baho beradiki, ularni baholash tartibi ahamiyatsiz bo'ladi. Amalda, bu shuni anglatadiki, qo'riqlash iboralari hech qanday yon ta'sirga ega bo'lmasligi kerak va hech bo'lmaganda bir xil qo'zg'atuvchiga ega bo'lgan boshqa qo'riqchilarning bahosini o'zgartirishi mumkin emas.

Tugallanishga qadar bajarilish modeli

Barcha davlat mashinasozlik rasmiyatchiliklari, shu jumladan UML holatidagi mashinalar, universal ravishda har qanday hodisani qayta ishlashni navbatdagi hodisani boshlashdan oldin davlat mashinasi yakunlaydi deb taxmin qiladi. Ushbu ijro modeli deyiladi oxirigacha yugurish yoki RTC.

RTC modelida tizim voqealarni diskret, bo'linmas RTC bosqichlarida qayta ishlaydi. Yangi kiruvchi hodisalar joriy hodisani qayta ishlashni to'xtata olmaydi va ularni saqlash kerak (odatda voqea navbati ) davlat mashinasi yana ishlamay qolguncha. Ushbu semantika bitta davlat mashinasida har qanday ichki kelishuv muammolaridan butunlay qochadi. RTC modeli shuningdek, o'tish davri bilan bog'liq bo'lgan harakatlarni qayta ishlashning kontseptual muammosini hal qiladi, bu erda davlat mashinasi harakat davomida aniq belgilangan holatda emas (ikki holat o'rtasida). Hodisalarni qayta ishlash jarayonida tizim javob bermaydi (kuzatilmaydi), shuning uchun bu vaqt ichida noto'g'ri aniqlangan holat amaliy ahamiyatga ega emas.

Shunga qaramay, RTC, davlat mashinasi RTC bosqichi tugamaguncha protsessorni monopoliyalashtirishi kerak degani emas.[1] The imtiyoz cheklash faqat voqealarni qayta ishlash bilan band bo'lgan davlat mashinasining vazifa kontekstiga tegishli. A ko'p vazifali muhit, boshqa vazifalar (band bo'lgan davlat mashinasining vazifa konteksti bilan bog'liq bo'lmagan) bajarilishi mumkin, ehtimol hozirda bajarilayotgan davlat mashinasini oldindan belgilab qo'yishi mumkin. Boshqa davlat mashinalari o'zgaruvchan yoki boshqa resurslarni bir-biri bilan bo'lishmasa, yo'q o'zaro bog'liqlik xavfi.

RTCni qayta ishlashning asosiy afzalligi soddaligi. Uning eng katta kamchiligi shundaki, davlat mashinasining javob berish qobiliyati uning eng uzoq RTC pog'onasi bilan belgilanadi. Qisqa RTC qadamlariga erishish ko'pincha real vaqtda dizaynlarni sezilarli darajada murakkablashtirishi mumkin.

An'anaviy FSM formalizmiga UML kengaytmalari

Garchi an'anaviy FSMlar kichikroq muammolarni hal qilish uchun juda yaxshi vosita bo'lib, umuman olganda ma'lumki, ular o'rtacha darajadagi tizimlar uchun ham boshqarib bo'lmaydigan bo'lib qoladi. Sifatida tanilgan hodisa tufayli holat va o'tish portlashi, an'anaviy FSMning murakkabligi u tasvirlaydigan tizimning murakkabligidan ancha tez o'sishga intiladi. Bu an'anaviy davlat mashinasozlik formalizmining takrorlanishlarni keltirib chiqarishi sababli sodir bo'ladi. Masalan, siz oddiy cho'ntak kalkulyatorining xatti-harakatlarini an'anaviy FSM bilan namoyish etishga harakat qilsangiz, ko'plab hodisalarda (masalan, "Tozalash" yoki "O'chirish" tugmachalarini bosish) bir xil ishlov berilishini darhol sezasiz. Quyidagi rasmda ko'rsatilgan an'anaviy FSM bunday umumiylikni qo'lga kiritish uchun vositaga ega emas va talab qiladi takrorlash ko'plab davlatlarda bir xil harakatlar va o'tish. An'anaviy davlat mashinalarida etishmayotgan narsa - bu odatiy xatti-harakatni ko'plab davlatlarda bo'lishish uchun faktoring qilish mexanizmi.

Cho'ntak kalkulyatori (chapda) va an'anaviy o'tish davri mashinasi, bir nechta o'tishlari aniq va o'chirilgan (o'ngda)

UML holatidagi mashinalar an'anaviy FSM-larning aynan shu kamchiliklarini bartaraf etadi. UML holatidagi mashinaning murakkabligi endi portlamaydi, balki u ta'riflaydigan reaktiv tizimning murakkabligini ishonchli tarzda namoyish etishga moyil bo'lishi uchun ular takrorlashni yo'q qilish uchun bir qator xususiyatlarni taqdim etadi. Shubhasiz, ushbu funktsiyalar dasturiy ta'minot ishlab chiqaruvchilari uchun juda qiziq, chunki ular faqatgina butun davlat mashinasini hayotdagi muammolarga haqiqatan ham mos keladigan yondashuvga aylantiradi.

Ierarxik tarzda joylashtirilgan davlatlar

UML davlat mashinalarining eng muhim yangiligi an'anaviy FSMlar ning kiritilishi ierarxik tarzda joylashtirilgan davlatlar (shuning uchun statecharts ham chaqiriladi ierarxik davlat mashinalari, yoki HSMs). Vaziyatni joylashtirish bilan bog'liq semantika quyidagicha (3-rasmga qarang): Agar tizim ichki holatida bo'lsa, masalan "natija" ( substrat), u ham (bilvosita) atrofdagi holatda "on" (the deb ataladi) super davlat). Ushbu davlat mashinasi har qanday hodisani substrat kontekstida ishlashga harakat qiladi, u konseptual ravishda ierarxiyaning quyi darajasida joylashgan. Biroq, agar "natija" pastki qismi voqeani qanday boshqarishni belgilamasa, voqea an'anaviy "tekis" holatdagi mashinada bo'lgani kabi jimgina tashlab yuborilmaydi; aksincha, u superstatning yuqori darajadagi kontekstida "yoqilgan" holda avtomatik ravishda amalga oshiriladi. Tizimning "natija" holati va "yoqilgan" holati nimani anglatadi. Albatta, shtat uyasi faqat bitta daraja bilan chegaralanmaydi va voqealarni qayta ishlashning oddiy qoidasi har qanday uyalash darajasiga rekursiv ravishda amal qiladi.

3-rasm: cho'ntak kalkulyatori (chapda) va davlat joylashtirilgan UML holat mashinasi (o'ngda)

Boshqa shtatlarni o'z ichiga olgan shtatlar deyiladi kompozitsion holatlar; aksincha, ichki tuzilishga ega bo'lmagan holatlar deyiladi oddiy davlatlar. Ichki holat a to'g'ridan-to'g'ri substrat u boshqa biron bir davlat tomonidan mavjud bo'lmaganida; aks holda, u a deb nomlanadi o'tuvchi substrat.

Kompozit holatning ichki tuzilishi o'zboshimchalik bilan murakkab bo'lishi mumkinligi sababli, har qanday ierarxik holat mashinasini ba'zi (yuqori darajadagi) kompozitsion holatning ichki tuzilishi sifatida qarash mumkin. Bitta kompozitsion holatni davlat mashina ierarxiyasining yakuniy ildizi sifatida aniqlash kontseptual jihatdan qulaydir. UML spetsifikatsiyasida,[1] har bir davlat mashinasida a yuqori davlat (har bir davlat mashinasi iyerarxiyasining mavhum ildizi), unda butun davlat mashinasining barcha boshqa elementlari mavjud. Hamma narsani o'z ichiga olgan ushbu yuqori holatning grafik ko'rinishi majburiy emas.

Ko'rib turganingizdek, ierarxik holat dekompozitsiyasining semantikasi xatti-harakatni qayta ishlatishni osonlashtirish uchun mo'ljallangan. Substatlar (ichki holatlar) faqat superstatlardan (o'z ichiga olgan holatlardan) farqlarni aniqlashlari kerak. Substansiya osongina meros qilib olishi mumkin[6] oddiy xatti-harakatlarni shunchaki e'tiborsiz qoldirish orqali o'zlarining superstat (lar) dan odatdagi xatti-harakatlar, keyinchalik ularni yuqori darajadagi davlatlar avtomatik ravishda boshqaradi. Boshqacha qilib aytadigan bo'lsak, ierarxik holatni uyalash imkon beradi farq bo'yicha dasturlash.[9]

Davlat ierarxiyasining eng ko'p ta'kidlanadigan jihati mavhumlik - murakkablikni engish uchun eski va kuchli usuldir. Bir vaqtning o'zida murakkab tizimning barcha jihatlariga murojaat qilish o'rniga, ko'pincha tizimning ayrim qismlarini e'tiborsiz qoldirish (mavhum holda) mumkin. Ierarxik holatlar ichki tafsilotlarni yashirish uchun ideal mexanizmdir, chunki dizayner osongina kattalashtirishi yoki kattalashtirishi uchun ichki holatlarni yashirishi yoki ko'rsatishi mumkin.

Biroq, kompozitsion holatlar shunchaki murakkablikni yashirmaydi; ular ierarxik hodisalarni qayta ishlashning kuchli mexanizmi orqali uni faol ravishda kamaytiradi. Bunday qayta ishlatmasdan, hatto tizimning murakkabligini o'rtacha darajada oshirish holatlar va o'tishlar sonining portlovchi o'sishiga olib kelishi mumkin. Masalan, cho'ntak kalkulyatorini ifodalovchi ierarxik holat mashinasi (3-rasm) deyarli har bir holatda Clear va Off-ga o'tishlarni takrorlashdan saqlaydi. Takrorlashni oldini olish HSMlarning o'sishini tizimning murakkabligi o'sishiga mutanosib ravishda saqlashga imkon beradi. Modellashtirilgan tizim o'sib borishi bilan, takroriy foydalanish imkoniyati ham oshadi va shu bilan an'anaviy FSMlarga xos bo'lgan holatlar sonining va o'tish davri nomutanosib o'sishiga qarshi turadi.

Ortogonal mintaqalar

Ierarxik holat dekompozitsiyasi bo'yicha tahlil har qanday holatga "eksklyuziv-OR" operatsiyasini qo'llashni o'z ichiga olishi mumkin. Masalan, agar tizim "yoqilgan" davlatda bo'lsa (3-rasm), u ham "operand1" pastki qismida yoki "operand2" pastki qismida yoki "opEntered" pastki qismida yoki "natija" da bo'lishi mumkin. substrat. Bu "o'ta" davlatni "OR holati" deb ta'riflashga olib keladi.

UML statecharts shuningdek, to'ldiruvchi VA-dekompozitsiyasini taqdim etadi. Bunday dekompozitsiya kompozitsion holat ikki yoki undan ortiq ortogonal mintaqani o'z ichiga olishi mumkinligini anglatadi (ortogonal bu kontekstda mos va mustaqil degan ma'noni anglatadi) va bunday kompozitsion holat uning barcha dikgen mintaqalarida bo'lishiga olib keladi.[10]

Ortogonal mintaqalar tizimning xatti-harakati mustaqil, bir vaqtning o'zida faol qismlarga bo'linib ketganda, davlatlar sonining kombinatorial ko'payishi bilan bog'liq tez-tez uchraydigan muammoni hal qiladi. Masalan, asosiy klaviaturadan tashqari, kompyuter klaviaturasida mustaqil raqamli klaviatura mavjud. Avvalgi muhokamadan asosiy klaviaturaning allaqachon aniqlangan ikkita holatini eslang: "standart" va "caps_locked" (1-rasmga qarang). Raqamli klaviatura, shuningdek, Num Lock faolligiga qarab, ikkita holatda bo'lishi mumkin - "raqamlar" va "o'qlar". Shuning uchun standart dekompozitsiyada klaviaturaning to'liq holat maydoni Dekart mahsuloti ikkita komponentdan (asosiy klaviatura va raqamli klaviatura) to'rt holatdan iborat: "standart raqamlar", "standart o'qlar", "caps_locked – raqamlar" va "caps_locked – o'qlar". Biroq, bu g'ayritabiiy vakillik bo'ladi, chunki raqamli klaviatura harakati asosiy klaviatura holatiga bog'liq emas va aksincha. Ortogonal mintaqalardan foydalanish kartezyen mahsuloti sifatida mustaqil xulq-atvorni aralashishiga yo'l qo'ymaslik va buning o'rniga ular 4-rasmda ko'rsatilgandek alohida bo'lib qolishlariga imkon beradi.

4-rasm: kompyuter klaviaturasining ikkita ortogonal mintaqasi (asosiy klaviatura va raqamli klaviatura)

E'tibor bering, agar ortogonal mintaqalar bir-biridan to'liq mustaqil bo'lsa, ularning murakkabligi shunchaki qo'shimchadir, ya'ni tizimni modellashtirish uchun zarur bo'lgan mustaqil holatlar soni shunchaki yig'indidir k + l + m + ..., qayerda k, l, m, ... har bir ortogonal mintaqadagi OR holatlarining sonlarini belgilang. Biroq, o'zaro bog'liqlikning umumiy holati, aksincha, ko'paytma murakkabligini keltirib chiqaradi, shuning uchun umuman olganda zarur bo'lgan holatlar soni mahsulotdir k × l × m × ....

Haqiqiy hayotning aksariyat holatlarida, ortogonal mintaqalar faqat taxminan ortogonal (ya'ni haqiqatdan ham mustaqil bo'lmagan) bo'lar edi. Shuning uchun UML statecharts-da ortogonal mintaqalar uchun o'zlarining xatti-harakatlarini sinxronlashtirish va aloqa qilish uchun bir qator usullar mavjud. Ushbu (ba'zida murakkab) mexanizmlarning boy to'plamlari orasida, ehtimol, eng muhim xususiyati shundaki, ortogonal mintaqalar o'zlarining xatti-harakatlarini bir-biriga voqea misollarini yuborish orqali muvofiqlashtirishi mumkin.

Ortogonal mintaqalar ijro etilish mustaqilligini nazarda tutsa ham (ozmi-ko'pmi bir xillikka imkon beradi), UML spetsifikatsiyasi har bir tikonli mintaqaga alohida ijro etish ipini tayinlashni talab qilmaydi (garchi bu zarur bo'lsa, amalga oshirilishi mumkin). Darhaqiqat, odatda, ortogonal mintaqalar bir xil ipda ishlaydi.[11] UML spetsifikatsiyasi faqat dizayner hodisa misollarini tegishli ortogonal hududlarga yuborish uchun biron bir buyurtmaga tayanmasligini talab qiladi.

Kirish va chiqish harakatlari

UML statechartidagi har bir holat ixtiyoriy bo'lishi mumkin kirish harakatlari, ular davlatga kirish paytida bajariladi, shuningdek ixtiyoriy chiqish harakatlari, ular davlatdan chiqish paytida amalga oshiriladi. Kirish va chiqish harakatlari o'tish holatlari bilan emas, balki holatlar bilan bog'liq. Holat qanday kiritilishidan yoki chiqmasligidan qat'i nazar, uning barcha kirish va chiqish harakatlari bajariladi. Ushbu xususiyat tufayli statecharts o'zini tutadi Mur mashinalari. Davlatga kirish va chiqish harakatlari uchun UML yozuvi zaxira qilingan "kirish" (yoki "chiqish") so'zini shtatda, nom bo'linmasining ostiga, so'ngra oldinga chiziq va o'zboshimchalik bilan bajarilgan harakatlar ro'yxatiga joylashtirishdir (5-rasmga qarang).

5-rasm: Toster pechining kirish va chiqish harakatlariga ega bo'lgan holatdagi mashinasi

Kirish va chiqish harakatlarining qiymati shundaki, ular vositalarni taqdim etadi kafolatlangan ishga tushirish va tozalash, sinf konstruktorlari va destruktorlari singari Ob'ektga yo'naltirilgan dasturlash. Masalan, 5-rasmdagi "eshik_open" holatini ko'rib chiqing, bu eshik ochiq bo'lganida tushdi mashinasining ishlashiga mos keladi. Ushbu holat xavfsizlik uchun juda muhim talabga ega: Eshik ochiq bo'lganda har doim isitgichni o'chiring. Bundan tashqari, eshik ochiq bo'lsa, pechni yoritadigan ichki chiroq yonishi kerak.

Albatta, bunday xatti-harakatni "door_open" holatiga olib boradigan har bir o'tish yo'liga tegishli harakatlar (isitgichni o'chirib qo'yish va chiroqni yoqish) qo'shish orqali modellashtirish mumkin (foydalanuvchi eshikni istalgan vaqtda "pishirish" yoki "tushdi" paytida ochishi mumkin) "yoki pech umuman ishlatilmaganda). "Door_open" holatidan chiqayotgan har bir o'tish paytida ichki chiroqni o'chirishni unutmaslik kerak. Biroq, bunday echim sabab bo'ladi takrorlash ko'plab o'tishlardagi harakatlar. Bundan ham muhimi, bunday yondashuv xatti-harakatga keyingi tuzatishlar paytida dizayndagi xatolarga yo'l qo'yadi (masalan, yangi xususiyat ustida ishlaydigan keyingi dasturchi, masalan, yuqori darajali brauzer, "door_open" ga o'tishda isitgichni o'chirib qo'yishni unutishi mumkin).

Kirish va chiqish harakatlari kerakli xatti-harakatlarni xavfsizroq, sodda va intuitiv tarzda amalga oshirishga imkon beradi. 5-rasmda ko'rsatilgandek, "isitish" dan chiqish harakati isitgichni o'chiradi, "eshik_open" ga kirish harakati pechning chiroqini yoqadi va "eshik_open" dan chiqish harakati chiroqni o'chiradi. Kirish va chiqish harakatlaridan foydalanish harakatga o'tishdan ko'ra afzalroqdir, chunki u takroriy kodlashni oldini oladi va xavfsizlik xavfini yo'q qilish orqali funktsiyani yaxshilaydi; (eshik ochiq holda isitgich yoqilgan). Chiqish harakatlarining semantikasi, o'tish yo'lidan qat'i nazar, tushdi mashinasi "isitish" holatida bo'lmaganida, isitgich o'chirilishini kafolatlaydi.

Kiritish harakatlari har qanday bog'liq holat kiritilganda avtomatik ravishda bajarilganligi sababli, ular ko'pincha ish sharoitlarini yoki holatning o'ziga xosligini aniqlaydilar, chunki sinf konstruktori qurilayotgan ob'ektning o'ziga xosligini aniqlaydi. Masalan, "isitish" holatining o'ziga xosligi isitgich yoqilganligi bilan belgilanadi. Ushbu holat har qanday "isitish" substansiyasiga kirishdan oldin o'rnatilishi kerak, chunki "qizdirish" kabi "isitish" substratiga kirish harakatlari "isitish" superstatining to'g'ri initsializatsiyasiga tayanadi va faqat ushbu initsializatsiyadan farqlarni bajaradi. Binobarin, kirish harakatlarining bajarilish tartibi har doim tashqi holatdan ichki holatga (yuqoridan pastga) o'tishi kerak.

Ushbu buyurtma sinf konstruktorlari chaqirilish tartibiga o'xshashligi ajablanarli emas. Sinfni qurish har doim sinf iyerarxiyasining tub ildizidan boshlanadi va barcha meros darajalari orqali o'rnatiladigan sinfgacha davom etadi. Chiqish harakatlarining bajarilishi, destruktiv chaqiruvga mos keladi, aniq teskari tartibda (pastdan yuqoriga) davom etadi.

Ichki o'tish

Odatda, hodisa faqat ba'zi ichki harakatlarning bajarilishini keltirib chiqaradi, lekin holat o'zgarishiga olib kelmaydi (holatga o'tish). Bunday holda, bajarilgan barcha harakatlar quyidagilarni o'z ichiga oladi ichki o'tish. Masalan, bitta klaviaturani terganda, u har xil belgilar kodlarini yaratish orqali javob beradi. Biroq, Caps Lock tugmachasi bosilmasa, klaviatura holati o'zgarmaydi (holatga o'tish sodir bo'lmaydi). UML-da ushbu holat 6-rasmda ko'rsatilgandek ichki o'tishlar bilan modellashtirilishi kerak. Ichki o'tishlar uchun UML belgisi ichki o'tish (yoki chiqish) so'zi o'rniga chiqish (yoki kirish) harakatlari uchun ishlatiladigan umumiy sintaksisga amal qiladi. tetiklantiruvchi hodisa bilan belgilanadi (masalan, 6-rasmdagi ANY_KEY hodisasi tetiklagan ichki o'tishni ko'ring).

6-rasm: Klaviatura holati mashinasining ichki o'tishlari bilan UML holati diagrammasi

Kirish va chiqish harakatlari bo'lmagan taqdirda, ichki o'tish jarayoni xuddi shunday bo'ladi o'z-o'zidan o'tish (maqsadli holat manba holati bilan bir xil bo'lgan o'tish). Aslida, klassikada Mealy mashinasi, harakatlar faqat davlat o'tishlari bilan bog'liq, shuning uchun holatni o'zgartirmasdan harakatlarni amalga oshirishning yagona usuli - bu o'z-o'zidan o'tish (ushbu maqolaning yuqori qismidan 1-rasmda yo'naltirilgan tsikl sifatida tasvirlangan). Biroq, kirish va chiqish harakatlari mavjud bo'lganda, UML statecharts-da bo'lgani kabi, o'z-o'zidan o'tish chiqish va kirish harakatlarining bajarilishini o'z ichiga oladi va shuning uchun u ichki o'tishdan farq qiladi.

O'z-o'zidan o'tishdan farqli o'laroq, ichki o'tish natijasida hech qanday kirish yoki chiqish harakatlari amalga oshirilmaydi, hatto ichki o'tish hozirgi faol holatga qaraganda yuqori darajadagi meros bo'lib o'tgan bo'lsa ham. Har qanday uyalash darajasida superstatlardan meros bo'lib o'tgan ichki o'tishlar to'g'ridan-to'g'ri hozirgi holatda aniqlanganidek harakat qiladi.

O'tishni bajarish ketma-ketligi

Kiritish va chiqish xatti-harakatlari bilan birgalikda davlat uyalash an'anaviy FSMlarga nisbatan HSMlarda davlat o'tish semantikasini sezilarli darajada murakkablashtiradi. Muomala qilishda ierarxik tarzda joylashtirilgan davlatlar va ortogonal mintaqalar, oddiy atama hozirgi holat juda chalkash bo'lishi mumkin. HSMda bir vaqtning o'zida bir nechta holat faol bo'lishi mumkin. Agar holat mashinasi tarkibida bo'lgan barg holatida bo'lsa (bu yuqori darajadagi kompozitsion holatida bo'lishi mumkin va hokazo), to'g'ridan-to'g'ri yoki o'tish davrida barg holatini o'z ichiga olgan barcha kompozitsion holatlar ham faoldir . Bundan tashqari, ushbu ierarxiyadagi ba'zi bir kompozitsion holatlar ortogonal mintaqalarga ega bo'lishi mumkinligi sababli, hozirgi faol holat aslida ildizlarda bitta yuqori holatdan boshlanib, barglardagi alohida oddiy holatlarga qadar bo'lgan holatlar daraxti bilan ifodalanadi. UML spetsifikatsiyasi davlat konfiguratsiyasi kabi holat daraxtini bildiradi.[1]

7-rasm: Davlat o'tishidagi davlat rollari

UML-da holat o'tish har qanday ikkita holatni to'g'ridan-to'g'ri bog'lashi mumkin. Kompozit bo'lishi mumkin bo'lgan ushbu ikki holat quyidagicha belgilanadi asosiy manba va asosiy maqsad o'tish davri. 7-rasmda oddiy o'tish misoli ko'rsatilgan va ushbu o'tishdagi holat rollari tushuntirilgan. UML spetsifikatsiyasi holatga o'tish quyidagi harakatlarni quyidagi ketma-ketlikda bajarishni nazarda tutadi (15.3.14-bo'limga qarang: OMG yagona modellashtirish tili (OMG UML), infratuzilma versiyasi 2.2[1]):

  1. O'tish bilan bog'liq bo'lgan qo'riqlash holatini baholang va faqat qo'riqchi TRUE ga baho bergan taqdirda quyidagi amallarni bajaring.
  2. Manba holati konfiguratsiyasidan chiqing.
  3. O'tish bilan bog'liq harakatlarni bajaring.
  4. Maqsadli davlat konfiguratsiyasini kiriting.

O'tish ketma-ketligini bir xil darajada asosiy manba va asosiy maqsad uyalashning oddiy holatida izohlash oson. Masalan, 7-rasmda ko'rsatilgan T1 o'tish g () gvardiyasini baholashga olib keladi; keyin harakatlar ketma-ketligi: a (); b (); t (); c (); d (); va e (); soqchi deb taxmin qilsa g () HAQIQI uchun baholaydi.

Biroq, davlat ierarxiyasining turli darajalarida joylashgan manba va maqsadli holatlarning umumiy holatida, uyalashning qancha darajasidan chiqish kerakligi darhol aniq bo'lmasligi mumkin. UML spetsifikatsiyasi[1] o'tish barcha ichki holatlardan joriy faol holatdan (asosiy manba holatining to'g'ridan-to'g'ri yoki o'tuvchi substansiyasi bo'lishi mumkin) chiqib ketishni o'z ichiga oladi, lekin shu jumladan emasligini belgilaydi. eng kam ajdod (LCA) asosiy manbaning holati va asosiy maqsad holatlari. Nomidan ko'rinib turibdiki, LCA bir vaqtning o'zida manba va maqsad holatlarining superstati (ajdodi) bo'lgan eng past kompozitsion holatdir. Yuqorida aytib o'tilganidek, chiqish harakatlarini bajarish tartibi har doim eng chuqur joylashtirilgan holatdan (hozirgi faol holat) iyerarxiyani LCA gacha, lekin LCA dan chiqmasdan turib oladi. Masalan, 7-rasmda ko'rsatilgan "s1" va "s2" holatlarining LCA (s1, s2) holati "s" dir.

Maqsadli davlat konfiguratsiyasiga kirish chiqish harakatlari to'xtagan darajadan boshlanadi (ya'ni LCA ichkarisidan). Yuqorida aytib o'tilganidek, kirish amallari eng yuqori darajadagi holatdan boshlab davlat iyerarxiyasidan asosiy maqsad holatiga qadar bajarilishi kerak. If the main target state is composite, the UML semantics prescribes to "drill" into its submachine recursively using the local initial transitions. The target state configuration is completely entered only after encountering a leaf state that has no initial transitions.

Local versus external transitions

Before UML 2,[1] the only transition semantics in use was the external transition, in which the main source of the transition is always exited and the main target of the transition is always entered. UML 2 preserved the "external transition" semantics for backward compatibility, but introduced also a new kind of transition called local transition (see Section 15.3.15 in Unified Modeling Language (UML), Infrastructure Version 2.2[1]). For many transition topologies, external and local transitions are actually identical. However, a local transition doesn't cause exit from and reentry to the main source state if the main target state is a substate of the main source. In addition, a local state transition doesn't cause exit from and reentry to the main target state if the main target is a superstate of the main source state.

Figure 8: Local (a) versus external transitions (b).

Figure 8 contrasts local (a) and external (b) transitions. In the top row, you see the case of the main source containing the main target. The local transition does not cause exit from the source, while the external transition causes exit and reentry to the source. In the bottom row of Figure 8, you see the case of the main target containing the main source. The local transition does not cause entry to the target, whereas the external transition causes exit and reentry to the target.

Event deferral

Sometimes an event arrives at a particularly inconvenient time, when a state machine is in a state that cannot handle the event. In many cases, the nature of the event is such that it can be postponed (within limits) until the system enters another state, in which it is better prepared to handle the original event.

UML state machines provide a special mechanism for deferring events in states. In every state, you can include a clause [event list]/defer. If an event in the current state's deferred event list occurs, the event will be saved (deferred) for future processing until a state is entered that does not list the event in its deferred event list. Upon entry to such a state, the UML state machine will automatically recall any saved event(s) that are no longer deferred and will then either consume or discard these events. It is possible for a superstate to have a transition defined on an event that is deferred by a substate. Consistent with other areas in the specification of UML state machines, the substate takes precedence over the superstate, the event will be deferred and the transition for the superstate will not be executed. In the case of orthogonal regions where one orthogonal region defers an event and another consumes the event, the consumer takes precedence and the event is consumed and not deferred.

The limitations of UML state machines

Harel statecharts, which are the precursors of UML state machines, have been invented as "a visual formalism for complex systems",[2] so from their inception, they have been inseparably associated with graphical representation in the form of state diagrams. However, it is important to understand that the concept of UML state machine transcends any particular notation, graphical or textual. The UML specification[1] makes this distinction apparent by clearly separating state machine semantics from the notation.

However, the notation of UML statecharts is not purely visual. Any nontrivial state machine requires a large amount of textual information (e.g., the specification of actions and guards). The exact syntax of action and guard expressions isn't defined in the UML specification, so many people use either structured English or, more formally, expressions in an implementation language such as C, C ++, yoki Java.[12] In practice, this means that UML statechart notation depends heavily on the specific dasturlash tili.

Nevertheless, most of the statecharts semantics are heavily biased toward graphical notation. For example, state diagrams poorly represent the sequence of processing, be it order of evaluation of soqchilar or order of dispatching events to orthogonal regions. The UML specification sidesteps these problems by putting the burden on the designer not to rely on any particular sequencing. However, it is the case that when UML state machines are actually implemented, there is inevitably full control over order of execution, giving rise to criticism that the UML semantics may be unnecessarily restrictive. Similarly, statechart diagrams require a lot of plumbing gear (pseudostates, like joins, forks, junctions, choicepoints, etc.) to represent the flow of control graphically. In other words, these elements of the graphical notation do not add much value in representing flow of control as compared to plain structured code.

The UML notation and semantics are really geared toward computerized UML vositalari. A UML state machine, as represented in a tool, is not just the state diagram, but rather a mixture of graphical and textual representation that precisely captures both the state topology and the actions. The users of the tool can get several complementary views of the same state machine, both visual and textual, whereas the generated code is just one of the many available views.

Shuningdek qarang

List of software applications that provide dedicated support for hierarchical finite-state machines

Adabiyotlar

  1. ^ a b v d e f g h men j k l OMG (February 2009). "OMG Unified Modeling Language (OMG UML), Superstructure Version 2.2".
  2. ^ a b Harel, David (1987). "Statecharts: A Visual Formalism for Complex Systems" (PDF).
  3. ^ D. Drusinsky, Modelling and verification using UML statecharts, Elsevier, 2006
  4. ^ Samek, Miro (March 2009). "A crash course in UML state machines".
  5. ^ Samek, Miro (2008). Amaliy UML statecharts, C / C ++, Ikkinchi nashr: O'rnatilgan tizimlar uchun voqealarga asoslangan dasturlash. Nyu-York. p. 728. ISBN  978-0-7506-8706-5.
  6. ^ a b Samek, Miro (April 2003). "Who Moved My State?". C/C++ Users Journal, The Embedded Angle column.
  7. ^ Selic, Bran; Gullekson, Garth; Ward, Paul T. (1994). Real-Time Object-Oriented Modeling. John Wiley & Sons. p. 525. ISBN  0-471-59917-4.
  8. ^ Samek, Miro (August 2003). "Asoslarga qaytish". C/C++ Users Journal, The Embedded Angle column.
  9. ^ Samek, Miro (June 2003). "Dj Vu". C/C++ Users Journal, The Embedded Angle column. Arxivlandi asl nusxasi 2012-09-30.
  10. ^ Xarel, Dovud; Politi, Michal (1998). Modeling Reactive Systems with Statecharts, the STATEMATE Approach. McGraw-Hill. p. 258. ISBN  0-07-026205-5.
  11. ^ Douglass, Bruce Powel (1999). Doing Hard Time: Developing Real-Time Systems with UML, Objects, Frameworks, and Patterns. Addison Uesli. p.749. ISBN  0-201-49837-5.
  12. ^ Douglass, Bruce Powel (January 1999). "UML Statecharts". Embedded Systems Programming.

Tashqi havolalar