Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ стСйт-ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° слуТбС Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π½Π° ΠΌΠΈΠ½ΡƒΡ‚ΠΊΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ программиста. Допустим, Π΅Π³ΠΎ Π·ΠΎΠ²ΡƒΡ‚ Вася ΠΈ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΌΠ΅Π½ΡŽΡˆΠΊΡƒ Π½Π° сайт/дСсктоп ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π°ΠΏΠΏ. Π—Π½Π°Π΅Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π΅Π·ΠΆΠ°ΡŽΡ‚ свСрху Π²Π½ΠΈΠ·, ΠΊΠ°ΠΊ мСню Ρƒ ΠΎΠΊΠ½Π° Windows ΠΈΠ»ΠΈ мСню с яблочком Ρƒ OS X. Π’ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ΅.

НачинаСт ΠΎΠ½ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ окошка, тСстируСт Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ, выставляСт ease out 100% ΠΈ наслаТдаСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ. Но вскорС ΠΎΠ½ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ мСнюшкой, Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ ΠΎΠ½ΠΎ сСйчас ΠΈΠ»ΠΈ Π½Π΅Ρ‚. ΠœΡ‹-Ρ‚ΠΎ с Π²Π°ΠΌΠΈ Ρ‚ΡƒΡ‚ программисты ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅, всС ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³. НС вопрос, Ρ„Π»Π°Π³ Π΅ΡΡ‚ΡŒ.

Π’Ρ€ΠΎΠ΄Π΅, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Но, Ссли быстро ΠΊΠ»ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅, мСню Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΌΠΎΡ€Π³Π°Ρ‚ΡŒ, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡΡΡŒ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡΡΡŒ Π½Π΅ успСв Π΄ΠΎΠ°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ состояниС. Вася добавляСт Ρ„Π»Π°Π³ animating. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠ΄ Ρƒ нас Ρ‚Π°ΠΊΠΎΠΉ:

Π§Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя ВасС говорят, Ρ‡Ρ‚ΠΎ мСню ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΈ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. НС вопрос! ΠœΡ‹-Ρ‚ΠΎ с Π²Π°ΠΌΠΈ Ρ‚ΡƒΡ‚ программисты ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅, всС ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, что… Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π•Π©Π• ΠžΠ”Π˜Π ЀЛАГ! И, всСго-Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρƒ Π΄Π½Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΠ΄ мСню ΡƒΠΆΠ΅ пСстрит двустрочными IF-Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ:

Вася Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ вопросами: ΠΊΠ°ΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ animating == true ΠΈ enabled == false; ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρƒ Π½Π΅Π³ΠΎ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ всС Π³Π»ΡŽΡ‡ΠΈΡ‚; ΠΊΠ°ΠΊ Ρ‚ΡƒΡ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ поймСшь Π² ΠΊΠ°ΠΊΠΎΠΌ состоянии находится мСню. Ага! Бостояния. О Π½ΠΈΡ… дальшС ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ.

Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ, это Вася.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

БостояниС

Вася ΡƒΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Ρ„Π»Π°Π³ΠΎΠ² Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ смысла, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠΉ слов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Disabled, Idle, Animating, Opened. ВсС ΠΌΡ‹ Ρ‚ΡƒΡ‚ программисты ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅, сразу вспоминаСм ΠΏΡ€ΠΎ state machines. Но, для Васи придСтся Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это ΠΈ Π·Π°Ρ‡Π΅ΠΌ. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌ языком, Π±Π΅Π· всяких матСматичСских Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ².

Π£ нас Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Π°Ρ мСнюшка. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ всСгда находится Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΌ состоянии ΠΈ рСагируя Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ события ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ этими состояниями ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ состояния, события ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠΌΠΈ схСмами (ΠΊΡ€ΡƒΠΆΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ состояния):

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Из схСмы понятно, Ρ‡Ρ‚ΠΎ ΠΈΠ· состояния Inactive Π² Active ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Begin, Π° ΠΈΠ· состояния Paused ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΈ Π² Active, Ρ‚Π°ΠΊ ΠΈ Π² Inactive. Π’Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Автомат» ΠΈΠ»ΠΈ Β«Finite State MachineΒ», Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡƒΠ³Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… людСй.

По Π·Π°Π²Π΅Ρ‚Ρƒ ООП, состояния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ скрыты Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ просто Ρ‚Π°ΠΊ снаруТи Π½Π΅ доступны. НапримСр, Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 20 Ρ€Π°Π·Π½Ρ‹Ρ… состояний, Π½ΠΎ внСшнСС API Π½Π° вопрос Β«Ρ‡ΠΎ ΠΊΠ°ΠΊ Π΄Π΅Π»Π°?Β» ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Β«Π½ΠΈΡ‡ΠΎ Ρ‚Π°ΠΊΒ» Π½Π° 19 ΠΈΠ· Π½ΠΈΡ… ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° 1 ругаСтся ΠΌΠ°Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ проср*Π»ΠΈ всС ΠΏΠΎΠ»ΠΈΠΌΠ΅Ρ€Ρ‹.

