Stany i automaty stanowe

Używanie automatów stanów do definiowania zachowań i przejść stanów – wyjaśnione w aplikacjach randkowych

(20 grudnia 2020 r.)

Co to jest stan?

W informatyce i informatyce system jest opisywany jako stanowy , jeśli jest przeznaczony do zapamiętywania poprzednich zdarzeń lub interakcji użytkownika; zapamiętana informacja nosi nazwę stan systemu .

Stany systemu są często definiowane przez agregację zachowań jego użytkowników. Stany są ważne, ponieważ jest to bardziej systematyczny sposób sprawdzania, czy określone zachowania w określonych stanach są prawidłowe, czy nie.

Stany sygnalizacji świetlnej

Rozważmy sygnalizację świetlną jako przykład. Jeśli był zielony, kierowcy i pasażerowie spodziewają się zobaczyć żółty – nie czerwony – następny. Kiedy zmieni kolor na żółty, spodziewają się czerwonego, a nie zielonego. Zatem stany tutaj są proste:

Green -> Yellow -> Red
^ |
|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|

Postępuj zgodnie ze strzałkami (czyli dozwolonymi przejściami stanów), a sygnalizacja świetlna jest gotowa do jazdy.

Stany podobieństw w aplikacjach randkowych

Teraz weźmy aplikację randkową jako bardziej skomplikowany przykład, wyobraźmy sobie, że tworzymy aplikację dla ludzi, którzy „pasują” online. Powiedzmy, że mamy gotowe algorytmy i musimy zacząć pisać logikę odpowiadającą dopasowaniom, które pojawiają się w aplikacjach naszych użytkowników.

Zdefiniujmy jednostkę dopasuj najpierw , aby przedstawić dopasowanie między dwiema osobami. Jest kilka stanów dopasowania, które powinniśmy wziąć pod uwagę, gdybyśmy mieli go zaprojektować.

Potrzebujemy stanów, aby ludzie nie widzieli nieoczekiwanych zachowań, takich jak pojawianie się przypadkowej, niedopasowanej osoby na ekranie mówi cześć.

Zdjęcie: Yogas Design na Unsplash

Mój proces myślowy:

  1. Przede wszystkim dopasowanie musi zostać utworzone , co oznacza, że ​​określony zestaw algorytmów ma aby wybrać dwie osoby gotowe do meczu. Oczywiście algorytmy muszą się wcześniej upewnić, że oba są gotowe do dopasowania, pasują do swoich preferencji, nie są zbanowane itp.
  2. Wtedy to dopasowanie może stać się oczekujące (czekam na machnięcie innej osoby) lub nie powiodło się w zależności od akcji pierwszego użytkownika. Jeśli użytkownik przesunie palcem w prawo (co oznacza „Lubię cię” w terminach aplikacji randkowych), stan przeskakuje z utworzonego do w toku . Jeśli użytkownik przesunie palcem w lewo (co oznacza „Nie lubię cię”), stan zmieni się na błąd .
  3. Następnie, jeśli obie osoby się lubią, przejście z pending do dopasowane .
  4. Każda z osób w dopasowaniu może również „cofnąć dopasowanie” dopasowania, zmieniając stan na niedopasowany .
  5. Myślę, że uwzględniono wszystkie zmiany stanów. Ale czy to wszystko? Hmm… czy nie ma płatnej funkcji zwanej „przewijaniem”, która pozwala cofnąć się i ponownie przesunąć? Co powinniśmy z tym zrobić?

Jak upewnimy się, że uwzględniliśmy wszystkie zmiany? Jeśli tak, jak to zaprogramujemy?

Co to jest automat stanowy?

Metodologia modelowania zachowania jednostki o ustalonym cyklu życia

Podczas budowania systemów zorientowanych na stan maszyny stanowe są przydatne, aby pomóc nam lepiej określić skomplikowane przejścia i wyzwalacze.

