В рамках дальнейшего развития SObjectizer обдумываю такую тему, как иерархические конечные автоматы. Агенты в SO-5 сейчас являются КА, но простыми, их состояния не могут быть вложены друг в друга. Интересно рассмотреть вариант, когда у агентов появляются вложенные состояния и другие плюшки, присущие более продвинутым КА.
В качестве маленькой тестовой задачки использую крайне упрощенный пример с домофоном. Т.е. есть устройство с 10-ью цифровыми кнопками, кнопкой сброса "С", кнопкой с решеткой "#" и кнопкой со звонком "B". Большую часть времени устройство проводит в неактивном состоянии, в котором не светится ни дисплей, ни кнопки. Когда пользователь нажимает любую кнопку устройство должно активизироваться (т.е. перейти в режим активного ожидания действий пользователя, включив при этом подсветку дисплея и кнопок). Если пользователь ничего не делает в течении 30 секунд, то устройство должно вернуться в неактивное состояние (при этом сбросив весь предыдущий ввод пользователя и погасив подсветку).
Если пользователь вводит комбинацию вида "dddB" (т.е. нажимает несколько цифр и кнопку звонка), то должен быть выполнен звонок в квартиру с указанным номером. Если вводит комбинацию "#ddd#dddddB", то это должно рассматриваться как предъявление секретного кода "ddddd" для квартиры с номером "ddd", если код предъявлен правильно, то замок должен быть открыт. Если вводит комбинацию "##ddddd#", то "ddddd" должен быть уникальным сервисным кодом, открывающим замок.
Если в процессе ввода пользователь нажимает "C", то весь ввод пользователя должен быть выброшен, а устройство должно опять начать активное ожидание ввода.