Кіріспе

Шекті күй жүйелерінің мінез-құлқының диаграммасы

Күй диаграммалары компьютерлік ғылым және оған қатысты салаларда жүйелердің мінез-құлқын сипаттау үшін қолданылады. Күй диаграммалары жүйенің шекті сандағы күйлерден тұратынын талап етеді. Кейде бұл шынымен де солай, ал кейде бұл орынды абстракция болып табылады. Күй диаграммаларының көптеген түрлері бар, олар біраз өзгешеліктерге ие және әртүрлі семантикалық мағыналарын білдіреді.

Шолу

Мемлекеттік диаграммалар жүйенің мінез-құлқының абстрактілі сипаттамасын ұсынады. Бұл мінез-құлық бір немесе бірнеше мүмкін күйде болатын оқиғалар тізбегі арқылы талданады және көрсетіледі. Мұнда "әр диаграмма әдетте бір сыныптың объектілерін бейнелейді және жүйеде олардың күйлерінің өзгеруін қадағалайды". Мемлекеттік диаграммалар шекті күйлі автоматтары (немесе шекті автоматтар деп те аталады) графиктік түрде көрсету үшін қолданылуы мүмкін. Бұл теорияны Клод Шеннон мен Уоррен Уивер 1949 жылы жарық көрген "Математикалық коммуникация теориясы" кітабында ұсынды. Тағы бір дереккөз – Тейлор Буттың 1967 жылы шыққан "Sequential Machines and Automata Theory" кітабы. Күйлердің өту кестесі – тағы бір мүмкін бейнелеу тәсілі.

Альтернативті семантика

Мемлекеттік диаграммаларды көрсету үшін басқа да семантика жиынтықтары қол жетімді. Мысалы, кіріктірілген басқарушылар үшін логиканы модельдеу және жобалауға арналған құралдар бар. Бұл диаграммалар, Харелдің бастапқы күй машиналарын сияқты, иерархиялық түрде ұялатылған күйлерді, ортогоналды аймақтарды, күйлердегі әрекеттерді және көшу әрекеттерін қолдайды.

Мемлекеттік диаграммалар мен блок-схемалар

