Où est le code généré d'un diagramme d'états ?

Please use this forum for open discussions about Bouml.
Merci d'utiliser ce forum pour des discussions ouvertes à propos de Bouml.

Où est le code généré d'un diagramme d'états ?

Postby bayard » Tue 2 Jan 2018 14:28

Bonjour

Durant, mes vacances, j'ai découvert que Bouml était passé dans le domaine du "Free". Merci pour cela.

Je suis sous Ubuntu 16.04 LTS et je suis parti de bouml-7.3-gentoo.x86_64.tar.gz.

Je l'ai installé.
Est-ce que le générateur de code C (ou python) fonctionne avec les "states machine" diagrammes d'états ? Si oui: où est généré le code s'il vous plait ?
Lorsque je clique sur le menu generate C: j'ai dans la trace "Generation done : 0 warnings, 0 errors". Mais je ne trouve pas de code.

Cordialement
bayard
 
Posts: 7
Joined: Tue 2 Jan 2018 13:56

Re: Où est le code généré d'un diagramme d'états ?

Postby Bruno Pagès » Tue 2 Jan 2018 14:40

Bonjour
bayard wrote:Durant, mes vacances, j'ai découvert que Bouml était passé dans le domaine du "Free". Merci pour cela.

En fait il y est revenu, il le fut déjà de 2005 à 2011 (à cette époque je distribuais même les sources sous licence GPL)

bayard wrote:Est-ce que le générateur de code C (ou python) fonctionne avec les "states machine" diagrammes d'états ? Si oui: où est généré le code s'il vous plait ?
Lorsque je clique sur le menu generate C: j'ai dans la trace "Generation done : 0 warnings, 0 errors". Mais je ne trouve pas de code.

Le générateur des machines à états ne produit pas directement du code comme le ferait un générateur 'classique'. Il défini/met à jour des classes et leurs membres mais en ne prenant en compte que niveau C++, au final après une génération C++ de ces classes on obtient donc le code C++ correspondant aux machines à états. Vous n'aurez donc rien au niveau python à moins de modifier le générateur de machines à état, et pas plus en C puisque je produis des 'vraies' classes et non des struct par exemple.
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 547
Joined: Mon 20 Feb 2012 09:23
Location: France

Re: Où est le code généré d'un diagramme d'états ?

Postby bayard » Tue 2 Jan 2018 17:08

Merci pour l'information.
au final après une génération C++ de ces classes on obtient donc le code C++ correspondant aux machines à états

-> Dans le menu "Langages" J'ai indiqué que je voulais avoir dur C++, j'ai généré
"C++ generator release 5.2
Generation done : 0 warnings, 0 errors"

et j'ai le même souci: où est le code généré ?
bayard
 
Posts: 7
Joined: Tue 2 Jan 2018 13:56

Re: Où est le code généré d'un diagramme d'états ?

Postby Bruno Pagès » Tue 2 Jan 2018 17:16

Avez vous généré les classes support de votre machine à états via C++ state machine ? Si tel n'est pas le cas faites un clic droit sur votre machine à état et dans le sous menu "Tool" choisissez "c++ state machine", cela créera une classe (avec sous classes pour les sous états) ayant le même nom que votre machine à états

Ayant cette classe il faut dire dans quel fichier produire le code, la modélisation d'un fichier étant un artéfact vous devez associé un artéfact à la classe, et comme un artéfact c'est du déploiement vous devez avoir une vue de déploiement associée à la vue de classe contenant la classe supportant la machine à état pour simplifier les choses. Donc, si vous n''avez pas de vue de déploiement vous en créez une dans le package (qui est peut être votre projet) contenant votre vue de classe (elle pourrait aussi être dans un autre package, mais autant regrouper les choses pour être plus clair), ensuite vous éditez votre vue de classe et dans le 1er onglet vous indiquez la vue de déploiement. A noter que vous pouvez créé d'un coup une vue de classe et de déploiement associées avec "new class and deploymenet view" dans le menu d'un package). Maintenant vous faites un clic droit sur la classe implémentant la machine à état et vous choisissez "create source artifact"

Ayant le fichier (artéfact) il faut dire où générer celui-ci, cela peut être fait à différents endroits pour produire du code dans plusieurs répertoires, mais pour simplifier vous éditez les options de génération via un clic droit sur le projet (tout en haut du browser) et "edit génération settings", puis allez dans le dernier onglet de l'éditeur et indiquez où générer les sources c++

Maintenant vous pouvez lancer la génération C++ :D

Ca parait compliqué, mais en fait c'est logique et bouml n'a pas de boule de cristal pour deviner les choses, il faut donc lui donner quelques infos ;)

P.S. Ceci dit n'ayant que la classe dans sa vue de classes sans tout le reste vous pouvez demander à Bouml de créer la vue de déploiement associée et l'artéfact associé via "deploy classes" dans le sous menu Tools du menu de la vue de classes, mais j'ai préféré d'abord présenter comment ca marche pour expliquer le rôle des différents éléments
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 547
Joined: Mon 20 Feb 2012 09:23
Location: France

Re: Où est le code généré d'un diagramme d'états ?

Postby bayard » Tue 2 Jan 2018 18:00