БлСдуя ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ стСйт машин, ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ясно Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ВсСгда Π±ΡƒΠ΄Π΅Ρ‚ понятно, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, Ссли систСма Π²Π΄Ρ€ΡƒΠ³ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»Π°ΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² нСдоступноС ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ состояния состояниС. А события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΄Ρ€ΡƒΠ³ посмСли ΠΏΡ€ΠΈΠΉΡ‚ΠΈ Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΌΠΎΠΆΠ½ΠΎ смСло ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π΅ Π±ΠΎΡΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сломаСтся.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Бамая простая Π² ΠΌΠΈΡ€Π΅ стСйт машина

Допустим, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Вася Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° C# ΠΈ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Π° простая стСйт машина для ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Он ΠΏΠΈΡˆΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ:

А Π²ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ события Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния:

Но, ΠΌΡ‹-Ρ‚ΠΎ с Π²Π°ΠΌΠΈ Ρ‚ΡƒΡ‚ программисты ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅, всС ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ setState Π² ΠΈΡ‚ΠΎΠ³Π΅ разрастСтся Π½Π° ΠΏΠ°Ρ€Ρƒ дСсятков страниц, Ρ‡Ρ‚ΠΎ (ΠΊΠ°ΠΊ написано Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°Ρ…) Π½Π΅ Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

State Pattern

ΠŸΠΎΠ³ΡƒΠ³Π»ΠΈΠ² ΠΏΠ°Ρ€Ρƒ часов, Вася Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ State Pattern идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации. Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ программисты всС врСмя ΡΠΎΡ€Π΅Π²Π½ΡƒΡŽΡ‚ΡΡ ΠΊΡ‚ΠΎ большС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² Π·Π°ΠΏΠΈΡ…Π½Π΅Ρ‚ Π² свой Π°ΠΏΠΏ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Вася, ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ это Π΄Π΅Π»ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅.

НапримСр, для State Pattern ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ интСрфСйс IState:

И ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ классу для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ состояния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ этот интСрфСйс имплСмСнтят. Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ выглядит красиво ΠΈ 100% ΠΏΠΎ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΡƒ.

Но, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ нСсчастной ΠΌΠ΅Π»ΠΊΠΎΠΉ стСйт ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π³ΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠΉΠΌΡƒ классов, Ρ‡Ρ‚ΠΎ само ΠΏΠΎ сСбС нСбыстро. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ начнутся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с доступом ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. Π“Π΄Π΅ ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ? Π’ основном классС? А ΠΊΠ°ΠΊ классы-состояния ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΊ Π½ΠΈΠΌ доступ? А ΠΊΠ°ΠΊ ΠΌΠ½Π΅ Ρ‚ΡƒΡ‚ Π·Π° 15 ΠΌΠΈΠ½ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π΅Π΄Π»Π°ΠΉΠ½ΠΎΠΌ Π²ΠΏΠΈΠ»ΠΈΡ‚ΡŒ быстро ΠΌΠ΅Π»ΠΊΠΈΠΉ Ρ…Π°ΠΊ Π² ΠΎΠ±Ρ…ΠΎΠ΄ ΠΏΡ€Π°Π²ΠΈΠ»? И ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ взаимодСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сильно Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

РСализация Π½Π° основС особСнностСй языка

НСкоторыС языки программирования ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π’ Ruby, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΅ΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΉ DSL (ΠΈ Π½Π΅ ΠΎΠ΄ΠΈΠ½) для создания ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ². А Π² C# ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Reflection. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² систСму ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅, Вася ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π΅ Ρ‚ΠΎΠΆΠ΅ большС минусов, Ρ‡Π΅ΠΌ плюсов:

Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ

А Ρ‚Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, Вася ΡƒΠΆΠ΅ вовсю стал Π²Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² Ρ‚Π΅ΠΎΡ€ΠΈΡŽ стСйт машин ΠΈ Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈΡ… ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· API ΠΈΠ»ΠΈ (ΠΎ Π‘ΠΎΠΆΠ΅) Ρ‡Π΅Ρ€Π΅Π· XML, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΡ€ΡƒΡ‚ΠΎ. ΠœΡ‹-Ρ‚ΠΎ с Π²Π°ΠΌΠΈ Ρ‚ΡƒΡ‚ программисты ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅, всС ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ свой Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π΅ подходят, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ всСх Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ нСдостаток.

