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
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 '
- + 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
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é
Exécuter Simulation
Lorsque la simulation est lancée, State1 , StateA1 et StateB1 sont actifs et la Statemachine attend des événements.
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.
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