Zum Inhalt springen

Was muss ne gute State-Machine können?


steinadler

Empfohlene Beiträge

Naja, einfach ausgedrückt ist eine SM etwas, dass verschiedene Zustände durchläuft. Also z.B. eine Ampel. Ist die ganze Zeit über grün, Fußgänger drückt und die Farben laufen durch.

Welche Zustände vorhanden sind und durchlaufen werden können hängt vom Design ab. Auch welche äußeren Einflüsse eine Änderung bewirken. Also nicht unbedingt auf genau drei Zustände begrenzt.

siehe auch: Finite state machine - Wikipedia, the free encyclopedia

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also der Grundentwurf ist meistes eine Enum für die verschiedeen Zustände und ein switch-case der bei einem Ereignis prüft, ich habe diesen Zustand, die Ereignis, also tue ich etwas und ändere meinen Zustand.

Beispiel:


enum STATES {RED, YELLOW, GREEN };

STATES s = RED;


void onEvent(Event e)

{

   switch(s) 

   {

      // ...

      case RED:

           if (e == /* Fußgänger hat gedrückt */)

           {

               // Timer starten der onEvent aufruft

           }

           else if ( e = /* vom Timer *)

           {

               s = YELLOW;

           }  

           break;

      // ...

   } 

}

Eine Klasse StateMachine dafür zu entwickeln halte ich für unnötig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Allerdings würde ich in meinem Fall dann einfach erst die States anlegen,

also

State_x(Timeout)

State_y(Timeout)

State_z(Timeout)

und dann wird eine Cycle-Funktion hinzugefügt, in welcher dann festgelegt wird:

switch(actualState)

{

case State_x:

NextState = State_y

Bei Auftreten eines Timeouts wird die gesamte Sache abgebrochen und ich kann von außen jeweils den aktuellen Schritt, den nächsten und den Zustand eines jeden Schritts sehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Muss die Statemachine unbedingt dynamisch neue States implementieren können? Das ist ein riesiger Haufen mehr Aufwand als eine im Code definierte Variante, wie von Maddin vorgeschlagen!

Welchen Bedingungen ist Deine Statemachine unterworfen? Willst du nur eine Abfolge von Zuständen durchlaufen, je nach Situation und Events in einer anderen Reihenfolge?

Was genau sind das für Events und wie reagierst Du darauf?

Wenn Du zur Entwicklungszeit schon absehen kannst, welche Zustände es gibt und welche Bedingungen welchen Zustand auslösen und Du zusätzlich noch sagen kannst, dass niemals zwei dieser Zustände gleichzeitig gegeben sein können (lach nicht, habe ich schon erlebt :) ), dann solltest Du keine Klasse programmieren!

Manche Applikationen / Probleme kann man auch durchaus mit zwei Statemachines besser abbilden. Z.B. dann, wenn Du erkennst, dass Dein Problem aus n Zuständen besteht, in denen Du auf m Situationen reagieren musst, usw...

Ohne Genaueres über Deine Applikation zu wissen, ist das freilich schwer (unmöglich) zu sagen!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...