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

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : décembre 2011
    Messages : 57
    Points : 42
    Points
    42

    Par défaut Du diagramme de classes UML au programme Java

    Bonjour,

    je sollicite la communauté car je suis un peu largué entre le passage du diagramme de classe UML au code Java.

    j'ai les cas de figures de l'image ci-dessous et le code Java associé mais je ne comprends pas toutes les lignes

    si je reprend classe par classe pour ressayer de comprendre chaque ligne de code

    Classe0 est une interface qui liste les méthodes sans le corps de la méthode d'où le point-virgule à la fin de chaque méthode. Les corps de ces méthodes devront être écrits dans d'autres classes. D'après le code, la méthode1 est décrite dans la classe1 qui "implements" la classe0 (flèche en pointillés) c'est assez logique.
    Par contre la méthode2 est décrite dans la Classe2 mais je ne vois pas comment on peut le savoir sur le diagramme. Est-ce parce que la Classe1 est abstraite ?

    Classe1 est une classe abstraite (mot clé <<Abstract>>) qui implémente la classe0 (flèche pointillés). Cette Classe1 possède des attributs protégés (#) dont un est un attribut de classe (souligné et mot clé static). Classe1 voit Classe3 d'où un attribut de classe Classe3 monC3 (cardinalité de l'association : 1). Classe1 possède par ailleurs 3 méthodes public (+) dont une (méthode3) est abstraite (mot clé <<Abstract>>). méthode1 ne renvoie rien (void) et prend un String en paramètre.
    Je ne comprends pas la ligne idClasse1 = nombreObjets++;

    Classe2 est une classe fille de Classe1 dont elle hérite (flèche pleine et mot clé extends). Classe2 voit Classe4 d'où un attribut de classe Classe4 monC4 (cardinalité de l'association : 1). Classe2 possède un constructeur (Classe2 même nom que la classe) qui prend en paramètres un objet Classe3 et un objet Classe4). La méthode3 qui était abstraite dans Classe1 est rédigée dans Classe2.
    Par contre, pourquoi methode2 de Classe0 est rédigée ici ?

    Classe 3 possède 2 attributs privés (-) dont un est un attribut de classe (souligné et mot clé static). Classe3 possède également une méthode de classe (soulignée) public (+) getNombreClasses3(). Classe3 voit Classe1 d'où un attribut de type Collection<Classe1> mesC1s (cardinalité : *).
    Je ne comprends pas les lignes mesClasses1 = new ArrayList<Classe1>(); et id = nombreObjets++; correspondant au constructeur.

    Classe4 possède 2 attributs privés (-) dont un est un attribut de classe (souligné et mot clé static). Classe4 possède une méthode public createObjet6 qui prend en argument un int et un objet de type Classe5. Classe4 voit Classe1 d'où un attribut de type Collection<Classe1> mesC1s (cardinalité : *).
    De même Classe4 voit Classe5 pourtant il n'y a pas d'attribut de type Collection<Classe5> mesC5s (cardinalité : *) mais attribut de type Collection<Classe6> mesC6s relative à la classe association Classe6 ? Pourquoi ?
    Je ne comprends pas les lignes mesClasses1 = new ArrayList<Classe6>(); mesClasses6 = new ArrayList<Classe6>(); et id = nombreObjets++; correspondant au constructeur.
    Je ne comprends pas non plus la méthode createobjet6.



    Classe5 possède 2 attributs privés (-) dont un est un attribut de classe (souligné et mot clé static). Classe5 possède une méthode public addC6 qui prend en argument un objet de type Classe6.
    De même que pour Classe4, Classe5 voit Classe4 pourtant il n'y a pas d'attribut de type Collection<Classe4> mesC4s (cardinalité : *) mais attribut de type Collection<Classe6> mesC6s relative à la classe association Classe6 ? Pourquoi ? Classe5 possède une méthode addC6 public qui prend en argument un objet de type Classe6 : cette méthode ajoute un objet (comme son nom semble l'indiquer) à la collection mes C6s en utilisant la méthode .add de l'interface Collection. Je ne comprends pas les lignes mesClasses6 = new ArrayList<Classe6>(); et id = nombreObjets++; correspondant au constructeur.

    Enfin, Classe6 est donc une classe associative entre les CLasse4 et Classe5. Elle possède un attribut privé et une méthode public le constructeur, Classe6 qui prend en paramètre un int et 2 objet de type Classe4 et Classe5.
    Je ne comprends pas la ligne c5.addObjet6(this); Ne devrait-il pas y avoir également un équivalent c4.addObjet6(this) ?


    cela fait beaucoup de questions, d'avance merci pour votre aide

    d'avance merci pour votre aide

    Nom : Sans titre.png
Affichages : 60
Taille : 78,7 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    public interface Classe0 {
      
    public void methode1(String nom);
    public void methode2(Color color);
      
    }
      
     
    public abstract class Classe1 implements Classe0 { <br>protected int id ;
    protected static int nombreObjets = 0;
    private Classe3 monC3;
     
    public void methode1(String s){}
     
    abstract public boolean methode3() ;
     
    public Classe1(Classe3 c){
      System.out.println("constructeur de Classe1 avec argument");
      monC3 = c;
      idClasse1 = nombreObjets++;
    }   }
     
    public class Classe2 extends Classe1 {
    private Classe4 monC4;
     
    public Classe2(Classe3 c3, Classe4 c4) {
      super(c3);
      monC4=c4;
      System.out.println("constructeur de Classe2");
     
    }
     
      public void methode2(Color color) {} <br>  public boolean methode3() {return true;}
      
    }
      
    public class Classe3 {
     
      private int id ;
      private static int nombreObjets = 0;
      private Collection<Classe1> mesClasses1;
     
      public static int getNombreClasses3() {
       return nombreObjets;
      }
     
      public Classe3() {
     
      System.out.println("constructeur de Classe3");
      mesClasses1 = new ArrayList<Classe1>();
      id = nombreObjets++;
     
    }   }
     
     
    public class Classe5 {
     
      private int id ;
      private static int nombreObjets = 0;
      private Collection<Classe6> mesC6s;
     
      public Classe5() {
     
       System.out.println("constructeur de Classe5");
       mesC6s = new ArrayList<Classe6>();
       id = nombreObjets++;
    }
      public void addObjet6(Classe6 c6) {
        mesC6s.add(c6);
    }   }
     
     
    public class Classe6 {
     
      private int att6;
      private Classe4 monC4;
      private Classe5 monC5;
     
      public Classe6(Classe4 c4, Classe5 c5, int i){
     
      System.out.println("constructeur de Classe6, att6 : "+i);
      monC4 = c4; monC5 = c5; att6=i;
      c5.addObjet6(this);
    }   }
     
     
    public class Classe4 {
     
      private int id ;
      private static int nombreObjets = 0;
     
      private Collection<Classe1> mesC1s;
      private Collection<Classe6> mesC6s;
     
      public Classe4() {
      System.out.println("constructeur de Classe4");
     
      mesC1s = new ArrayList<Classe1>();
      mesC6s = new ArrayList<Classe6>();
      id = nombreObjets++;
    }
     
    public void createObjet6(Classe5 c5, int i) { <br>  Classe6 c6 = new Classe6(this, c5, i); <br>  mesC6s.add(c6);
    }   }

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 3 468
    Points : 6 568
    Points
    6 568

    Par défaut

    Bonjour,

    En effet il y a beaucoup d'incohérences entre le diagramme de classe et le code associé, j'avais commencé par vous répondre point par point puis j'ai abandonné vue l'état des lieux, le mieux que vous ayez à faire est de simplement laisser tomber cet exemple qui ne mérite pas d'y consacrer du temps.

    Si vous avez des doutes/questions concernant la génération Java (ou autre langage) à partir d'un modèle UML, le mieux que vous ayez à faire c'est d'utiliser un modeleur UML avec la génération Java et de regarder ce qu'il fait dans différents cas. Si votre modeleur a aussi un reverse vous pouvez faire l'inverse, c'est à dire écrire des classes Java à ma main et passer le reverse dessus pour voir comment elles sont automatiquement modélisées.
    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 du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : décembre 2011
    Messages : 57
    Points : 42
    Points
    42

    Par défaut

    vraiment ?
    c'est pourtant un document de mon école de formation (IUT informatique)... !
    votre idée est astucieuse mais je ne suis pas sûr d'avoir suffisamment de connaissance pour m'en sortir
    je suis en formation depuis début septembre et débute donc en Java et UML

    merci de votre réponse

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 3 468
    Points : 6 568
    Points
    6 568

    Par défaut

    Là cela fait franchement peur, sauf si les erreurs ont été introduites exprès pour voir qui les trouve, mais j'y crois pas trop

    En plus le diagramme est visiblement fait à la main, il n'a pas été produit par un modeleur UML, et je ne parle pas du mélange français/anglais au niveau des noms
    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 du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : décembre 2011
    Messages : 57
    Points : 42
    Points
    42

    Par défaut

    non en principe pas d'erreurs...
    je ne trouve pas de cours abordable UML/code Java

    ce qui me perturbe le plus c'est la classe associative Classe6
    peut-être que vous pourriez m'expliquer le code qui correspondrait au diagramme ? je n'ai encore jamais utilisé les outils de génération de code ni de production de diagramme UML...

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 3 468
    Points : 6 568
    Points
    6 568

    Par défaut

    Citation Envoyé par OZ1977 Voir le message
    non en principe pas d'erreurs...
    Vous deviez parler des erreurs que vous avez vu à votre professeur

    Citation Envoyé par OZ1977 Voir le message
    je ne trouve pas de cours abordable UML/code Java
    Si UML fait vraiment parti de votre formation il semble fou qu'un modeleur ne soit pas utilisé dans vos cours/TPs


    Citation Envoyé par OZ1977 Voir le message
    ce qui me perturbe le plus c'est la classe associative Classe6
    peut-être que vous pourriez m'expliquer le code qui correspondrait au diagramme ?
    Il y a plusieurs façons d'implémenter une classe-association, c'est du cas par cas, c'est pour cela que je ne fait rien automatiquement pour elles dans BoUML
    Ce qui est souvent fait c'est que la classe implémente aussi la relation, comme vous pouvez le voir dans le code de Classe6 celle-ci a les attributs monC4 et monC5 pour supporter la relation entre Classe4 et Classe5, Classe4 n'a pas d’attribut/opération supportant des Classe5 mais des Classe6, de même Classe5 n'a pas d’attribut/relation supportant Class4 mais des Classes6

    Une classe association c'est une vue de l'esprit, le diagramme de classe aurait pu tout aussi-bien ne pas en utiliser et relier Class4/5 à Classe6, mais la classe association indique rapidement que c'est plus que cela
    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 du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : décembre 2011
    Messages : 57
    Points : 42
    Points
    42

    Par défaut

    ce que j'ai du mal à saisir c'est que l'on considère que la classe associative Classe6 voit les Classe4 et Classe5
    s'agissant de cardinalités * pour mesC5s et mesC4s pourquoi n'a-t-on pas les attributs suivants dans Classe6 :
    private Collection<classe4> mesC4s;
    private Collection<classe5> mesC5s;

    au lieu de cela, on a les attributs suivant qui traduisent une cardinalité 1
    private Classe4 monC4;
    private Classe5 monC5;

    à partir du diagramme, comment je peux en déduire la ligne c5.addObject6(this); ?
    et pourquoi pas un c4.addObject6(this); ?
    en d'autres termes, qu'attend-on de Classe6 et comment cela se traduit-il en Java ?
    en écrivant cela je me rends comte que je suis largué !

  8. #8
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 3 468
    Points : 6 568
    Points
    6 568

    Par défaut

    Citation Envoyé par OZ1977 Voir le message
    ce que j'ai du mal à saisir c'est que l'on considère que la classe associative Classe6 voit les Classe4 et Classe5
    s'agissant de cardinalités * pour mesC5s et mesC4s pourquoi n'a-t-on pas les attributs suivants dans Classe6 :
    private Collection<classe4> mesC4s;
    private Collection<classe5> mesC5s;

    au lieu de cela, on a les attributs suivant qui traduisent une cardinalité 1
    private Classe4 monC4;
    private Classe5 monC5;
    c'est normal, pour chaque couple d'instance Classe4-Classe5 relié il y une instance de classe-association dédiée, comme Classe6 supporte intégralement la classe-association chaque instance de Classe6 est reliée à une instance de Classe5 et une de Classe4, la multiplicité * est vers les Classe6 à partir de Classe4 et Class5

    Citation Envoyé par OZ1977 Voir le message
    à partir du diagramme, comment je peux en déduire la ligne c5.addObject6(this); ?
    et pourquoi pas un c4.addObject6(this); ?
    en d'autres termes, qu'attend-on de Classe6 et comment cela se traduit-il en Java ?
    Classe6 implémente la classe-association, c'est à dire Classe6 et la partie relation
    Dans le code ce n'est en effet pas symétrique, le point de départ c'est createObjet6() définie dans Classe4, c'est souvent le cas pour les relations bi-directionnelles : tout dépend du moment ou chacune des instances reliées est créée

    Citation Envoyé par OZ1977 Voir le message
    en écrivant cela je me rends comte que je suis largué !
    Ce n'est pas étonnant, les classes-associations ce n'est pas trivial, et là vous cumuler les difficultés car la relation de la classe-association est en plus bi-directionnelle
    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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2016, 17h54
  2. Réponses: 1
    Dernier message: 01/04/2010, 18h00
  3. Dessiner des diagrammes de classe dans un programme Java
    Par ThE_LaSt dans le forum Eclipse Java
    Réponses: 10
    Dernier message: 03/06/2009, 18h49
  4. Implémentation Java d'un diagramme de classes UML
    Par fabrisss dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2008, 15h28

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