Question

Etant donné un système qui contient deux composants A et B, et

Le système démarre A et B en même temps. Maintenant, A peut passer par des états {A.Starting, A.READY} et B peut être dans les états {B.Starting, B.DoingX, B.DoingY}. (Les événements à la transition entre les A et les états de B sont nommés en conséquence: B.doingx => B va à B.DoingX etc ...)

A et B de la machine d

Je veux modèle

  • Alors que A est en A.Starting, ou B est dans B.Starting, le système est "Démarrage"
  • Le système est à l'état "DoingX" lorsque A est dans A.READY et B se trouve dans B.DoingX
  • Le système est à l'état "DoingY" lorsque A est dans A.READY et B se trouve dans B.DoingY

machine d

Si je ne me trompe pas, la fourche / join pseudo-états pourraient être utilisés ici.

Mais ces éléments modèles ont la sémantique déclarative de l'état composé mentionné ci-dessus? Y at-il une autre façon de modéliser cela?

(Note: les schémas sont de http://yuml.me )

Était-ce utile?

La solution

Pourquoi ne pas simplement tirer ces morceaux? Voici une autre idée sur la façon dont vous pouvez modéliser (à supposer que j'ai bien compris):

  • un état « Démarrage », qui contient les états que vous appelez A.Starting et B.Starting dans les régions parallèles (vous pouvez utiliser fork / joint ici, ou tout simplement compter sur le comportement par défaut de toutes les régions étant activé lorsque "Démarrage" état est entré)

  • un autre état « Faire » qui contient une région avec votre état « A.READY » et une autre région parallèle, qui contient les deux états « B.DoingX » et « B.DoingY ».

Si vous avez vraiment besoin d'avoir un état général « DoingX », alors vous pouvez avoir à créer deux états qui correspondent à A.READY.

Quoi qu'il en soit, dans une perspective plus large: Je crois que votre point de vue est un peu hors ici, quand vous dites que le « système est en état ... ». Au contraire, le système modélisé par une telle machine d'état se trouve dans un ensemble d'états. Donc, normalement, je serais parfaitement heureux de dire que « le système est actuellement en A.READY et B.DoingX ».

Peut-être tout ce que vous avez besoin est un changement de terminologie. Qu'en est-il ceci:

Le système est en configuration "DoingX" lorsque les Etats A.READY et B.DoingX sont actifs?

En réponse au commentaire: Oui, ce standard, voici la partie de la spécification de la superstructure (version 2.4 bêta) correspondant:

Dans une machine d'état hiérarchique plus d'un état peut être actif à la fois. [...] l ' « état » courant actif est en fait représentée par un ensemble d'arbres d'états en commençant par les haut-la plupart des États des régions profondes jusqu'au plus profond substate actif. Nous nous référons à un tel arbre de l'État comme Configuration de l'état .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top