Réserver une Démo
Pré. Proc.

Exemple : Fourche et Joindre

Les pseudo-états de fourche divisent une transition entrante en deux transitions ou plus, se terminant par des sommets dans des régions orthogonales d'un State composite. Les transitions sortant d'un pseudo-état Fork ne peuvent pas avoir de garde ou de déclencheur, et les comportements d'effet des transitions sortantes individuelles sont, au moins conceptuellement, exécutés simultanément.

Les pseudo-états de jointure sont un sommet cible commun pour deux transitions ou plus provenant de sommets dans différentes régions orthogonales. Les pseudo-états de jointure exécutent une fonction de synchronisation, dans laquelle toutes les transitions entrantes doivent se terminer avant que l'exécution puisse se poursuivre via une transition sortante.

Dans cet exemple, nous démontrons le comportement d'une Statemachine avec des pseudo-états de Fourche et Joindre .

Modélisation Statemachine

Example StateMachine diagram with Fork/Joins in Sparx Systems Enterprise Architect

Contexte de Statemachine

  • Créez un élément Class nommé MyClass , qui sert de contexte à une Statemachine
  • Cliquez Cliquez-droit sur MyClass dans la fenêtre du Navigateur et sélectionnez l'option 'Ajouter | Statemachine d'état

Statemachine

  • Ajoutez un Initial Node, un Fork , un State nommé State1 , un Join et un Final au diagramme
  • Agrandissez State1 , cliquez cliquez-droit dessus sur le diagramme et sélectionnez 'Avancé | Définir les sous-états simultanés | Définir l'option et définir RégionA et RégionB
  • Dans RegionA , définissez StateA1 , transition vers StateA2 , déclenchée par l'événement X
  • Dans RegionB , définissez StateB1 , transition vers StateB2 , déclenchée par l'événement Y
  • Dessinez d'autres transitions : Initial to Fork ; Fourche vers StateA1 et StateB1 ; StateA2 et StateB2 pour rejoindre ; Rejoignez la finale

Simulation

Artefact

Enterprise Architect en supporte C, C++, C# , Java et JavaScript ; nous utiliserons JavaScript dans cet exemple car nous n'avons pas besoin d'installer de compilateur (pour les autres langages, Visual Studio ou JDK sont requis).

  • Dans la boîte à outils Diagramme , sélectionnez la page ' Simulation ' et faites glisser l'icône Statemachine Exécutable sur le diagramme pour créer un artefact ; nommez-le ForkNJoinSimulation et définissez son champ 'Langue' sur ' JavaScript '
  • Ctrl + faites glisser MyClass depuis la fenêtre Navigateur et déposez-le sur l'artefact ForkNJoinSimulation en tant que propriété ; donnez-lui le nom myClass
Executable StateMachine for SysML simulation in Sparx Systems Enterprise Architect

Génération de codes

  • Cliquez sur ForkNJoinSimulation et sélectionnez l'option de ruban 'Simulate > États Statemachine États Exécutables Générer , Build and Exécuter '
  • Spécifiez un répertoire pour le code source généré
Note : Le contenu de ce répertoire sera effacé avant génération ; assurez-vous de pointer vers un répertoire qui existe uniquement à des fins de simulation Statemachine .

Fork and Join during simulation of executable state machine

Exécuter Simulation

Lorsque la simulation est lancée, State1 , StateA1 et StateB1 sont actifs et la Statemachine attend des événements.

Fork and Join during simulation of executable state machine

Sélectionnez l'option du ruban 'Simuler > Simulation Dynamique > Événements ' pour afficher la fenêtre Simulation Événements .

Sur l'événement déclencheur X , StateA1 sortira et entrera dans StateA2 ; après que le comportement entry and exécuter a exécuté , les événements d'achèvement de StateA2 sont distribués et rappelés. Ensuite, la transition de StateA2 au pseudo-état Join est activée et traversée.

Note : La jointure doit attendre que toutes les transitions entrantes soient terminées avant que l'exécution puisse se poursuivre via une transition sortante. Étant donné que la branche de RegionB n'est pas terminée (parce que StateB1 est toujours actif et attend des déclencheurs), la transition de Join à Final ne sera pas exécutée pour le moment.

Fork and Join during simulation of executable state machine

Lors de l'événement déclencheur Y , StateB1 sortira et entrera dans StateB2 ; une fois que le comportement entry and doActivity a exécuter , les événements d'achèvement de StateB2 sont distribués et rappelés. Ensuite, la transition de StateB2 au pseudo-état Join est activée et traversée. Cela répond aux critères de toutes les transitions entrantes de Join terminées, de sorte que la transition de Join à Final est exécutée. Simulation est terminée.

Conseils : V ous pouvez visualiser la séquence de trace d'exécution depuis la fenêtre Simulation (option du ruban 'Simuler > Simulation Dynamique > Simulateur > Ouvrir la fenêtre de Simulation ').

myClass[MyClass].Initial_82285__TO__fork_82286_82286_61745 Effet

maClasse[MaClasse].StateMachine_State1 ENTRÉE

maClasse[MaClasse].StateMachine_State1 DO

myClass[MyClass].fork_82286_82286__TO__StateA1_57125 Effet

maClasse[MaClasse].StateMachine_State1_StateA1 ENTRÉE

maClasse[MaClasse].StateMachine_State1_StateA1 FAIRE

myClass[MyClass].fork_82286_82286__TO__StateB1_57126 Effet

maClasse[MaClasse].StateMachine_State1_StateB1 ENTRÉE

maClasse[MaClasse].StateMachine_State1_StateB1 FAIRE

Déclencheur X

maClasse[MaClasse].StateMachine_State1_StateA1 EXIT

maClasse[MaClasse].StateA1__TO__StateA2_57135 Effet

maClasse[MaClasse].StateMachine_State1_StateA2 ENTRÉE

maClasse[MaClasse].StateMachine_State1_StateA2 FAIRE

maClasse[MaClasse].StateMachine_State1_StateA2 EXIT

myClass[MyClass].StateA2__TO__join_82287_82287_57134 Effet

Déclencheur Y

maClasse[MaClasse].StateMachine_State1_StateB1 EXIT

maClasse[MaClasse].StateB1__TO__StateB2_57133 Effet

maClasse[MaClasse].StateMachine_State1_StateB2 ENTRÉE

maClasse[MaClasse].StateMachine_State1_StateB2 FAIRE

maClasse[MaClasse].StateMachine_State1_StateB2 EXIT

myClass[MyClass].StateB2__TO__join_82287_82287_57132 Effet

maClasse[MaClasse].StateMachine_State1 EXIT

myClass[MyClass].join_82287_82287__TO__Final_105754_57130 Effet