Вася Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Π³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ быстро ΠΈ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ стСйт ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π±Π΅Π· нСобходимости ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ВсС Π²ΠΎΠΊΡ€ΡƒΠ³ Π±ΡƒΠ΄ΡƒΡ‚ вСсСлы ΠΈ ТизнСрадостны.

Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» мноТСство Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках, нСсколько ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… написал сам. И всСгда для описания ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° срСдствами Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ большС ΠΊΠΎΠ΄Π°, Ρ‡Π΅ΠΌ Π² простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ВсС ΠΎΠ½ΠΈ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ ограничСния, Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π΄Π΅Π»Π°Ρ‚ΡŒ сразу ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ всСго, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΆΠ΅ Ρ‚ΡƒΡ‚ всС-Ρ‚Π°ΠΊΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ стСйт ΠΌΠ°ΡˆΠΈΠ½Ρƒ, приходится ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя Ρ€Ρ‹Ρ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, описаниС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ stateless:

Но, ΠΏΡ€ΠΎΠ±ΠΈΠ²ΡˆΠΈΡΡŒ Ρ‡Π΅Ρ€Π΅Π· созданиС стСйт ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. Π’ основном это: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², синхронизация зависимых стСйт машин ΠΈ суб-стСйт машин ΠΈ всячСская Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π΄ΡƒΡ€Π°ΠΊΠ°.

XML β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π»ΠΎ. ΠšΡ‚ΠΎ-Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для написания ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ². Π‘Ρ‚Π°Π΄ΠΎ Π»Π΅ΠΌΠΌΠΈΠ½Π³ΠΎΠ² java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя молилось Π½Π° Π½Π΅Π³ΠΎ. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΠΈΠΊΡ‚ΠΎ ΡƒΠΆΠ΅ ΠΈ Π½Π΅ Π·Π½Π°Π΅Ρ‚ Π·Π°Ρ‡Π΅ΠΌ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ XML, Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Π±ΠΈΡ‚ΡŒ всСх, ΠΊΡ‚ΠΎ пытаСтся ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ.

Вася Ρ‚ΠΎΠΆΠ΅ загорСлся ΠΈΠ΄Π΅Π΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ всС ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² XML ΠΈ НЕ ПИБАВЬ НИ БВРОЧКИ ΠšΠžΠ”Π! Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π² Π΅Π³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π»Π΅ΠΆΠ°Ρ‚ XML Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ содСрТания:

Класс! И Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ программирования. Но, ΠΌΡ‹-Ρ‚ΠΎ с Π²Π°ΠΌΠΈ Ρ‚ΡƒΡ‚ программисты ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅, всС ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ ΡƒΡˆΠ»ΠΎ. Вася Π·Π°ΠΌΠ΅Π½ΠΈΠ» кусок ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° кусок Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΡ€ΠΈ этом Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ XML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всС Π΅Ρ‰Π΅ Π² ΠΏΠ°Ρ€Ρƒ Ρ€Π°Π· услоТнил. А ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ это ΠΎΡ‚Π΄Π΅Π±Π°ΠΆΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках ΠΈ разбросан ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ.

БоглашСниС

И Ρ‚ΡƒΡ‚ ВасС всС это Π½Π°Π΄ΠΎΠ΅Π»ΠΎ ΠΈ ΠΎΠ½ вСрнулся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊ самому простому Π² ΠΌΠΈΡ€Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρƒ. Он Π΅Π³ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π» ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΌ ΠΊΠΎΠ΄.

UPDATE: спасибо Π·Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Π—Π΄Π΅ΡΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ нСбольшого объяснСния.

Π£ нас Π΅ΡΡ‚ΡŒ нСсколько состояний. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ β€” это транзакция ΠΈΠ· Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ всС происходят всСгда вмСстС, Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΠΈΠ½ΠΈΡ‚ΡŒΡΡ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄. ΠŸΡ€ΠΈ смСнС состояния с A Π½Π° B происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: выполняСтся ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· состояния A, состояниС мСняСтся с A Π½Π° B, выполняСтся ΠΊΠΎΠ΄ Π²Ρ…ΠΎΠ΄Π° Π² состояниС B.

Для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° состояниС A Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ stateA, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π½ΡƒΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ setState(A). Π‘Π°ΠΌΠΎΠΌΡƒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ setState(A) ΠΊΡ€Π°ΠΉΠ½Π΅ Π½Π΅ рСкомСндуСтся.

UPDATE: Π’ setState() ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· состояния, Π° Π² stateB() Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° спСцифичСская Π»ΠΎΠ³ΠΈΠΊΠ° Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· состояния A ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π² B. Но ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ соглашСниС для написания стСйт машин. Оно достаточно Π³ΠΈΠ±ΠΊΠΎΠ΅ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ»ΡŽΡΡ‹:

Как ΠΈ Π²ΠΎ всСх ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡΡ…, ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ спСрва Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Ρƒ Π½Π΅Π³ΠΎ появится Π΄Ρ€ΡƒΠ³ΠΎΠΉ смысл, ΠΈΠ»ΠΈ окаТСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π³Π΄Π΅-Ρ‚ΠΎ дублируСтся. Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ пСрСнСсти Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто. Никто Π½Π°ΠΌ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚. ВсС-Ρ‚Π°ΠΊΠΈ ΠΊΠΎΠ΄ Π½Π΅ вытСсан ΠΈΠ· камня, это всСго лишь тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ (ΠΎ уТас!) ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

UPDATE: Π° setState() Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ сСттСром для наглядности.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

На этом заканчиваСтся ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Васи Π² ΠΌΠΈΡ€Π΅ стСйт машин. А вСдь Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ Π΅Ρ‰Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ всСго интСрСсного. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΏΠΈΠΊΠ° Π±Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ заслуТили ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ зависимыС стСйт ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Π― надСюсь, Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ стСйт ΠΌΠ°ΡˆΠΈΠ½Ρ‹ повсСмСстно, эта ΡΡ‚Π°Ρ‚ΡŒΡ пСрСтянСт вас Π½Π° сторону Π΄ΠΎΠ±Ρ€Π°; Ссли Π²Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ свой ΡƒΠ±Π΅Ρ€Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со стСйт машинами, ΠΎΠ½Π° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ свСТим взглядом ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ вас получаСтся.

Π― надСюсь, Ρ‡Ρ‚ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ Π³Π΄Π΅ ΠΈ ΠΊΠΎΠ³Π΄Π° стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, ΠΈ Ρ‡Ρ‚ΠΎ описанноС соглашСниС ΠΏΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ стСйт машин окаТСтся ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚: тСория ΠΈ рСализация

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ β€” это нСкоторая абстрактная модСль, содСрТащая ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число состояний Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСдставлСния ΠΈ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄. ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° Π² ΠΈΠ³Ρ€Π°Ρ…, получая Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· написания Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΠ³ΠΎ ΠΈ слоТного ΠΊΠΎΠ΄Π°. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим Ρ‚Π΅ΠΎΡ€ΠΈΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой ΠΈ основанный Π½Π° стСкС ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚.

ΠœΡ‹ ΡƒΠΆΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΡΠ΅Ρ€ΠΈΡŽ статСй ΠΏΠΎ написанию искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°. Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Ρ‡ΠΈΡ‚Π°Π»ΠΈ эту ΡΠ΅Ρ€ΠΈΡŽ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это сСйчас:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΡ€Π° Π₯ΠΎΡ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ActionScript 3 ΠΈ Flash, Π²Ρ‹ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для вас языкС.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚?

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ (ΠΈΠ»ΠΈ попросту FSM β€” Finite-state machine) это модСль вычислСний, основанная Π½Π° гипотСтичСской машинС состояний. Π’ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ состояниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, для выполнСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ дСйствий машина Π΄ΠΎΠ»ΠΆΠ½Π° ΠΌΠ΅Π½ΡΡ‚ΡŒ своС состояниС.

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ прСдставлСния ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ИИ Π² ΠΈΠ³Ρ€Π°Ρ…. НапримСр, для написания Β«ΠΌΠΎΠ·Π³Π°Β» Π²Ρ€Π°Π³Π°: ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ состояниС прСдставляСт собой ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ дСйствиС (Π½Π°ΠΏΠ°ΡΡ‚ΡŒ, ΡƒΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒΡΡ ΠΈ Ρ‚. Π΄.).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ОписаниС состояний Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„Π°, Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ состояниями, Π° Ρ€Π΅Π±Ρ€Π° β€” ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. КаТдоС Ρ€Π΅Π±Ρ€ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΊΡƒ, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄. НапримСр, Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ смСнит состояниС Β«wanderΒ» Π½Π° состояниС Β«attackΒ» ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€ΠΎΠΊ находится рядом.

ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ состояний ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²

РСализация ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° начинаСтся с выявлСния Π΅Π³ΠΎ состояний ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ дСйствия ΠΌΡƒΡ€Π°Π²ΡŒΡ, нСсущСго Π»ΠΈΡΡ‚ΡŒΡ Π² ΠΌΡƒΡ€Π°Π²Π΅ΠΉΠ½ΠΈΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ОписаниС состояний ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° ΠΌΡƒΡ€Π°Π²ΡŒΡ

ΠžΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ являСтся состояниС Β«find leafΒ», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ остаСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΡƒΡ€Π°Π²Π΅ΠΉ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ лист. Когда это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ρ‚ΠΎ состояниС смСнится Π½Π° Β«go homeΒ». Π­Ρ‚ΠΎ ΠΆΠ΅ состояниС останСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, ΠΏΠΎΠΊΠ° наш ΠΌΡƒΡ€Π°Π²Π΅ΠΉ Π½Π΅ добСрСтся Π΄ΠΎ ΠΌΡƒΡ€Π°Π²Π΅ΠΉΠ½ΠΈΠΊΠ°. ПослС этого состояниС вновь мСняСтся Π½Π° Β«find leafΒ».

27–29 дСкабря, Онлайн, Π‘Π΅cΠΏΠ»Π°Ρ‚Π½ΠΎ

Если состояниС Β«find leafΒ» Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Π½ΠΎ курсор ΠΌΡ‹ΡˆΠΈ находится рядом с ΠΌΡƒΡ€Π°Π²ΡŒΠ΅ΠΌ, Ρ‚ΠΎ состояниС мСняСтся Π½Π° Β«run awayΒ». Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡƒΡ€Π°Π²Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π² достаточно бСзопасном расстоянии ΠΎΡ‚ курсора ΠΌΡ‹ΡˆΠΈ, состояниС вновь смСнится Π½Π° Β«find leafΒ».

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄ΠΎΠΌΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ· Π΄ΠΎΠΌΠ° ΠΌΡƒΡ€Π°Π²Π΅ΠΉ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΡΡ‚ΡŒΡΡ курсора ΠΌΡ‹ΡˆΠΈ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? А ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ОписаниС состояний ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° ΠΌΡƒΡ€Π°Π²ΡŒΡ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° отсутствиС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Β«run awayΒ» ΠΈ Β«go homeΒ»

РСализация простого ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. НазовСм Π΅Π³ΠΎ FSM. ИдСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ состояниС ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство activeState для опрСдСлСния Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ состояния.

ВсякоС состояниС Π΅ΡΡ‚ΡŒ функция. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ такая, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ°Π΄Ρ€Π° ΠΈΠ³Ρ€Ρ‹. Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Π² activeState Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ состояния.

ΠœΠ΅Ρ‚ΠΎΠ΄ update() класса FSM Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ ΠΈΠ³Ρ€Ρ‹. А ΠΎΠ½, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ состояния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ являСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ.

ΠœΠ΅Ρ‚ΠΎΠ΄ setState() Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ состояниС. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, каТдая функция, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ состояниС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ классу FSM β€” это Π΄Π΅Π»Π°Π΅Ρ‚ наш класс Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

ИспользованиС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ИИ ΠΌΡƒΡ€Π°Π²ΡŒΡ. Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Π½Π°Π±ΠΎΡ€ Π΅Π³ΠΎ состояний ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ… Π΅Ρ‰Π΅ Ρ€Π°Π·, Π½ΠΎ Π² этот Ρ€Π°Π· сосрСдоточимся Π½Π° ΠΊΠΎΠ΄Π΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ОписаниС состояний ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° ΠΌΡƒΡ€Π°Π²ΡŒΡ, сосрСдоточСнноС Π½Π° ΠΊΠΎΠ΄Π΅

Наш ΠΌΡƒΡ€Π°Π²Π΅ΠΉ прСдставлСн классом Ant, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ brain. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· экзСмпляр класса FSM.

Класс Ant Ρ‚Π°ΠΊΠΆΠ΅ содСрТит свойства velocity ΠΈ position. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для расчСта двиТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π­ΠΉΠ»Π΅Ρ€Π°. Ѐункция update() вызываСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ°Π΄Ρ€Π° ΠΈΠ³Ρ€Ρ‹.

Для понимания ΠΊΠΎΠ΄Π° ΠΌΡ‹ опустим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° moveBasedOnVelocity(). Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π½Π° Ρ‚Π΅ΠΌΡƒ двиТСния, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΠ΅Ρ€ΠΈΡŽ статСй Understanding Steering Behaviors.

НиТС приводится рСализация ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², начиная с findLeaf() β€” состояния, отвСтствСнного Π·Π° поиск Π»ΠΈΡΡ‚ΡŒΠ΅Π².

БостояниС goHome() β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡƒΡ€Π°Π²Π΅ΠΉ отправился Π΄ΠΎΠΌΠΎΠΉ.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, состояниС runAway() β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΡƒΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΈ ΠΎΡ‚ курсора ΠΌΡ‹ΡˆΠΈ.

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ FSM: Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, основанный Π½Π° стСкС

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ ΠΌΡƒΡ€Π°Π²ΡŒΡŽ Π½Π° ΠΏΡƒΡ‚ΠΈ Π΄ΠΎΠΌΠΎΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π³Π°Ρ‚ΡŒ ΠΎΡ‚ курсора ΠΌΡ‹ΡˆΠΈ. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ состояния FSM:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ОбновлСнноС описаниС состояний ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° ΠΌΡƒΡ€Π°Π²ΡŒΡ

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅. НСт, Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ создаСт Π½Π°ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС это Β«run awayΒ». Если курсор ΠΌΡ‹ΡˆΠΈ отдаляСтся ΠΎΡ‚ ΠΌΡƒΡ€Π°Π²ΡŒΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ: ΠΈΠ΄Ρ‚ΠΈ Π΄ΠΎΠΌΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ лист?

РСшСниСм Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, основанный Π½Π° стСкС. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ простого FSM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Π΄Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ FSM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стСк для управлСния состояниями. Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части стСка находится Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ состояниС, Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ состояний ΠΈΠ· стСка.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, основанный Π½Π° стСкС

А Π²ΠΎΡ‚ ΠΈ наглядная дСмонстрация Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, основанного Π½Π° стСкС:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π² FSM, основанном Π½Π° стСкС

РСализация FSM, основанного Π½Π° стСкС

Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ простой. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ использованиС массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ состояния. Бвойство activeState Π½Π°ΠΌ ΡƒΠΆΠ΅ Π½Π΅ понадобится, Ρ‚.ΠΊ. Π²Π΅Ρ€ΡˆΠΈΠ½Π° стСка ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ состояниС.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ setState() Π±Ρ‹Π» Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° pushState() (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ состояния Π² Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка) ΠΈ popState() (ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ состояния Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка).

ИспользованиС FSM, основанного Π½Π° стСкС

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° Π½Π° основС стСка ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ состояниС нСсСт ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° своС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· стСка ΠΏΡ€ΠΈ отсутствии нСобходимости Π² Π½Π΅ΠΌ. НапримСр, состояниС attack() само Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ сСбя ΠΈΠ· стСка Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ€Π°Π³ Π±Ρ‹Π» ΡƒΠΆΠ΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½.

Π’Ρ‹Π²ΠΎΠ΄

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹, бСзусловно, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° Π² ΠΈΠ³Ρ€Π°Ρ…. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ прСдставлСны Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„Π°, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

РСализация ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° с функциями-состояниями являСтся простым, Π½ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΠΎΡ‰Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Π”Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ слоТныС пСрСплСтСния состояний ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ FSM.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ВСория вычислСний. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹

Π­Ρ‚ΠΎ Π΄ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π° упрощСнная модСль ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число состояний, которая ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΠ΅Ρ‚ всСми особСнностями ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠžΠ—Π£, постоянная ΠΏΠ°ΠΌΡΡ‚ΡŒ, устройства Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ процСссорными ядрами Π² ΠΎΠ±ΠΌΠ΅Π½ Π½Π° простоту понимания, удобство рас­суТдСния ΠΈ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ КА ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ ΠΊΠ°ΠΊ, рСгулярныС выраТСния, лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ИИ Π² ΠΈΠ³Ρ€Π°Ρ… ΠΈ Ρ‚Π΄.

Π£ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ² имССтся Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, стартовоС состояниС ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ состояниС.

Π’Π°Π±Π»ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² β€” Π’ Π½Π΅ΠΉ хранятся ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ рСализация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.

Π—Π΄Π΅ΡΡŒ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ· состояния 0 Π² состояниС 1 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ссли Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ символ ‘a’, ΠΈΠ· состояния 1 Π² состояниС 2, Ссли символ ‘b’.

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС β€” мноТСство состояний Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π‘Ρ‚Π°Ρ€Ρ‚ΠΎΠ²ΠΎΠ΅ состояниС β€” состояниС ΠΎΡ‚ΠΊΡƒΠ΄Π° КА Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ состояниС β€” мноТСство состояний Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ символов, Π² ΠΈΠ½ΠΎΠΌ случаС ΠΎΡ‚Π²Π΅Ρ€Π³Π°Π΅Ρ‚.

Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ (deterministic finite automaton)

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ КА, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ состояниС Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ.

Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ β€” для всСх состояний имССтся максимум ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ для любого Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для состояния 1 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ символом.

НСдСтСрминированныС ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ (nondeterministic finite automaton)

НКА Π½Π΅ являСтся ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ сущСствСнным ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π”ΠšΠ, просто Π² Π½Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ‚Π°ΠΊ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ синтаксичСский сахар, Π² Π²ΠΈΠ΄Π΅ свободных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², нСдСтСрминированности ΠΈ мноТСств состояний. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ массив состоящий ΠΈΠ· структур Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится состояниС, Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ символ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ состояниС.

Π‘Π²ΠΎΠ±ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ (эпсилон ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹) β€” ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Π±Π΅Π· чтСния Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа.

ΠΠ΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ β€” ноль ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² для ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа Π² ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ состояниях.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° состояний β€” Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ НКА ΠΌΠΎΠΆΠ΅Ρ‚ находится Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… состояниях.

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ состояниС обозначаСтся Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ ΠΊΡ€ΡƒΠ³ΠΎΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π’ стартовом состоянии Ρƒ нас Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм являСтся <1>, ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ символС ‘b’ Ρƒ нас появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΠΉΡ‚ΠΈ Π² состояниС 1 ΠΈ Π² состояниС 2, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ послС Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа ‘b’ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм являСтся мноТСство <1, 2>.

Π‘Π²ΠΎΠ±ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ обозначаСтся ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠ΅ΠΉ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π—Π΄Π΅ΡΡŒ Π²ΠΈΠ΄Π½ΠΎ Π΄Π²Π° свободных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈΠ· стартового состояния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· чтСния Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа ΠΌΡ‹ сразу находимся Π² мноТСствС состоянии <2, 4>.

Для прСобразования НКА Π² Π”ΠšΠ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Вомпсона.
ΠŸΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ НКА Π² Π”ΠšΠ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π΅ совсСм ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π”ΠšΠ ΠΈ для Π΅Π³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ БрТозовского.

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ с ΠΌΠ°Π³Π°Π·ΠΈΠ½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (pushdown automaton)

Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ КА, Π½ΠΎ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Π²ΠΈΠ΄Π΅ стСка. Π’Π΅ΠΏΠ΅Ρ€ΡŒ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ нСсколько Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², символ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· стСка ΠΈ символы ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² стСк.

КАМП ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Ρ‚Π°ΠΊΠΈΡ… мСстах, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ языков ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ подсчСту Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… скобок Π² матСматичСских выраТСниях. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ КА Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вСдь количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… состояний ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ стСка (я понимаю, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Π°).

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ символа ΠΈΠ· стСка β€” ΠΏΡ€ΠΈ любом ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊΠΎΠΉ символ Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ, Ссли Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка Π½Π΅ оказалось Ρ‚Π°ΠΊΠΎΠ³ΠΎ символа, Ρ‚ΠΎ ΠΎΠ½ ΠΈ Π½Π΅ выталкиваСтся. Π’Π°ΠΊ ΠΆΠ΅ Ссли символ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² стСкС, Ρ‚ΠΎ ΠΎΠ½ добавляСтся вмСстС с добавляСмыми символами.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ символов Π² стСк β€” ΠΏΡ€ΠΈ любом ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅ символы Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² стСк.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π­Ρ‚ΠΎΡ‚ КАМП подсчитываСт Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ скобок, Π·Π° счСт добавлСния ΠΈ удалСния символов ΠΈΠ· стСка.

Π”ΠΠœΠŸ Π½Π΅ Ρ€Π°Π²Π΅Π½ НАМП, поэтому Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ НАМП ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ прСимущСством ΠΏΠ΅Ρ€Π΅Π΄ Π”ΠΠœΠŸ.

Машина Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π° (Turing machine)

Бамая мощная машина ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…, Π΅Π³ΠΎ прСимущСство ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π² Π»Π΅Π½Ρ‚Π΅ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ…ΠΎΡ‡Π΅Ρ‚. Π’ Π½Π΅ΠΌ Π½Π΅Ρ‚ свободных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². Π£ΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ КА, КАМП.

Π›Π΅Π½Ρ‚Π° β€” это ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° счСт Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π½Π°Π΄ ячСйкой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π¨Π°Π±Π»ΠΎΠ½: считаный_символ_с_Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ/записаный_символ; сторона_смСщСния_Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ. края Π»Π΅Π½Ρ‚Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ‘_’.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π­Ρ‚Π° МВ выполняСт ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ числа, Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° стоит слСва, Ρ‚Π°ΠΌ Π³Π΄Π΅ начинаСтся Π»Π΅Π½Ρ‚Π°.

Π”ΠœΠ’ эквивалСнтСн НМВ, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ.

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ машина Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π° (universal Turing machine)

Машина которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°, получая Π½Π° Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ Π»Π΅Π½Ρ‚Ρƒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘Π°ΠΌΡ‹Π΅ простыС ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ ΠΈΠ»ΠΈ стСйт-ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² Ρ‚Ρ€ΠΈ шага

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт ΠΌΠ°ΡˆΠΈΠ½Π°ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€!
ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ сразу ΠΊ Π΄Π΅Π»Ρƒ, Π½ΠΎ нСбольшая прСдыистория всС Ρ‚Π°ΠΊΠΈ Π½ΡƒΠΆΠ½Π°: ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ стСйт β€” ΠΌΠ°ΡˆΠΈΠ½Ρƒ (ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚), владСя Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ с унивСрситСта, я Π±Ρ‹Π» ΡƒΠ²Π΅Ρ€Π΅Π½ Π² Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ (всС ΠΌΡ‹ оптимисты).

ВрСмя, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ с google, ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π±Π΅Π· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π»ΠΈ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ нСдостаток, Π½ΠΎ ΠΈ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… Π½Π΅Π΄ΠΎΡ‡Π΅Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ слоТная структура ΠΈ отсутствиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ВскорС я наткнулся Π½Π° эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, которая ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»Π° отсутствиС ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

