[RESOLU] IDE synch method

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

[RESOLU] IDE synch method

Postby johanjof » Tue 2 Jan 2018 11:55

Bonjour,

Je me pose la question de la bonne marche à suivre pour pouvoir utiliser Bouml tout au long du dévelopement d'un projet. Dans la documentation je note que :
* "C++ code reverse (...) doesn't allows to update already defined classes having at least one member."
* " If you use Bouml to generate C++ code it is not recommended to also use the C++ roundtrip because you will loose preprocessing forms and C functions and other forms not representable in UML. The roundtrip is mainly dedicated to update a model used for documentation purpose".
De ces deux points, il me semble que l'on ne peut travailler que dans Bouml, pour être sûr de ne rien perdre, notamment en utilisant la partie "body editor" pour écrire le code des fonctions membres.
Malheureusement, en utilisant le body editor, même dans un éditeur personnalisé, on ne dispose pas du contexte de la classe de la méthode en cours d'édition (autres membres et méthodes de la classe) et donc aucune auto-complétion associée, car bouml envoi à l'éditeur un fichier temporaire spécifique. Ceci rend le développement de code à partir de Bouml très délicat.
Ai-je raté quelque chose ?
Que me conseilleriez-vous ?

Merci beaucoup
Last edited by johanjof on Wed 3 Jan 2018 10:43, edited 1 time in total.
johanjof
 
Posts: 14
Joined: Mon 1 Jan 2018 19:49

Re: IDE synch method

Postby Bruno Pagès » Tue 2 Jan 2018 13:04

Bonjour,
johanjof wrote:* "C++ code reverse (...) doesn't allows to update already defined classes having at least one member."

En effet, le reverse créé les classes/artéfacts sans se demander s'ils existent déjà dans le modèle, contrairement au roundtrip qui met à jour le modèle en tenant compte de ce qui existe déjà
Le reverse c'est donc du one shot à partir d'un modèle à priori vide

johanjof wrote:* " If you use Bouml to generate C++ code it is not recommended to also use the C++ roundtrip because you will loose preprocessing forms and C functions and other forms not representable in UML. The roundtrip is mainly dedicated to update a model used for documentation purpose".

Oui, pour moi de façon dichotomique soit on modélise à la main et on utilise (peut être) la génération, soit on modifie le code (à l'extérieur de bouml) et on met à jour le modèle via des roundtrip.

Ceci dit il y a des utilisateurs qui font à la fois des rountrip et de la génération de code, mais en C++ c'est dangereux car les sources ne contiennent généralement pas que du C++ 'pure' et le roundtrip perd donc des informations qui ne seront donc pas produite dans une future génération. Ceci dit depuis que j'ai introduis (pour php) les "extra artifact definitions" il serait possible de ne rien perdre lord des reverse/roundtrip C++ comme c'est le cas pour Php ... mais je ne l'ai pas encore fait pour les autres langages

johanjof wrote:De ces deux points, il me semble que l'on ne peut travailler que dans Bouml, pour être sûr de ne rien perdre, notamment en utilisant la partie "body editor" pour écrire le code des fonctions membres.
Malheureusement, en utilisant le body editor, même dans un éditeur personnalisé, on ne dispose pas du contexte de la classe de la méthode en cours d'édition (autres membres et méthodes de la classe) et donc aucune auto-complétion associée, car bouml envoi à l'éditeur un fichier temporaire spécifique. Ceci rend le développement de code à partir de Bouml très délicat.
Ai-je raté quelque chose ?

Si vous faites une génération de code avant d'éditer le corps d'une opération avec un éditeur externe alors vous aurez votre contexte, la génération de code est ultra rapide mais peut être que votre éditeur/ide externe rend cela assez lourd

Il y a aussi une autre solution consistant à ne pas éditer/entrer le corps des opérations dans bouml mais toujours à l'extérieur, via l'option "Preserve operations's bodies" : vous définissez vos opérations (avec paramètres etc) dans bouml, vous générez le code (preserve operations's bodies positionné) et ce dernier contiendra des commentaires servant de marque, vous pouvez éditez/entrer à l'extérieur de bouml vos corps (en restant dans les marques) qui grâce aux marques seront préservés lors des générations futures
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 522
Joined: Mon 20 Feb 2012 08:23
Location: France

Re: IDE synch method

Postby johanjof » Tue 2 Jan 2018 13:52

les "extra artifact definitions" il serait possible de ne rien perdre lord des reverse/roundtrip C++ comme c'est le cas pour Php ... mais je ne l'ai pas encore fait pour les autres langages

Mon Bouml est configuré en langage C++ (dans la barre d'outil, "C++ management and default declaration/definition"). J'ai l'option "add extra definition" de disponible dans les artefacts. Cela n'a donc pas d'effet ? (je me demandais à quoi cette fonction pouvait correspondre). Il y a aussi "add extra member" dans les classes...

Si vous faites une génération de code avant d'éditer le corps d'une opération avec un éditeur externe alors vous aurez votre contexte, la génération de code est ultra rapide mais peut être que votre éditeur/ide externe rend cela assez lourd

Désolé, mais je pense ne pas avoir compris. Lorsque je fais bouton droit sur une méthode et "edit C++ body", puis edit body dans l'onglet C++, mon éditeur (qtcreator) s'ouvre comme ceci
Capture.PNG
Capture.PNG (16.45 KiB) Viewed 276 times

et la partie affichage de classe est vide. Je n'ai donc pas de contexte et le code a été généré au préalable (par ailleurs qtcreator ouvre une nouvelle fenêtre à chaque fois mais c'est un problème qui n'est pas du côté de Bouml).

La deuxième solution me paraît intéressante. La partie body dans Bouml est-elle remplie à partir du code ? C'est pour savoir dans quelle mesure Bouml est autoporteur et saurait regénerer un projet entier si le code est perdu.

Merci beaucoup pour votre aide
johanjof
 
Posts: 14
Joined: Mon 1 Jan 2018 19:49

Re: IDE synch method

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

johanjof wrote:J'ai l'option "add extra definition" de disponible dans les artefacts. Cela n'a donc pas d'effet ? (je me demandais à quoi cette fonction pouvait correspondre). Il y a aussi "add extra member" dans les classes...

Si si vous pouvez les utiliser, et ils seront pris en compte à la génération de code

Le reverse/roundtrip C++ n'utilisent pas les "extra artifact definition", ils utilisent les "extra class members" qui sont beaucoup plus vieux pour par exemple supporter la déclaration d'une opération/classes "friend" au sein d'une classe, ce genre de chose n'ayant pas d'équivalent en UML

Les "extra class member" permettent d'ajouter des définitions n'ayant pas d'équivalent en UML au sein des définitions de classe, quelque soit le langage cible

Les "extra artifact définition" permettent d'ajouter des définitions n'ayant pas d'équivalent en UML au sein des fichiers générés, quelque soit le langage cible

johanjof wrote:
Si vous faites une génération de code avant d'éditer le corps d'une opération avec un éditeur externe alors vous aurez votre contexte, la génération de code est ultra rapide mais peut être que votre éditeur/ide externe rend cela assez lourd

Désolé, mais je pense ne pas avoir compris. ...

En fait je me suis trompé, oubliez ce que j'ai dis, j'avais déjà en tête la seconde solution lorsque j'ai répondu :roll:

johanjof wrote:La deuxième solution me paraît intéressante. La partie body dans Bouml est-elle remplie à partir du code ? C'est pour savoir dans quelle mesure Bouml est autoporteur et saurait regénerer un projet entier si le code est perdu.

Si vous ne faites rien alors les corps des opérations seront vides dans bouml, avec effectivement un risque de perte si le code est perdu quel qu’en soit la raison.

C'est pour cela que j'ai fait roundtrip body vous permettant d'uploader dans bouml le corps des opérations, si vous avez perdu vos sources vous pouvez ainsi demander la génération de code (avec ou sans"preserve ...", mais à priori avec l'option pour rester dans la même configuration) et vous retrouvez vos opérations avec leur corps ... tels qu'ils l'étaient lors de votre dernier "roundtrip body", il peut donc y avoir de la perte si vous ne l'avez pas fait depuis longtemps
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 522
Joined: Mon 20 Feb 2012 08:23
Location: France

Re: IDE synch method

Postby johanjof » Tue 2 Jan 2018 15:47

Rountrip body, impeccable !
Et j'ai tout compris !

Je n'ai pas trouvé comment clôre le sujet.

(PS : détail de typo dans la doc au roundtrip body, l'option de preserve est dans" language" et non pas "miscellaneous". Merci pour le gros boulot).
johanjof
 
Posts: 14
Joined: Mon 1 Jan 2018 19:49

Re: IDE synch method

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

johanjof wrote:Je n'ai pas trouvé comment clôre le sujet.

oui il n'y a pas de bouton ou équivalent pour cela :(

la seule possibilité est d'éditer le premier message du sujet pour ajouter [résolu] ou équivalent dans le titre

johanjof wrote:(PS : détail de typo dans la doc au roundtrip body, l'option de preserve est dans" language" et non pas "miscellaneous".

Ah oui merci du signalement, je corrige

johanjof wrote:Merci pour le gros boulot).

A force d'ajouts Bouml devient un peu une usine à gaz,il m'est déjà arrivé de vouloir ajouter une feature déjà présente et que j'avais oublié :lol:
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 522
Joined: Mon 20 Feb 2012 08:23
Location: France


Return to Open discussions / Discussions ouvertes

Who is online

Users browsing this forum: No registered users and 1 guest

cron