Кіріспе

Формальды автоматтарға негізделген бағдарламалау парадигмасы

Автоматтарға негізделген бағдарламалау – бағдарлама немесе оның бір бөлігі, шекті күйдегі машинаның (FSM) немесе кез келген басқа (көбінесе күрделі) формальды автоматтың моделі ретінде қарастырылатын бағдарламалау парадигмасы (автоматтар теориясын қараңыз). Кейде ықтимал жағдайлардың шексіз жиынтығы енгізіледі, және мұндай жиынтықта жай ғана тізімдеу емес, күрделі құрылым болуы мүмкін. Шекті күйдегі машинаға негізделген бағдарламалау, әдетте, бірдей болып табылады, бірақ формальды түрде айтқанда, барлық мүмкін нұсқаларды қамтымайды, себебі FSM – шекті күйдегі машинаны білдіреді, ал автоматтарға негізделген бағдарламалау міндетті түрде FSM-ді қатаң мағынада қолданбайды. Автоматтарға негізделген бағдарламалаудың негізгі белгілері:

Бағдарламаның орындалу уақыты автоматтың қадамдарына дейін нақты бөлінген. Әр қадам – бұл кодтың бір бөлігінің орындалуы (барлық қадамдар үшін бірдей), оның бір кіру нүктесі бар. Бұл бөлім әртүрлі күйлерге байланысты орындалатын кіші бөлімдерге бөлінуі мүмкін, бірақ бұл міндетті емес. Автоматтың қадамдары арасындағы кез келген байланыс, автоматтың күйі деп аталатын нақты көрсетілген айнымалылар жиынтығы арқылы ғана мүмкін. Кез келген екі қадамның арасында бағдарламаның күйінің имплицитті компоненттері – жергілікті айнымалылардың мәндері, қайтару адрестері, ағымдағы нұсқаулар көрсеткіші және т.б. болмауы керек. Яғни, автоматтың қадамына кірген кез келген екі сәтте алынған бағдарламаның күйі, автомат күйі ретінде қарастырылатын айнымалылардың мәндерінде ғана өзгеше болуы мүмкін. Автоматты кодты орындау – автоматтың қадамдарының циклы болып табылады. Автоматтарға негізделген бағдарламалау ұғымын қолданудың тағы бір себебі – бағдарламашының осы техникадағы бағдарлама туралы ойлау стилі, Туринг машиналары, Марков алгоритмдері және т.б. математикалық есептерді шешу үшін қолданылатын ойлау стиліне өте ұқсас.

Тапсырма

Стандартты кірістен мәтінді жол-жол оқып, әр жолдың бірінші сөзін стандартты шығысқа жазу міндетін қарастырайық. Бірінші кезекте, барлық бастапқы бос орынды таңбаларды, болған жағдайда, жіберіп жібереміз. Содан кейін, бірінші сөздің барлық таңбаларын басып шығарамыз. Ақырында, жаңа жол таңбасына кездескенше барлық соңғы таңбаларды өткіріп жібереміз. Егер жаңа жол таңбалары тізбегі ағын басында кездеспесе, тек біріншісін басып шығарып, қалғандарын жіберіп жібереміз; әйтпесе, барлығын жіберіп жібереміз. Келесі жолдан процесті қайта бастаймыз. Файл соңына жеткен кезде (кез келген кезеңде) тоқтаймыз.

Қолданбалар

