Kirill Profile picture
13 Apr, 18 tweets, 4 min read
И так поехали тред про конечные автоматы (fsm, state machines). Одной из ключевых тем в разработке софта касающуюся всех программистов без исключения. Будет много примеров для разных языков. После этого треда вы, вероятно, увидите мир другими глазами. Лайк, шер, алишер, погнали!
Существует заблуждение что автоматы это что-то, из математики, не имеющее отношение к реальной жизни. Их используют в лексическом анализе для написания парсеров. Многие помнят лабы на си, где нужно было разбирать строчку. Да это тоже автоматы, но совсем другие.
Мы же поговорим об автоматах с точки зрения моделирования бизнес-процессов, которые мы программисты по большей части и программируем. Сразу предупрежу, что тема автоматов ну очень глубокая, они бывают совсем разные и к ним нужен разный подход. Поэтому что-то останется за кадром
Простой пример автомата – регистрация пользователя. Что это значит? Регистрация пользователя, подразумевает наличие разных состояний. Обычно, после регистрации он должен подтвердить емейл, после чего появляются доступы. Кроме того пользователь может быть забанен и удален.
Наш процесс регистрации распадается на независимые состояния, через которые проходит пользователь. Этих состояний конечное число и каждое из них влияет на то что может делать пользователь и что с ним происходит. Например: created, activated, banned, removed и т.п.
И эти состояния не универсальны для любой регистрации. Имена состояний, их количество и влияние на систему зависит от бизнес-требований. Где-то в автомате регистрации может быть два состояния (ожидает подтверждения почты и подтвержденный), а где-то 10. Но суть остается той же
Но состояния это только половина дела. Дальше появляются переходы (transition). Переход по состояниям не происходят просто так, мы их программируем. Например если человек подтверждает почту, то мы не просто переводим его в состояние confirmed (или activated), но и шлем письмо
Фактически конечный автомат моделирует бизнес-процесс и выглядит как постановка задачи, а что собственно требуется сделать. В UML существует для этого спец диаграмма, которая так и называется "диаграмма состояний" (хм, не смог найти регистрацию в гугле) sparxsystems.com/resources/gall…
Обратите внимание на то что автомат имеет не линейную структуру (иногда имеет). В общем случае автоматы это граф, набор состояний, по которым можно ходить в разных направлениях и даже разными способами перепрыгивая. Вполне реально забанить человека еще до подтверждения почты.
Что еще интереснее, такое описание интуитивно понятно всем (особенно если разобраться с терминами) и оно существует независимо от программирования. То есть автоматы вокруг нас везде не важно знаем мы про это или нет. И главное, это самый простой способ описать дискретные процессы
Накидаю еще кучку примеров автоматов: http-запрос, оформление заказа, вединговые-аппараты, визарды, игры (сплошные автоматы), обработка задач, открыта/закрыта модалка, процесс блокировки телефона, документооборот
Еще: процессы в операционной системе, промисы внутри да и вообще любая асинхронность, event loop ни что иное как автомат (собственно nginx это автомат), валидная/не валидная форма, логика работы банкомата и так далее. Все что нас окружает описывается автоматами!
Документация reduxjs/toolkit: redux.js.org/style-guide/st…

treat reducers as "state machines", where the combination of both the current state and the dispatched action determines whether a new state value is actually calculated, not just the action itself unconditionally.
Она же: redux.js.org/tutorials/esse…

Loading State for Requests#
When we make an API call, we can view its progress as a small state machine that can be in one of four possible states: 'idle' | 'loading' | 'succeeded' | 'failed'
Главный поинт на текущий момент, что независимо от кода, нужно уметь видеть процессы с которыми вы работаете и раскладывать их на состояния (как минимум в голове), в которые можно попасть только по определенным путям. Это лучший способ понимать системы с самой верхней точки
Минутка рекламы перед второй частью (почти как в телевизоре): нам нужны наставники/преподаватели/авторы курсов. Если вы сечете фишку, то мы вас ждем notion.so/hexlet/c6406ed… 🤓
Давайте даже так. Следующую часть я расскажу в другой день, просто для того чтобы собрать фидбек по рассказанному. Что вам еще накидать добавить? И пока не забыл, вот тут есть книга по автоматам, очень классная и не напряжная: ru.hexlet.io/pages/recommen…
И для затравки на следующий тред покажу код реального автомата в коде одного из наших проектов: github.com/hexlet-basics/… Код хоть и на руби, но кристально понятен для всех

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Kirill

Kirill Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @mokevnin

19 Jan
Сегодня последний тред из мифов в ООП #oopmyths Поговорим о том, что обычно считают ООП кодом и что влияет на его структуру больше всего. Какие вещи в ООП универсальны сквозь большинство языков. Включайтесь)
Ну и традиционно вопрос. Может ли код быть одновременно объектно-ориентирован и функционален?
Несмотря на любую теорию, на практике, многие программисты если не видят в коде конструкций вида something.do(data), то они не считают код объектно ориентированным. Проверял это много раз. Все это сопровождается философией в стиле "это поведение", а иначе нет.
Read 13 tweets
23 Dec 20
В серии "мифы ооп" уже два треда:




Начинаем третий про наследование и отношения. Во второй части был опрос про отношения, на который правильно ответило только 29 процентов! И кажется что не все поняли первый тред. #oopmyths
Начнем как обычно с опроса. Вопрос: "Объяснять ООП надо через аналогию с реальным миром". Именно так делается в подавляющем большинстве источников и сервисах типа стековерфлоу.
Строго говоря, отношение частное-общее про типы, а не классы. В статье про сабтайпинг об этом написано внизу: en.wikipedia.org/wiki/Subtyping. И принцип лисков тоже не про классы. Наследование классов это всего лишь способ убрать дублирование кода. Один из худших способов.
Read 15 tweets
18 Dec 20
Итак) Второй тред посвященный ООП и мифам вокруг него. По итогам первого треда уточню, что разбор ООП идет не с точки зрения систем типов, а с точки зрения организации кода и влиянии на архитектуру. Лайк, шер, будет много интересного, поехали!

Отношение общее-частное это:
В первом треде мы разобрали что под полиморфизмом в ооп понимают полиморфизм подтипов. Остальные виды полиморфизмов тоже важны, но они не играют определяющую роль с точки зрения парадигмы. Полиморфизм подтипов, если по простому, сводится к разным реализациям нужного поведения.
Под типами и подтипами часто понимаются интерфейсы (и их аналоги типа протоколов) и отношения между интерфейсами. Иногда говорят "наследование интерфейсов". Соответственно классы и наследование классов тут не причем. И принципов Лисков не имеет отношения к классам.
Read 23 tweets
16 Dec 20
Сегодня я хочу попробовать формат коллективных твиттеров у себя в твиттере. Потвичу пару часов о мифах вокруг ООП. Лайк, шер приветствуется. Задание на самопроверку:

Какой вид полиморфизма имеется ввиду когда речь идет про полиморфизм в ООП?
Перед тем как я буду выдавать какие-то утверждения и прикладывать пруфы. У меня есть десяток мифов, которые я бы хотел разобрать задав вопросы тут. Поэтому продолжаю спрашивать:

Нужно ли наследование для реализации полиморфизма подтипов?
Может ли язык называться ООП если в нем нет классов?
Read 34 tweets
9 Aug 18
Поиграем в игру. 1 лайк - 1 факт из жизни президентского полка. Я служил с 2004 по 2006 год в первой роте, той что стоит на МНС в Александровском Саду (сейчас немного другая структура).
Писать начну вечером. Структура такая:

1. Что такое ПП и какие задачи выполняет.
2. Как туда попадают.
3. Жизнь в полку.
Президентский полк - особое подразделение, которое не подчиняется министерству обороны, а является подразделением ФСО. Полное наименование: Президентский полк Службы коменданта Московского Кремля Федеральной службы охраны Российской Федерации
Read 53 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!