IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BOUML Discussion :

Problème génération de code : classe template et import


Sujet :

BOUML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut Problème génération de code : classe template et import
    Bonjour,

    Bruno, tu vas encore me dire que c'est écrit quelque part dans la doc...
    mais j'ai deux problèmes :

    - avec la génération de code Java : pour une association, le rôle d'une classe template n'est pas correctement définit lors de la génération de code (pas de <T> après le nom de la classe)

    - avec les imports Java : une classe définie comme "external" (ex : les classes du package java.util) n'est pas importée lors de la génération de code, même avec une dépendance stéréotypée "import"

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par behess Voir le message
    - avec la génération de code Java : pour une association, le rôle d'une classe template n'est pas correctement définit lors de la génération de code (pas de <T> après le nom de la classe)
    je ne comprends pas, il faudrait un exemple de ce qui est défini sous Bouml et du code attendu

    Citation Envoyé par behess Voir le message
    - avec les imports Java : une classe définie comme "external" (ex : les classes du package java.util) n'est pas importée lors de la génération de code, même avec une dépendance stéréotypée "import"
    les dépendances import ne s'appliquent pas aux classes externes, pour celles-ci il faudrait que je fasse comme pour C++

    pour le moment il suffit de remplacer ${name} dans la définition de la classe externe par java.util.{name}
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    il faudrait un exemple de ce qui est défini sous Bouml et du code attendu
    Sous BOUML j'ai créé une Interface<O> avec le stéréotype « interface » et une Maclasse<T> qui implémente l'interface en mettant O->T. Il y a également une agrégation entre Maclasse et Interface avec un rôle "monInterface" en bout.

    C'est ce rôle "monInterface" qui ne prend pas le type "Interface<O>".

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    si j'ai bien compris le code voulut est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    interface Interface<O> {
    }
    
    class Maclasse<T> implements Interface<T> {
      protected Interface<T> monInterface;
    }
    (j'ai remplacé Interface<O> par Interface<T> au niveau de l'attribut vu le début de la discussion, et le fait que Interface<O> aurait été invalide)

    rien n'impose que l'actual soit T dans la définition de l'attribut, le générateur de code ne peut donc de lui même produire un tel code, il faut le dire explicitement au niveau de la définition de la relation
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Ok tu as bien compris ce qui devrait être généré.

    rien n'impose que l'actual soit T dans la définition de l'attribut, le générateur de code ne peut donc de lui même produire un tel code, il faut le dire explicitement au niveau de la définition de la relation
    Comment faire ? Au niveau de la relation on ne peut définir que le rôle, pas le type / actual à utiliser...

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par behess Voir le message
    Comment faire ? Au niveau de la relation on ne peut définir que le rôle, pas le type / actual à utiliser...
    il y a plusieurs possibilités, par exemple dans la définition de la relation remplacer ${type} par ${type}<T> (c'est ce qu'aurait fait le reverse)
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    rien n'impose que l'actual soit T dans la définition de l'attribut, le générateur de code ne peut donc de lui même produire un tel code, il faut le dire explicitement au niveau de la définition de la relation
    Comme les génériques sont gérés par ailleurs, je pensais que la non généricité des rôle était un oubli (mais c'est volontaire plutôt si j'ai bien compris).

    il y a plusieurs possibilités, par exemple dans la définition de la relation remplacer ${type} par ${type}<T> (c'est ce qu'aurait fait le reverse)
    Je vais le définir comme ça donc.




    pour le moment il suffit de remplacer ${name} dans la définition de la classe externe par java.util.{name}
    donc pas d'import, ok

    les dépendances import ne s'appliquent pas aux classes externes, pour celles-ci il faudrait que je fasse comme pour C++
    c'est donc au programme ? chouette

  8. #8
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par behess Voir le message
    Comme les génériques sont gérés par ailleurs, je pensais que la non généricité des rôle était un oubli (mais c'est volontaire plutôt si j'ai bien compris).
    encore une fois, comment le générateur pourrait-il deviner qu'il doit produire Interface<T> plutôt que Interface<int> par exemple ?

    je n'ai pas mis l'option boule de cristal dans Bouml ...
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Non mais tu aurais pu proposer une option au niveau du rôle pour définir le type exact... m'enfin

  10. #10
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par behess Voir le message
    Non mais tu aurais pu proposer une option au niveau du rôle pour définir le type exact... m'enfin
    les possibilités sont plus vastes que cela :
    • et si on veut seulement produire le nom du type, quelque soit la raison?
    • et si on veut séparer les actuals par des espaces, ou des sauts de ligne, ou autre ?
    • et s'il y a plusieurs actuals ?

    sauf dans de très rares cas où cela aurait rendu les choses difficilement utilisable, le code généré est spécifié explicitement, permettant à l'utilisateur de produire exactement ce qu'il veut au lieu de subir mes choix
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  11. #11
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    "La liberté se monnaie par des responsabilité" (Djensépuki)

    C'est une constantes dans les applications. Si l'utilisateur dispose d'une liberté, cela le force à prendre la responsabilité du choix, à s'exprimer pour formuler ce qu'il veut.

    Si on automatise la chose, l'utilisateur a moins de responsabilité mais moins de liberté aussi.

    Si on désire, après automatisme, de permettre de faire soit ceci, soit cela, alors il faut demander à l'utilisateur de choisir
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  12. #12
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par behess Voir le message
    - avec les imports Java : une classe définie comme "external" (ex : les classes du package java.util) n'est pas importée lors de la génération de code, même avec une dépendance stéréotypée "import"
    j'ai finalement étendu les dépendances import aux classes externes dans la version 4.4
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Comme quoi les rêves les plus fous peuvent se réaliser !

    Merci Bruno

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    L'import des classes externe fonctionne bien

    J'ai un autre problème que je n'arrive pas à résoudre...

    J'ai une agrégation entre une classe stéréotypée « interface » et une classe qui l'implémente (pour info : classe abstraite).

    Voici ce qu'on trouve dans définition de la relation :

    ${comment}${@}${visibility}${static}${final}${transient}${volatile}${type} ${name}${value};
    public ${type} get${type}(){
    //TODO:customize getter
    return ${name};
    }
    public void set${type}(${type} ${name}){
    //TODO:customize setter
    this.${name}=${name};
    }
    génération Java de la relation dans BOUML :

    private EventHandlable eventHandler=null;
    public EventHandlable getEventHandlable(){
    //TODO:customize getter
    return eventHandler;
    }
    public void setEventHandlable(EventHandlable eventHandler){
    //TODO:customize setter
    this.eventHandler=eventHandler;
    }
    C'est nickel.

    Résultat dans le fichier de la classe qui implémente l'interface :


    import org.behess.ClasseMachin;
    import org.behess.events.EventHandlable;

    [...]

    private org.behess.events.EventHandlable eventHandler=null;
    public org.behess.events.EventHandlable getorg.behess.events.EventHandlable(){
    //TODO:customize getter
    return eventHandler;
    }
    public void setorg.behess.events.EventHandlable(org.behess.events.EventHandlable eventHandler){
    //TODO:customize setter
    this.eventHandler=eventHandler;
    }
    Le nom du package s'insère dans le type quand on fait la génération, mais pas dans le code généré directement dans BOUML.

    Ce qu'on voudrait c'est avoir la même chose en généré que dans BOUML...

    A noter : il existe une dépendance stéréotypée « import » entre la classe qui implémente l'interface et cette dernière.

    Est-ce un bug ?
    Y a-t-il un moyen de dire à BOUML de ne pas utiliser le type canonique (avec espace de nom) mais le type court (genre ${short_type}) ?

  15. #15
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par behess Voir le message
    Le nom du package s'insère dans le type quand on fait la génération, mais pas dans le code généré directement dans BOUML.
    en fait dans le dialogue sous bouml je ne m'embête pas à préfixer si besoin les noms de classes par leur package

    Est-ce un bug ?
    non

    Y a-t-il un moyen de dire à BOUML de ne pas utiliser le type canonique (avec espace de nom) mais le type court (genre ${short_type}) ?
    non plus, il ne faut pas utiliser ${type} dans un nom

    pourquoi avoir utilisé get${type} au lieu de get${name} ou get${Name} ?

    sinon, pourquoi faire les getter/setter à la main alors qu'on peut demandé à Bouml de le faire ?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    en fait dans le dialogue sous bouml je ne m'embête pas à préfixer si besoin les noms de classes par leur package
    Ok : dans BOUML on a une génération "bridée" par rapport au générateur de code.

    Il serait quand même bien d'avoir a sa disposition un outil tel que ${short_type} (ou autre), ça pourrait servir, non ?

    pourquoi avoir utilisé get${type} au lieu de get${name} ou get${Name} ?
    C'est une bonne question, merci de l'avoir posée.
    Au départ je crois l'avoir configuré de cette manière parce que get${name} n'allait pas (il manquait une majuscule après "get") et que ${Name} ne fonctionne pas (il est conservé tel que).

  17. #17
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par behess Voir le message
    Au départ je crois l'avoir configuré de cette manière parce que get${name} n'allait pas (il manquait une majuscule après "get") et que ${Name} ne fonctionne pas (il est conservé tel que).
    c'est vrai, ${Name} est géré au niveau des opérations (et artifacts) mais pas au niveau relation/attribut

    reste la question relative a l'utilisation des getter/setter
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par bruno_pages
    reste la question relative a l'utilisation des getter/setter

    Citation Envoyé par bruno_pages
    sinon, pourquoi faire les getter/setter à la main alors qu'on peut demandé à Bouml de le faire ?
    Mais j'ai utilisé les setters/getters par défaut. C'est là le problème : ils ne gèrent pas ${Name} apparemment. C'est pour ça que j'avais mis ${type} dans la définition par défaut...

  19. #19
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    je parle des getter/setter fabriqués par Bouml via le menu, ceux-ci sont créés en dehors de la définition de la relation et supportent ${Name}
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    D'acccccccccccccccord

    Je n'avais pas saisi pardon

    Le problème c'est que je défini un rôle dans ma relation et que je ne peux pas définir d'attribut ayant le même nom de rôle dans la classe.

    Je comprends donc que je devrais "bidouiller" un faux nom de rôle (ex : anEventHandler), bloquer la génération de la relation et utiliser un attribut comme "véritable" nom : (ex : eventHandler), plus générer des get/setter à partir de cet attribut.

    Ok ça peut corriger le problème, mais ce n'est pas vraiment très propre, non ?
    ça serait quand même mieux que la relation puisse gérer {$Name}

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [TALEND 4] Problème génération de code
    Par nicolep dans le forum Installation, migration et administration
    Réponses: 8
    Dernier message: 09/06/2011, 16h29
  2. Génération de code par templates [ G++ ]
    Par Zenol dans le forum C++
    Réponses: 4
    Dernier message: 13/02/2011, 23h38
  3. [RTW] Problème génération de code
    Par sergent garcia dans le forum Simulink
    Réponses: 0
    Dernier message: 31/10/2008, 13h18
  4. Problème avec vector de classe template :(
    Par coyotte507 dans le forum Langage
    Réponses: 7
    Dernier message: 16/04/2008, 12h40
  5. Problème génération de code
    Par hed62 dans le forum BOUML
    Réponses: 4
    Dernier message: 04/11/2007, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo