Zustände und Zustandsautomaten

Veröffentlicht

Verwenden von Zustandsautomaten zum Definieren von Verhalten und Zustandsübergängen – erklärt mit Dating-Apps

(20. Dezember 2020)

Was ist ein Zustand?

In der Informationstechnologie und Informatik wird ein System als stateful , wenn es dazu gedacht ist, sich an vorhergehende Ereignisse oder Benutzerinteraktionen zu erinnern; Die gespeicherten Informationen werden als Status des Systems bezeichnet

Die Status eines Systems werden häufig durch die Aggregation der Verhaltensweisen seiner Benutzer definiert. Zustände sind wichtig, da auf diese Weise systematischer überprüft werden kann, ob bestimmte Verhaltensweisen in bestimmten Zuständen gültig sind oder nicht.

Zustände einer Ampel

Betrachten Sie eine Ampel als Beispiel. Wenn es grün war, erwarten Fahrer und Passagiere, dass es als nächstes gelb – nicht rot – sieht. Wenn es gelb wird, erwarten sie rot und nicht grün. Die Zustände hier sind also einfach:

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

Befolgen Sie die Pfeile (auch als zulässige Zustandsübergänge bezeichnet), und Ihre Ampel kann loslegen.

Status der Übereinstimmungen in Dating-Apps

Nehmen wir nun eine Dating-App als komplizierteres Beispiel. Stellen Sie sich vor, wir erstellen eine App, mit der Personen online „übereinstimmen“ können. Angenommen, wir haben die Algorithmen bereit und müssen mit dem Schreiben der Logik hinter den Übereinstimmungen beginnen, die in den Apps unserer Benutzer angezeigt werden.

Definieren wir eine Entität stimmen Sie zuerst mit überein, um die Übereinstimmung zwischen zwei Personen darzustellen. Es gibt mehrere Zustände für eine Übereinstimmung, die wir berücksichtigen sollten, wenn wir sie entwerfen möchten.

Wir benötigen die Zustände, damit die Leute keine unerwarteten Verhaltensweisen sehen, wie beispielsweise eine zufällige, nicht übereinstimmende Person, die auftaucht auf dem Bildschirm Hallo sagen.

Foto von Yogas Design auf Unsplash

Mein Denkprozess:

  1. Zunächst muss eine Übereinstimmung erstellt werden , was bedeutet, dass ein bestimmter Satz von Algorithmen vorhanden ist um zwei Personen auszuwählen, die für ein Match bereit sind. Natürlich müssen die Algorithmen im Voraus sicherstellen, dass beide für ein Match bereit sind, den Vorlieben des anderen entsprechen, nicht gesperrt sind usw.
  2. Dann könnte dieses Match entweder ausstehend (Warten auf den Schlag einer anderen Person) oder fehlgeschlagen abhängig von der Aktion des ersten Benutzers. Wenn der Benutzer nach rechts wischt (was in Bezug auf Dating-Apps „Ich mag dich“ bedeutet), springt der Status von erstellt zu ausstehend . Wenn der Benutzer nach links wischt (was bedeutet, dass ich Sie nicht mag), ändert sich der Status in fehlgeschlagen .
  3. Wenn sich beide Personen mögen, geht es von ausstehend zu übereinstimmte .
  4. Jede der Personen in einer Übereinstimmung könnte auch eine Übereinstimmung „aufheben“ und den Status auf unübertroffen .
  5. Ich glaube, ich habe alle Statusänderungen abgedeckt. Aber sind das alles? Hmm … gibt es nicht eine kostenpflichtige Funktion namens „Zurückspulen“, mit der Sie zurückgehen und erneut wischen können? Was sollen wir damit machen?

Wie stellen wir sicher, dass wir alle Änderungen berücksichtigt haben? Wenn ja, wie programmieren wir es?

Was ist eine Zustandsmaschine?

Eine Methode zur Modellierung des Verhaltens einer Entität mit einem festgelegten Lebenszyklus

Beim Erstellen zustandsorientierter Systeme sind Zustandsmaschinen hilfreich, um die komplizierten Übergänge und Auslöser besser bestimmen zu können.

Finite-State-Maschinen (FSM)

It ist eine abstrakte Maschine , die sich in genau einer endlichen Anzahl von Zuständen zu einem bestimmten Zeitpunkt. Der FSM kann als Reaktion auf einige -Eingaben von einem Zustand in einen anderen wechseln. Der Wechsel von einem Zustand in einen anderen wird als -Übergang bezeichnet. Ein FSM wird durch eine Liste seiner Zustände, seines Anfangszustands und der Eingaben definiert, die jeden Übergang auslösen.

Fahren wir mit unserem Beispiel für eine Dating-App fort.Wenn wir ein -Statusdiagramm aus der Logik hinter einer Übereinstimmung sieht ungefähr so ​​aus:

* Verschiedene Methoden können von verschiedenen beteiligten Benutzern angewendet werden: entweder von den übereinstimmenden Kunden oder von der Dating-App (Plattform-Ersteller / Unternehmen).

Es gibt eine endliche Anzahl von Zuständen, die alle Verhaltensweisen innerhalb des Lebenszyklus eines Spiels modellieren. Um eine Zustandsmaschine zu erstellen, müssen wir nur den Linien folgen und sehen, wie die Entität auf verschiedene Verhaltensweisen reagiert.

Warum sollte ich eine Zustandsmaschine verwenden?

Okay, jetzt weiß ich das Das Zustandsdiagramm ist wirklich hilfreich, aber warum sollte ich beim Schreiben meines Codes dennoch eine Zustandsmaschine verwenden?

Schauen wir uns im selben Beispiel einen vereinfachten Code an vor und nach einer Zustandsmaschine.

Vor der Verwendung einer Zustandsmaschine

Sie können viele if/else Anweisungen.

Nach Verwendung einer Zustandsmaschine

Lassen Sie die Methode ChangeState Zustandsübergänge mit dem Typ StateTransition durchführen. Alle anderen Methoden können sich jetzt auf die Logik der Behandlung des Spiels konzentrieren.

Was kann ich noch tun?

Um nur einige zu nennen:

  • Im Moment gehen wir davon aus, dass die „Rewind“ -Methoden gut genug sind, um Frontend-Schnittstellen aufzurufen. Eine schwierigere Art, mit Methoden umzugehen, sollte darin bestehen, zu überprüfen, ob die Übereinstimmung aufgezeichnet wurde – und wenn ja, ob sie gemocht oder nicht gemocht wird – und dann zu entscheiden, welcher Befehl verwendet werden soll. Anstatt die Benutzeroberfläche das Urteil fällen zu lassen (und zu riskieren, dass es falsch ist), wird eher empfohlen, dass wir es in der Klasse MatchEntity behandeln.
  • Wenn der Status wechselt Wenn Sie zu kompliziert werden, verwenden Sie eine Matrix mit der Achse der aktuellen Zustände und Befehle. Die Daten in der Matrix können die aktualisierten Zustände sein. Auf diese Weise wird der Code besser lesbar.

Zusammenfassung

Warum also eine Zustandsmaschine verwenden? Durch die Berücksichtigung der sich ändernden Ereignisse (auch bekannt als das wichtige Verhalten einer Entität) wird ein System besser modelliert. Fast alles andere kann mit grundlegenden CRUD-Methoden gelöst werden. Außerdem wird Ihr Code lesbarer und wartbarer.

Entwerfen Sie APIs beim Erstellen nicht nur auf der Grundlage der Anforderungen, die Produktmanager stellen. Entwerfen Sie APIs (mindestens Mindest-APIs) für Ihre Entität unter Berücksichtigung der kritischen Verhaltensweisen und Übergänge – Zustände.

Referenz

Richard Clayton – Verwenden Sie State Machines!

Finite State Machines (FSM oder im Kontext dieses Beitrags einfach „State Machines“) sind eine Methode zur Modellierung des…

rclayton. silvrback.com

Finite-State-Maschine

Eine Finite-State-Maschine (FSM) oder ein Finite-State-Automat (FSA, Plural: Automaten), endlicher Automat oder einfach ein Zustand…

de.wikipedia.org

Einfaches Beispiel für eine Zustandsmaschine in C #?

Ich habe gerade Folgendes beigetragen: https://code.google.com/p/ysharp/source/browse/#svn\%2Ftrunk\%2FStateMachinesPoC Hier ist eines …

stackoverflow.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.