Maszyny skończone (FSM)

To jest abstrakcyjną maszyną , która może znajdować się dokładnie w jednej z skończonej liczby stanów w dowolnym momencie. FSM może przechodzić z jednego stanu do drugiego w odpowiedzi na niektóre dane wejściowe ; zmiana z jednego stanu na inny nazywana jest przejściem . FSM definiuje lista jego stanów, stanu początkowego i danych wejściowych, które wyzwalają każde przejście.

Przejdźmy do naszego przykładu aplikacji randkowej.Jeśli utworzymy diagram stanu na podstawie logiki za dopasowaniem , wygląda mniej więcej tak:

* Różni zaangażowani użytkownicy mogą stosować różne metody: albo dopasowanych klientów, albo aplikację randkową (twórca platformy / firma).

Ma skończoną liczbę stanów, modelując wszystkie zachowania w cyklu życia meczu. Aby zbudować maszynę stanów, musimy po prostu podążać za liniami i zobaczyć, jak jednostka reaguje na różne zachowania.

Dlaczego powinienem używać automatu stanów?

OK, teraz wiem, że diagram stanów jest naprawdę pomocny, ale nadal dlaczego mam używać automatu stanów podczas pisania kodu?

Z tego samego przykładu przyjrzyjmy się uproszczonemu kodowi przed i po zaangażowaniu automatu stanowego.

Przed użyciem automatu stanowego

Można zauważyć wiele if/else oświadczenia.

Po użyciu automatu stanowego

Niech metoda ChangeState zajmie się przejściami stanów przy użyciu typu StateTransition. Wszystkie inne metody mogą teraz skupić się na logice obsługi dopasowania.

Co więcej mogę zrobić?

Żeby wymienić tylko kilka:

  • Na razie zakładamy, że metody „Rewind” są wystarczająco dobre do wywoływania interfejsów frontendowych. Bardziej delikatnym sposobem radzenia sobie z metodami powinno być sprawdzenie, czy dopasowanie jest nagrane – a jeśli tak, to czy lubi, czy nie – a następnie zdecydować, którego polecenia użyć. Zamiast pozwalać interfejsowi użytkownika na dokonanie oceny (i ryzykować, że jest błędny), sugerujemy raczej, abyśmy zajęli się tym w klasie MatchEntity.
  • Jeśli stan się zmieni zbyt skomplikowane, spróbuj użyć macierzy z osiami aktualnych stanów i poleceń. Dane w macierzy mogą być zaktualizowanymi stanami. W ten sposób kod staje się bardziej czytelny.

Podsumowanie

Dlaczego więc używać automatu stanów? Ponieważ biorąc pod uwagę zdarzenia zmieniające stan (inaczej ważne zachowania jednostki), lepiej modeluje system. Przeważnie wszystko inne można rozwiązać za pomocą podstawowych metod CRUD. Dzięki temu Twój kod jest bardziej czytelny i łatwiejszy w utrzymaniu.

Jeśli chodzi o tworzenie interfejsów API, nie projektuj ich wyłącznie na podstawie żądań kierowanych przez menedżerów produktu. Zaprojektuj interfejsy API (przynajmniej minimum API) dla swojej encji, mając na uwadze krytyczne zachowania i przejścia – stany.

Dokumentacja

Richard Clayton – Użyj maszyn stanowych!

Maszyny skończone (FSM lub w kontekście tego postu po prostu „Maszyny stanowe”) to metodologia modelowania…

rclayton. silvrback.com

Maszyna skończona

Maszyna skończona (FSM) lub automat skończony (FSA, liczba mnoga: automaty), automat skończony lub po prostu stan…

en.wikipedia.org

Prosty przykład automatu stanowego w C #?

Właśnie przyczyniłem się do tego: https://code.google.com/p/ysharp/source/browse/#svn\%2Ftrunk\%2FStateMachinesPoC Oto jeden …

stackoverflow.com

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *