Pré. | Proc. |
Modélisation Statemachines Exécutables
La plupart du travail requis pour modéliser un Statemachine Exécutable est modélisation standard basée sur UML des classes et des modèles State , bien qu'il existe quelques conventions qui doivent être respectées pour garantir une base de code bien formée. La seule construction nouvelle est l'utilisation d'un élément Artifact stéréotypé pour former la configuration d'une instance ou d'un scénario Statemachine Exécutable . L'Artifact est utilisé pour spécifier des détails tels que :
- Le langage de code ( JavaScript , C# , Java, C++ y compris C)
- Les classes et Statemachines impliquées dans le scénario
- Les spécifications d'instance, y compris l'état d'exécution ; note que cela peut inclure plusieurs instances de la même Statemachine , par exemple lorsqu'une classe « Joueur » est utilisée deux fois dans une simulation de match de tennis
Outils et objets Modélisation de base pour Statemachines Exécutables
Ce sont les principaux éléments modélisation utilisés lors de la construction Statemachines Exécutables .
Type d'élément |
Description |
---|---|
Classes et Diagrammes de classes |
Les classes définissent les types object pertinents pour la ou Statemachine modélisées. Par exemple, dans un scénario de match de tennis simple, vous pouvez définir une classe pour chaque joueur, match, Hit et arbitre. Chacun aura sa ou ses propres Statemachine et sera représenté au moment de l'exécution par des instances object pour chaque entité impliquée. Consultez le Guide Modélisation UML pour plus d'informations sur les classes et diagrammes de classes. |
Statemachines |
Pour chaque classe que vous définissez et qui aura un comportement dynamique dans un scénario, vous définirez généralement une ou plusieurs Statemachines UML . Chaque Statemachine déterminera le comportement légal basé sur l'état approprié pour un aspect de la classe propriétaire. Par exemple, il est possible d'avoir une Statemachine qui représente l'état émotionnel d'un joueur, une autre qui suit sa forme physique et ses niveaux d'énergie actuels, et une autre qui représente son état de victoire ou de défaite. Toutes ces Statemachines seront initialisées et démarrées lorsque le scénario Statemachine commencera à s'exécuter. |
Artefact Statemachine Exécutable |
Cet artefact stéréotypé est l'élément central utilisé pour spécifier les participants, la configuration et les conditions de démarrage d'un Statemachine Exécutable . Du point de vue du scénario, il est utilisé pour déterminer quelles instances (de classes) sont impliquées, quels événements elles peuvent Déclencheur et s'envoyer les unes aux autres, et dans quelles conditions de démarrage elles fonctionnent. Du point de vue de la configuration, l'Artifact est utilisé pour établir le lien vers un script d'analyse qui déterminera le répertoire de sortie, le langage de code, le script de compilation et autres. Un clic droit sur l'Artifact vous permettra de générer, construire, compiler et visualiser l'exécution en temps réel de vos Statemachines . |
Constructions Statemachine prises en charge
Ce tableau détaille les constructions Statemachine prises en charge et toutes les limitations ou contraintes générales pertinentes pour chaque type.
Construction |
Description |
---|---|
Statemachines |
Activation par défaut : lorsque la Statemachine commence à s’exécuter. Point d'entrée Entrée : Transitions du point d'entrée vers les sommets des régions contenues.
|
States |
|
Entrée State composite |
|
Sous-États |
|
Support aux transitions |
|
Déclencheur et Événements |
Un Statemachine Exécutable supporte la gestion des événements pour les signaux uniquement. Pour utiliser les types d'événements d'appel, de synchronisation ou de modification, vous devez définir un mécanisme externe pour générer des signaux en fonction de ces événements. |
Signal |
Attributes peuvent être définis dans Signaux ; la valeur des attributs peut être utilisée comme arguments d'événement dans Transition Gardes et Effets . Par exemple, voici le code défini dans l'effet d'une transition en C++ : si(signal->signalEnum == ENUM_SIGNAL2) { int xVal = ((Signal2*)signal)->maVal; } Signal2 est généré sous la forme de ce code : classe Signal2 : public Signal{ publique: Signal2(){}; Signal2(std::vector<String>& lstArguments); int maVal; }; Note : des détails supplémentaires peuvent être trouvés en générant un Statemachine Exécutable et en se référant au fichier « EventProxy » généré. |
Initial |
Un pseudo-état initial représente un point de départ pour une région. Il est la source d'au plus une transition ; il ne peut y avoir qu'un seul sommet initial dans une région. |
Régions |
Activation par défaut et activation explicite : Les transitions se terminent sur l' State contenant :
|
Choix |
Les contraintes de garde sur toutes les transitions sortantes sont évaluées de manière dynamique lorsque la traversée de transition composée atteint ce pseudo-état. |
Jonction |
Branche conditionnelle statique : les contraintes de garde sont évaluées avant l’exécution de toute transition composée. |
Fourcher / Rejoindre |
Non threadé, chaque région active se déplace d'une étape en alternance, en fonction d'un mécanisme de pool d'événements d'achèvement. |
Nœuds de point d'entrée/point de sortie |
Non threadé pour State orthogonal ou Statemachine orthogonale ; chaque région active se déplace d'une étape en alternance, en fonction d'un mécanisme de pool d'événements d'achèvement. |
Nœuds d'histoire |
|
Événements différés |
Dessinez une transition automatique et modifiez le type de transition en interne. Type « defer(); » dans le champ « Effet » pour la transition. |
Références des points de connexion |
Une référence de point de connexion représente une utilisation (dans le cadre d'un State de sous-machine) d'un point d'entrée/sortie défini dans la Statemachine référencée par l' State de sous-machine. Les références de point de connexion d'un State de sous-machine peuvent être utilisées comme sources et cibles de transitions. Elles représentent des entrées ou des sorties de la Statemachine référencée par l' State de sous-machine. |
Comportements State |
Les comportements State « entrée », « doActivity » et « sortie » sont définis comme des opérations sur un State . Par défaut, vous saisissez le code qui sera utilisé pour chaque comportement dans le champ Panneau 'Code' de la fenêtre Propriétés pour l'opération Comportement. Note que vous pouvez modifier cela pour saisir le code dans le panneau 'Comportement', en personnalisant le gabarit de génération. Le comportement « doActivity » généré sera exécuter jusqu'à son terme avant de continuer. Le code n'est pas simultané avec d'autres comportements d'entrée ; le comportement « doActivity » est implémenté comme comportement « exécuter dans la séquence après l'entrée ». |
Références à des comportements dans d'autres contextes/classes
Si l' State de la sous-machine fait référence à des éléments de comportement en dehors du contexte ou de la classe actuels, vous devez ajouter un connecteur <<import>> de la classe de contexte actuelle à la classe de contexte du conteneur. Par exemple :
State de sous-machine S1 de la classe 1 fait référence à Statemachine ST2 de la classe 2
Par conséquent, nous ajoutons un connecteur <<import>> de la classe 1 à la classe 2 afin que la génération de code Statemachine Exécutable génère correctement le code pour State sous-machine S1. (Sur la classe 1, cliquez sur la flèche Quick Linker et faites-la glisser vers la classe 2, puis sélectionnez « Importer » dans le menu des types de connecteurs.)
Réutilisation d'artefacts Statemachine Exécutable
Vous pouvez créer plusieurs modèles ou versions d'un composant à l'aide d'un seul artefact exécutable. Un artefact représentant une résistance, par exemple, peut être réutilisé pour créer à la fois une résistance à feuille et une résistance à fil enroulé. Cela est susceptible d'être le cas pour des objets similaires qui, bien que représentés par le même classificateur, présentent généralement des états exécuter différents. Une propriété nommée 'resistorType' prenant la valeur 'wire' plutôt que 'foil' peut être tout ce qui est requis du point de vue de modélisation . Les mêmes Statemachines peuvent ensuite être réutilisées pour tester les changements de comportement qui pourraient résulter de la variation de l'état d'exécution. Voici la procédure :
Étape |
Action |
---|---|
Créer ou ouvrir diagramme de composants |
Ouvrez un diagramme de composant sur lequel travailler. Il peut s'agir du diagramme qui contient votre artefact d'origine. |
Sélectionnez l' Statemachine Exécutable à copier |
Recherchez maintenant l'artefact Statemachine Exécutable original dans la fenêtre Navigateur . |
Créer le nouveau composant |
Tout en maintenant la touche enfoncée, faites glisser l'artefact d'origine sur votre diagramme . Deux questions vous seront posées. La réponse à la première question est Object et à la seconde, Tout. Renommez l'Artefact pour le différencier de l'original, puis modifiez ses valeurs de propriété. |