Кіріспе
Формальды автоматтарға негізделген бағдарламалау парадигмасы
Automata based programming is a programming paradigm in which the program or part of it is thought of as a model of a finite state machine (FSM) or any other (often more complicated) formal automaton (see automata theory). Sometimes a potentially infinite set of possible states is introduced, and such a set can have a complicated structure, not just an enumeration. Finite state machine based programming is generally the same, but, formally speaking, does not cover all possible variants, as FSM stands for finite state machine, and automata based programming does not necessarily employ FSMs in the strict sense. The following properties are key indicators for automata based programming:
The time period of the program's execution is clearly separated down to the automaton steps. Each step is effectively an execution of a code section (same for all the steps) which has a single entry point. That section might be divided down to subsections to be executed depending on different states, although this is not necessary. Any communication between the automaton steps is only possible via the explicitly noted set of variables named the automaton state. Between any two steps, the program cannot have implicit components of its state, such as local variables' values, return addresses, the current instruction pointer, etc. That is, the state of the whole program, taken at any two moments of entering an automaton step, can only differ in the values of the variables being considered as the automaton state. The whole execution of the automata based code is a cycle of the automaton steps. Another reason for using the notion of automata based programming is that the programmer's style of thinking about the program in this technique is very similar to the style of thinking used to solve mathematical tasks using Turing machines, Markov algorithms, etc.
Автоматтарға негізделген бағдарламалау – бағдарлама немесе оның бір бөлігі, шекті күйдегі машинаның (FSM) немесе кез келген басқа (көбінесе күрделі) формальды автоматтың моделі ретінде қарастырылатын бағдарламалау парадигмасы (автоматтар теориясын қараңыз). Кейде ықтимал жағдайлардың шексіз жиынтығы енгізіледі, және мұндай жиынтықта жай ғана тізімдеу емес, күрделі құрылым болуы мүмкін. Шекті күйдегі машинаға негізделген бағдарламалау, әдетте, бірдей болып табылады, бірақ формальды түрде айтқанда, барлық мүмкін нұсқаларды қамтымайды, себебі FSM – шекті күйдегі машинаны білдіреді, ал автоматтарға негізделген бағдарламалау міндетті түрде FSM-ді қатаң мағынада қолданбайды. Автоматтарға негізделген бағдарламалаудың негізгі белгілері:
Automata based programming is a programming paradigm in which the program or part of it is thought of as a model of a finite state machine (FSM) or any other (often more complicated) formal automaton (see automata theory). Sometimes a potentially infinite set of possible states is introduced, and such a set can have a complicated structure, not just an enumeration. Finite state machine based programming is generally the same, but, formally speaking, does not cover all possible variants, as FSM stands for finite state machine, and automata based programming does not necessarily employ FSMs in the strict sense. The following properties are key indicators for automata based programming:
The time period of the program's execution is clearly separated down to the automaton steps. Each step is effectively an execution of a code section (same for all the steps) which has a single entry point. That section might be divided down to subsections to be executed depending on different states, although this is not necessary. Any communication between the automaton steps is only possible via the explicitly noted set of variables named the automaton state. Between any two steps, the program cannot have implicit components of its state, such as local variables' values, return addresses, the current instruction pointer, etc. That is, the state of the whole program, taken at any two moments of entering an automaton step, can only differ in the values of the variables being considered as the automaton state. The whole execution of the automata based code is a cycle of the automaton steps. Another reason for using the notion of automata based programming is that the programmer's style of thinking about the program in this technique is very similar to the style of thinking used to solve mathematical tasks using Turing machines, Markov algorithms, etc.
Бағдарламаның орындалу уақыты автоматтың қадамдарына дейін нақты бөлінген. Әр қадам – бұл кодтың бір бөлігінің орындалуы (барлық қадамдар үшін бірдей), оның бір кіру нүктесі бар. Бұл бөлім әртүрлі күйлерге байланысты орындалатын кіші бөлімдерге бөлінуі мүмкін, бірақ бұл міндетті емес. Автоматтың қадамдары арасындағы кез келген байланыс, автоматтың күйі деп аталатын нақты көрсетілген айнымалылар жиынтығы арқылы ғана мүмкін. Кез келген екі қадамның арасында бағдарламаның күйінің имплицитті компоненттері – жергілікті айнымалылардың мәндері, қайтару адрестері, ағымдағы нұсқаулар көрсеткіші және т.б. болмауы керек. Яғни, автоматтың қадамына кірген кез келген екі сәтте алынған бағдарламаның күйі, автомат күйі ретінде қарастырылатын айнымалылардың мәндерінде ғана өзгеше болуы мүмкін. Автоматты кодты орындау – автоматтың қадамдарының циклы болып табылады. Автоматтарға негізделген бағдарламалау ұғымын қолданудың тағы бір себебі – бағдарламашының осы техникадағы бағдарлама туралы ойлау стилі, Туринг машиналары, Марков алгоритмдері және т.б. математикалық есептерді шешу үшін қолданылатын ойлау стиліне өте ұқсас.
Automata based programming is a programming paradigm in which the program or part of it is thought of as a model of a finite state machine (FSM) or any other (often more complicated) formal automaton (see automata theory). Sometimes a potentially infinite set of possible states is introduced, and such a set can have a complicated structure, not just an enumeration. Finite state machine based programming is generally the same, but, formally speaking, does not cover all possible variants, as FSM stands for finite state machine, and automata based programming does not necessarily employ FSMs in the strict sense. The following properties are key indicators for automata based programming:
The time period of the program's execution is clearly separated down to the automaton steps. Each step is effectively an execution of a code section (same for all the steps) which has a single entry point. That section might be divided down to subsections to be executed depending on different states, although this is not necessary. Any communication between the automaton steps is only possible via the explicitly noted set of variables named the automaton state. Between any two steps, the program cannot have implicit components of its state, such as local variables' values, return addresses, the current instruction pointer, etc. That is, the state of the whole program, taken at any two moments of entering an automaton step, can only differ in the values of the variables being considered as the automaton state. The whole execution of the automata based code is a cycle of the automaton steps. Another reason for using the notion of automata based programming is that the programmer's style of thinking about the program in this technique is very similar to the style of thinking used to solve mathematical tasks using Turing machines, Markov algorithms, etc.
Тапсырма
Стандартты кірістен мәтінді жол-жол оқып, әр жолдың бірінші сөзін стандартты шығысқа жазу міндетін қарастырайық. Бірінші кезекте, барлық бастапқы бос орынды таңбаларды, болған жағдайда, жіберіп жібереміз. Содан кейін, бірінші сөздің барлық таңбаларын басып шығарамыз. Ақырында, жаңа жол таңбасына кездескенше барлық соңғы таңбаларды өткіріп жібереміз. Егер жаңа жол таңбалары тізбегі ағын басында кездеспесе, тек біріншісін басып шығарып, қалғандарын жіберіп жібереміз; әйтпесе, барлығын жіберіп жібереміз. Келесі жолдан процесті қайта бастаймыз. Файл соңына жеткен кезде (кез келген кезеңде) тоқтаймыз.
Қолданбалар
Автоматтарға негізделген бағдарламалау лексикалық және синтаксистік талдауларда кеңінен қолданылады. Бұдан басқа, автоматтар тұрғысынан ойлау (яғни, орындалу процесін автомат қадамдарына бөлу және ақпаратты автомат күйі арқылы қадамнан қадамға жеткізу) оқиға басқарылатын бағдарламалау үшін параллель процестерді немесе жіптерді пайдаланудың жалғыз баламасы болып табылады. Күйлер мен күй машиналарын түсініктері ресми сипаттама саласында жиі қолданылады. Мысалы, UML негізіндегі бағдарламалық архитектураны әзірлеу бағдарламаның мінез-құлқын сипаттау үшін күй диаграммаларын пайдаланады. Сондай-ақ, әртүрлі байланыс протоколдары көбінесе нақты күй түсінігін пайдалана отырып сипатталады (мысалы, ). Автоматтар (қадамдар мен күйлер) тұрғысынан ойлау кейбір бағдарламалау тілдерінің семантикасын сипаттау үшін де қолданылуы мүмкін. Мысалы, Refal тілінде жазылған бағдарламаның орындалуы абстрактілі Refal машинасының қадамдар тізбегі ретінде сипатталады; машинаның күйі – көрініс (кез келген Refal өрнегі, айнымалыларсыз). Scheme тіліндегі жалғастырулар қадамдар мен күйлер тұрғысынан ойлауды қажет етеді, бірақ Scheme өзі автоматтармен байланысты емес (ол рекурсивті). Call/cc мүмкіндігінің жұмыс істеуі үшін, іске асыру орындалып жатқан бағдарламаның толық күйін ұстап алуы керек, бұл тек күйде жасырын бөлік болмаған жағдайда ғана мүмкін. Мұндай ұсталған күй – жалғастыру деп аталатын нәрсе, оны (салыстырмалы түрде күрделі) автоматтың күйі деп қарастыруға болады. Автоматтың қадамы – алдыңғысынан келесі жалғастыруды шығару, ал орындалу процесі – мұндай қадамдардың циклі. Александр Олонгрен өзінің кітабында бағдарламалау тілдерінің семантикасын сипаттаудың Вена әдісі деп аталатын әдісін түсіндіреді, ол толықтай формальды автоматтарға негізделген. STAT жүйесі – автоматтарға негізделген тәсілді пайдаланудың жақсы мысалы; бұл жүйе, басқа мүмкіндіктермен қатар, таза автоматтарға бағытталған STATL деп аталатын кіріктірілген тілді қамтиды.
Тарих
Автоматтарға негізделген әдістер формалды тілдік талдау сияқты автоматтар теориясына негізделген алгоритмдер қолданылатын салаларда кеңінен пайдаланылды. Автоматтарға негізделген бағдарламалауды жалпы техника ретінде алғаш рет атағандардың бірі Питер Наур болды, бұл туралы ол 1963 жылы жариялаған жұмысында айтқан. Автор бұл әдісті Тьюринг машинасының тәсілі деп атаса да, мақалада нақты Тьюринг машинасы келтірілмеген; оның орнына қадамдар мен күйлерге негізделген әдіс сипатталған.
Нысанға бағдарланған бағдарламалау қатынасы
Нысанға бағдарланған бағдарламалау теориясында объект ішкі күйге ие және хабарларды қабылдауға, оларға жауап беруге, басқа объектілерге хабарлар жіберуге және хабарларды өңдеу кезінде өзінің ішкі күйін өзгертуге қабілетті деп есептеледі. Көбірек практикалық терминологияда, объектінің әдісін шақыру – объектке хабар жіберумен тең болып саналады. Осылайша, бір жағынан, нысанға бағдарланған бағдарламалаудан алынған объектілерді автоматтар (немесе автоматтардың үлгілері) ретінде қарастыруға болады, олардың күйі жеке өрістердің комбинациясы болып табылады, ал бір немесе бірнеше әдіс қадам ретінде қарастырылады. Мұндай әдістер бір-бірін немесе өзіндік шақыруға болмайды, тікелей немесе жанама түрде, әйтпесе объект автоматтарға негізделген әдіспен іске асырылмаған болып есептеледі. Екінші жағынан, объект автоматтың үлгісін іске асыруға ыңғайлы. Автоматтарға негізделген тәсіл нысанға бағдарланған тілде қолданылғанда, автоматтың үлгісі әдетте сынып арқылы іске асырылады, күй сыныптың жеке өрістерімен бейнеленеді, ал қадам әдіс ретінде іске асырылады; мұндай әдіс әдетте сыныптың жалғыз тұрақты емес әдісі болып табылады (құрастырушылар мен жоюшылардан басқа). Басқа әдістер күйді сұрап білуге мүмкіндік береді, бірақ оны өзгерте алмайды. Барлық қосымша әдістер (мысалы, нақты күйді өңдеушілер) әдетте сыныптың жеке бөлігінде жасырылады.