Мемлекеттік машина формализміне жаңадан келгендер жиі мемлекеттік диаграммаларды ағымдық схемалармен шатастырады. Төмендегі сурет мемлекеттік диаграмманы ағымдық схемамен салыстырып көрсетеді. Мемлекеттік машина (а) панелі нақты оқиғаларға жауап ретінде әрекеттерді орындайды. Ал ағымдық схема (b) панелі іс-әрекеттер аяқталғаннан кейін түйіндер арасында автоматты түрде өтеді. Ағымдық схеманың түйіндері – күйлер графигінің индукцияланған жиектері. Себебі ағымдық схемадағы әрбір түйін бағдарламалық команданы білдіреді. Бағдарламалық команда – орындалуға тиіс әрекет. Команда – күй емес, бірақ бағдарламаның күйіне қолданылғанда, басқа күйге өтуге себеп болады. Егжей-тегжейлі айтқанда, бастапқы код тізімі бағдарламалық графикті көрсетеді. Бағдарламалық графикті орындау (талдау және түсіндіру) күй графигін құрайды. Әрбір бағдарламалық график күй графигін тудырады. Бағдарламалық графикті оның сәйкес күй графигіне түрлендіруді бағдарламалық графиктің "ашылуы" деп атайды. Бағдарламалық график – командалар тізбегі. Егер айнымалылар болмаса, күй тек бағдарламалық санауыштан тұрады, ол орындалу барысында бағдарламаның орнын қадағалайды (келесі орындалатын команда қандай). Команданы орындау алдында бағдарламалық санауыш белгілі бір позицияда болады (команда орындалғанға дейінгі күй). Команданы орындау бағдарламалық санауышты келесі командаға жылжытады. Бағдарламалық санауыш – күйдің толық бөлігі болғандықтан, команданы орындау күйді өзгертті. Осылайша, команданың өзі екі күй арасындағы өтуге сәйкес келеді. Енді толық жағдайды қарастырайық, онда айнымалылар бар және орындалатын бағдарламалық командаларға әсер етеді. Бағдарламалық санауыш әртүрлі бағдарламалық санауыш орындары арасында ғана емес, сонымен қатар орындалған командаларға байланысты айнымалылардың мәні де өзгеруі мүмкін. Сондықтан, егер біз кейбір бағдарламалық команданы қайта қарасақ (мысалы, циклде), бұл бағдарламаның бірдей күйде екенін білдірмейді. Бұрынғы жағдайда бағдарлама сол күйде болар еді, өйткені күйдің толық бөлігі – бағдарламалық санауыш. Осылайша, егер бағдарламалық санауыш сол позицияны (келесі команданы) көрсетсе, біз сол күйде екенімізді көрсету жеткілікті. Алайда, егер күйде мәнін өзгертетін айнымалылар болса, біз әртүрлі айнымалы мәндері бар бір бағдарлама орнында болуымыз мүмкін, яғни бағдарламаның күй кеңістігінде басқа күйде. "Ашылу" термині осы орындардың көбеюінен туындайды, бағдарламалық графиктен күй графигін құру кезінде. Өзіне-өзі өту – бастапқы және соңғы күйі бірдей болатын өту. Мысалы, санаушы толып кетіп, қайта 0-ге дейін жеткенше, кейбір санаушыны арттыратын do циклін қарастырайық. Do циклы бірдей арттыру командасын қайта-қайта орындаса да, оның күй кеңістігі цикл емес, түзу сызық. Бұл күйдің бағдарлама орнынан (мұнда циклдану) және қатаң түрде өсетін санауыш мәнінен (толып кетуге дейін) тұруына байланысты. Осылайша, толып кетуге дейін әртүрлі күйлер тізбекпен өтіледі. Толып кетуден кейін санауыш қайта 0-ге оралады, сондықтан бастапқы күй күй кеңістігінде қайтадан көрінеді, күй кеңістігінде циклді жабады (санауыш 0-ге тең деп есептесек). Жоғарыдағы сурет мемлекеттік диаграммалардың доғаларын ағымдық схеманың өңдеу кезеңдерімен сәйкестендіру арқылы рөлдердің ауысуын көрсетуге тырысады. Ағымдық схеманы өндірістегі конвейермен салыстыруға болады, өйткені ағымдық схема кейбір тапсырманың басынан соңына дейінгі дамуын сипаттайды (мысалы, компилятордың бастапқы кодты объектілік кодқа айналдыруы). Мемлекеттік машина мұндай даму туралы түсінікке ие емес. Жоғарыда көрсетілген есік мемлекеттік машинасының "жабық" күйі "ашық" күйінен гөрі жоғарырақ сатыда емес. Керісінше, ол ашылу/жабылу оқиғаларына әртүрлі жауап береді. Мемлекеттік машинадағы күй – өңдеу кезеңі емес, мінез-құлықты анықтаудың тиімді тәсілі.

Басқа кеңейтулер

Қызықты кеңейтім – доғалардың кез келген сандағы күйден кез келген сандағы күйге өтуіне мүмкіндік беру. Бұл жүйеге бір уақытта бірнеше күйде болуға рұқсат болған жағдайда ғана мағыналы, яғни жеке күй жалпы, глобалдық күйдің шарты немесе басқа да ішінара аспектісін ғана көрсетеді. Осының нәтижесінде пайда болған формализм Петри желісі деп аталады. Тағы бір кеңейтім – ағымдық схемаларды Harel күй диаграммаларына (statecharts) енгізуге мүмкіндік береді. Бұл кеңейтім оқиғалармен және жұмыс процесімен басқарылатын бағдарламалық құралдарды жасауға көмектеседі.