Avez vous généré les classes support de votre machine à états via C++ state machine ? Si tel n'est pas le cas faites un clic droit sur votre machine à état et dans le sous menu "Tool" choisissez "c++ state machine", cela créera une classe (avec sous classes pour les sous états) ayant le même nom que votre machine à états

-> Lorsque je fait cela il m'indique l'erreur:
Error : several transitions from 'Ready' don't have guard


L'état Ready est connecté à un "Entry Point" et est relié à des "Receive signal Action" dont les transitions sont remplies.
Qu'est-ce qu'un "guard" je vous prie ?

Cordialement
bayard
 
Posts: 7
Joined: Tue 2 Jan 2018 13:56

Re: Où est le code généré d'un diagramme d'états ?

Postby Bruno Pagès » Tue 2 Jan 2018 18:03

bayard wrote:-> Lorsque je fait cela il m'indique l'erreur:
Error : several transitions from 'Ready' don't have guard


L'état Ready est connecté à un "Entry Point" et est relié à des "Receive signal Action" dont les transitions sont remplies.
Qu'est-ce qu'un "guard" je vous prie ?

Une garde est une condition, cela permet de savoir qu'elle transition permet de sortir de l'état Ready
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 547
Joined: Mon 20 Feb 2012 09:23
Location: France

Re: Où est le code généré d'un diagramme d'états ?

Postby bayard » Tue 2 Jan 2018 18:16

Et bien, étant donné que j'ai deux flêches qui sortent de mon état "Ready" je ne comprends pas cette erreur.
En dessous de l'icone Ready dans la vue hiérarchique, j'ai, à chaque fois, un nom dans les transitions dialogue.
Dans l'onglet UML -> le champs name est rempli, par contre les champs "stereotype" et "description" sont vierges.
Tout les autres champs des autres onglets sont vierges.
Notamment l'onglet "guard constraint" de l'onglet "C++".
bayard
 
Posts: 7
Joined: Tue 2 Jan 2018 13:56

Re: Où est le code généré d'un diagramme d'états ?

Postby Bruno Pagès » Tue 2 Jan 2018 18:32

Le nom d'une transition ne sert qu'à l'affichage dans les diagrammes, il n'a pas de valeur sémantique

Si vous avez plusieurs transitions à partir d'un état il faut un déterminant pour savoir laquelle sera activée, ce peut être le trigger (c'est à dire l'événement provoquant la transition) et/ou la condition. S'il n'y a pas de trigger il doit y avoir une condition => le message d'erreur puisque ce n'est pas le cas. Sans doute aurait-il été plus clair d'avoir un message d'erreur parlant aussi des triggers

Comme votre but est d'utiliser la génération C++ vous devez définir vos trigger/garde/... via l'onglet C++ et non pas via l'onglet Ocl

Donc éditez vos transitions et donner un nom de trigger et/ou une condition, si dans l'état S vous avez un trigger t sur une transition alors la (sous)classe S aura une opération appelée t représentant l’événement etc
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 547
Joined: Mon 20 Feb 2012 09:23
Location: France

Re: Où est le code généré d'un diagramme d'états ?

Postby bayard » Tue 2 Jan 2018 19:15

Bonsoir

Avez-vous une doc UML qui définisse les concept de "transition" et de "trigguer" s'il vous plait ?
Là, je ne comprends pas le concept.

J'ai rempli les 3 champs "Trigger", "Guard constraint" et "activity expression" et là j'ai une erreur:

Error : 'action' pseudo state must have one and only one transition


Quel est votre verdict ?
bayard
 
Posts: 7
Joined: Tue 2 Jan 2018 13:56

Re: Où est le code généré d'un diagramme d'états ?

Postby Bruno Pagès » Tue 2 Jan 2018 20:05

bayard wrote:Avez-vous une doc UML qui définisse les concept de "transition" et de "trigguer" s'il vous plait ?

le plus simple est de vous renvoyer à la http://www.omg.org/spec/UML/2.5/PDF, mais il faut bien avouer que comme toute spec elle n'est pas forcément facile à lire :?

bayard wrote:
Error : 'action' pseudo state must have one and only one transition



Les actions sont des pseudo states comme l'indique le message d'erreur, c.f. § 14.2.4.9 page 329 et la suite de la norme il s'agit d'une représentation graphique semblable à celle utilisée dans les activités.

Pour simplifier une telle action représente graphiquement ce qui en fait fait parti de la partie "activity" d'une transition, un peu comme vous aviez zoomé sur le trait de la transition entre 2 états et que l'action était apparue en sein de cette transition grâce au zoom. L'action faisant en fait parti d'une transition (réelle) son utilisation est limité, la (pseudo) transition qui en part + la (pseudo) transition qui y va + l'action elle-même sont des composantes de la (vraie) transition . Sans cette notation vous auriez seulement la transition d'un état à un autre et le code correspondant à l'action serait dans la partie activity

Il n'est donc pas possible d'avoir de trigger/garde/etc sur la (pseudo) transition partant de l'action, ni bien sur d'avoir plusieurs transitions qui en partent

En espérant que cela éclaire votre lanterne

Sinon pour info mon générateur ne prend en copte que les cas triviaux et les actions n'en font pas parti ...
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 547
Joined: Mon 20 Feb 2012 09:23
Location: France

Next

Return to Open discussions / Discussions ouvertes

Who is online

Users browsing this forum: No registered users and 1 guest