Автоматтарға негізделген бағдарламалау лексикалық және синтаксистік талдауларда кеңінен қолданылады. Бұдан басқа, автоматтар тұрғысынан ойлау (яғни, орындалу процесін автомат қадамдарына бөлу және ақпаратты автомат күйі арқылы қадамнан қадамға жеткізу) оқиға басқарылатын бағдарламалау үшін параллель процестерді немесе жіптерді пайдаланудың жалғыз баламасы болып табылады. Күйлер мен күй машиналарын түсініктері ресми сипаттама саласында жиі қолданылады. Мысалы, UML негізіндегі бағдарламалық архитектураны әзірлеу бағдарламаның мінез-құлқын сипаттау үшін күй диаграммаларын пайдаланады. Сондай-ақ, әртүрлі байланыс протоколдары көбінесе нақты күй түсінігін пайдалана отырып сипатталады (мысалы, ). Автоматтар (қадамдар мен күйлер) тұрғысынан ойлау кейбір бағдарламалау тілдерінің семантикасын сипаттау үшін де қолданылуы мүмкін. Мысалы, Refal тілінде жазылған бағдарламаның орындалуы абстрактілі Refal машинасының қадамдар тізбегі ретінде сипатталады; машинаның күйі – көрініс (кез келген Refal өрнегі, айнымалыларсыз). Scheme тіліндегі жалғастырулар қадамдар мен күйлер тұрғысынан ойлауды қажет етеді, бірақ Scheme өзі автоматтармен байланысты емес (ол рекурсивті). Call/cc мүмкіндігінің жұмыс істеуі үшін, іске асыру орындалып жатқан бағдарламаның толық күйін ұстап алуы керек, бұл тек күйде жасырын бөлік болмаған жағдайда ғана мүмкін. Мұндай ұсталған күй – жалғастыру деп аталатын нәрсе, оны (салыстырмалы түрде күрделі) автоматтың күйі деп қарастыруға болады. Автоматтың қадамы – алдыңғысынан келесі жалғастыруды шығару, ал орындалу процесі – мұндай қадамдардың циклі. Александр Олонгрен өзінің кітабында бағдарламалау тілдерінің семантикасын сипаттаудың Вена әдісі деп аталатын әдісін түсіндіреді, ол толықтай формальды автоматтарға негізделген. STAT жүйесі – автоматтарға негізделген тәсілді пайдаланудың жақсы мысалы; бұл жүйе, басқа мүмкіндіктермен қатар, таза автоматтарға бағытталған STATL деп аталатын кіріктірілген тілді қамтиды.

Тарих

Автоматтарға негізделген әдістер формалды тілдік талдау сияқты автоматтар теориясына негізделген алгоритмдер қолданылатын салаларда кеңінен пайдаланылды. Автоматтарға негізделген бағдарламалауды жалпы техника ретінде алғаш рет атағандардың бірі Питер Наур болды, бұл туралы ол 1963 жылы жариялаған жұмысында айтқан. Автор бұл әдісті Тьюринг машинасының тәсілі деп атаса да, мақалада нақты Тьюринг машинасы келтірілмеген; оның орнына қадамдар мен күйлерге негізделген әдіс сипатталған.

Нысанға бағдарланған бағдарламалау қатынасы

Нысанға бағдарланған бағдарламалау теориясында объект ішкі күйге ие және хабарларды қабылдауға, оларға жауап беруге, басқа объектілерге хабарлар жіберуге және хабарларды өңдеу кезінде өзінің ішкі күйін өзгертуге қабілетті деп есептеледі. Көбірек практикалық терминологияда, объектінің әдісін шақыру – объектке хабар жіберумен тең болып саналады. Осылайша, бір жағынан, нысанға бағдарланған бағдарламалаудан алынған объектілерді автоматтар (немесе автоматтардың үлгілері) ретінде қарастыруға болады, олардың күйі жеке өрістердің комбинациясы болып табылады, ал бір немесе бірнеше әдіс қадам ретінде қарастырылады. Мұндай әдістер бір-бірін немесе өзіндік шақыруға болмайды, тікелей немесе жанама түрде, әйтпесе объект автоматтарға негізделген әдіспен іске асырылмаған болып есептеледі. Екінші жағынан, объект автоматтың үлгісін іске асыруға ыңғайлы. Автоматтарға негізделген тәсіл нысанға бағдарланған тілде қолданылғанда, автоматтың үлгісі әдетте сынып арқылы іске асырылады, күй сыныптың жеке өрістерімен бейнеленеді, ал қадам әдіс ретінде іске асырылады; мұндай әдіс әдетте сыныптың жалғыз тұрақты емес әдісі болып табылады (құрастырушылар мен жоюшылардан басқа). Басқа әдістер күйді сұрап білуге мүмкіндік береді, бірақ оны өзгерте алмайды. Барлық қосымша әдістер (мысалы, нақты күйді өңдеушілер) әдетте сыныптың жеке бөлігінде жасырылады.