Π§Ρ‚ΠΎ сдСлал Ρ‚ΠΎΠ³Π΄Π°?

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ быстро (Π½Ρƒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ), Ρ‚ΠΎ ΠΌΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ словарСй, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС функция Β«ΠΈΠ·Π΄Π°Π΅Ρ‚ сигнал» ΠΈ, Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΈ сигнала, происходит ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ (устанавливаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ состояниС)

Но Ρ‡Ρ‚ΠΎ дальшС?

Π­Ρ‚ΠΎ Π±Ρ‹Π» Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ курс обучСния Π² унивСрситСтС ΠΏΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ инТСнСрия» ΠΈ Π±Ρ‹Π»ΠΎ ΡƒΠΆΠ΅ ΠΏΠΎΡ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌΠΎΠΉ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ°. ΠŸΠΎΡΠΎΠ²Π΅Ρ‰Π°Π²ΡˆΠΈΡΡŒ с ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΌ Π½Π°ΡƒΡ‡Π½Ρ‹ΠΌ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° идСя Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ², Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΈΡ… ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ.

РСшСниС: Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈ графичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… расскаТу Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…, Π° ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°ΠΆΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

Бпустя Π³ΠΎΠ΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ГрафичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€

РСализован на wpf с использованиСм ReactiveUI.

Π’ΡƒΡ‚ Ρƒ нас структура ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„Π° ΠΈ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ².
НакидываСм ΡƒΠ·Π»Ρ‹, соСдиняСм ΠΈΡ… ΠΈ сохраняСм Π² xml Ρ„Π°ΠΉΠ».

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π’ Ρ†Π΅Π»ΠΎΠΌ я постарался ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ ΡΡ‚ΠΈΠ»ΡŒΠ½ΠΎ, Π° ΠΊΠ°ΠΊ бонус β€” ΠΊΡƒΡ‡Π° горячих клавиш поддСрТиваСтся. Бсылку Π½Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ Π² Π²ΠΈΠ΄Π΅ gif ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡŽ Π² ΠΊΠΎΠ½Ρ†Π΅.

ВозмоТности

Π”Π²Π΅ Ρ‚Π΅ΠΌΡ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π”Π²Π° прСдставлСния ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°:

Валидация

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»ΠΎΠ² ΠΈ соСдинСний

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ΠžΡ‚ΠΌΠ΅Π½Π° дСйствий

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π‘Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»ΠΎΠ²

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ элСмСнтов

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

НаимСнования для состояний ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π˜ΠΌΠΏΠΎΡ€Ρ‚/Экспорт ΠΈΠ·/Π² xml

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ схСмы Π² PNG/JPEG

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСйт машина

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ Π² Ρ‚Ρ€ΠΈ шага:

ΠžΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, вСдь ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ ΠΈ, Ссли ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ export схСмы, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅.

А Ρ‡Ρ‚ΠΎ с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°ΠΌΠΈ?

Для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Entry/Exit Π² состояниС, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ:

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ сразу ΠΆΠ΅, просто ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ сначала ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ всС события состояния, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄.

Π§Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘?

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Ρ„ΠΈΡ‡ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ссылку Ρ‚ΠΎΠΆΠ΅ ΠΎΡΡ‚Π°Π²Π»ΡŽ.

ВозмоТности:

Π‘ΡƒΠ΄ΡƒΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π”ΠΈΠΏΠ»ΠΎΠΌ Π±Ρ‹Π» Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ Π½Π° ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π½ΠΎ Π·Π°Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹.
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΠΏΠΎΠΌΠΎΡ‰ΠΈ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ниТСописанных ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ².
Π’Π°ΠΊΠΆΠ΅, Ссли Π’Ρ‹ нашли ошибки ΠΈΠ»ΠΈ Ρƒ вас Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ β€” ΠΏΠΈΡˆΠΈΡ‚Π΅, Π±ΡƒΠ΄Ρƒ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π΄!

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ:

ПослСдний ΠΏΡƒΠ½ΠΊΡ‚ Ρ€Π°ΡΠΏΠΈΡˆΡƒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. БСйчас ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ имя Ρƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ состояний описаны Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π°.

И Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌΠΈ происходит Ρ‚Π°ΠΊ:

Π‘Ρ€Π°Π·Ρƒ скаТу, Ρ‡Ρ‚ΠΎ dynamic Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
Π’ΡƒΡ‚ Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅ Π½ΡƒΠΆΠ½Π° какая-Ρ‚ΠΎ ΠΊΠΎΠ΄ΠΎ-гСнСрация, Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π΅ нашСл.

ГрафичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ:

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Бсылки

ГрафичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, исходники Π½Π° GitHub: SimpleStateMachineNodeEditor
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, исходники Π½Π° GitHub: SimpleStateMachineLibrary

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *