Дорогие читатели, здравствуйте. Наш ученик написал интересную статью о том, как работает банкомат. Давайте это почитаем. Предыдущие публикации по финансовым технологиям вы можете найти здесь.
"Конечный автомат (или автомат с конечным числом состояний, Finite State Machine, FSM) — это модель поведения, которая в любой момент времени находится ровно в одном из заранее заданного набора состояний. Иначе говоря, это симуляция "машины", у которой есть конечный список режимов работы, и она переключается между ними по определенным правилам.
Представьте себе обычный (старый) турникет в метро.
Состояния: их обычно два – заблокирован и разблокирован.
События: опустить жетон.
пройти через турникет.
Переходы (правила): если состояние "заблокирован", и происходит событие "опустить жетон", то переходим в состояние "разблокирован".
Если состояние "разблокирован", и происходит событие "пройти", то переходим в состояние "заблокирован".
В других случаях состояние не меняется (например, если пытаться пройти в заблокированном состоянии, ничего не произойдет).
Это и есть работа конечного автомата. Вот как это работает в NDC (на примере банкомата), который как раз классический конечный автомат. В документации NDC как раз описана таблица состояний.
У банкомата есть конечный набор режимов (состояний), например такие.
Idle (ожидание карты).
ReadingCard (чтение карты).
PinEntry (ввод ПИН-кода).
Processing (связь с банком).
Dispensing (выдача денег).
OutOfService (не работает).
Событиями для банкомата служат:
клиент вставил карту;
клиент нажал кнопку;
пришел ответ от контроллера (процессинга);
сломался принтер;
закончилась бумага.
Переходы (правила) прописаны в конфигурации банкомата. Например.
Текущее состояние: ldle.
Событие: вставлена карта.
Новое состояние: ReadingCard.
Текущее состояние: PinEntry.
Событие: клиент ввел ПИН и нажал "Ввод".
Новое состояние: processing (запрос в банк).
В чем польза от применения состояний и конечного автомата? Такой подход используется в NDC и многих других системах (железо, сетевые протоколы, GUI) по 3 главным причинам.
Предсказуемость: зная текущее состояние и событие, мы всегда точно знаем, что будет дальше. Нет варианта "оно само как-то решит".
Безопасность: банкомат не может выдать деньги, если он не в состоянии Dispensing. Если кто-то попытается стукнуть по нему кувалдой (событие "вандализм"), автомат перейдет в состояние OutOfService и заблокирует все действия.
Простота разработки: вместо писанины сложных условий (if... then... else) разработчик просто рисует таблицу: "В состоянии А при событии Х делаем Y и переходим в состояние В".
В NDC банкомат — это железка, которая просто "гоняет" состояния по кругу согласно загруженной в него таблице (упрощенно). Это делает его поведение строго определенным и надежным. Здесь подробно препарированный пример, и эта простота обманчива – в некоторых случаях конечный автомат становится конченым, например, если рассматривать теорию компиляторов, которая ест мозг всем, кто нырнул в кроличью нору перевода кода высокоуровневых языков программирования на машинные инструкции, но это другая история".
******
Если вам нравятся наши публикации, то вы можете поддержать канал донатом.
У нас есть много полезных и интересных публикаций.
Наш клуб 800Million совместно с Центром психологической безопасности (ЦПБ)
регулярно проводит финансовые курсы. В этой подборке собрана информация о курсах, отзывы о них, а также рассказано о преподавателе.
А это пост, в котором рассказано обо всех наших технологиях.
Здесь - наши статьи.
Здесь подборка с нашими рассказами о 800Million.
Кроме того, у нашего клуба есть своя картинная галерея нейроживописи.
Стиль - супрематизм. Картины созданы нашим мастером. Любую из работ вы можете заказать для приобретения.