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

Diagrammes de Classes Discussion :

[Débutant] Choix entre attribut par relation & aggrégation/composition ?


Sujet :

Diagrammes de Classes

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut [Débutant] Choix entre attribut par relation & aggrégation/composition ?
    Bonjour,

    je m'initie actuellement à UML 2, et je voudrais grâce vos lumières m'assurer que je saisis bien ce que je lis.

    On dispose, dans un diagramme de classes, de deux manières pour faire apparaître les attributs : en ligne ou par relation. Dans le deuxième cas, peut-on assimiler cette relation à une composition ou une aggrégation ? Si la sémantique est la même, dans quel cas doit-on utiliser l'une ou l'autre ?

    A ce point de ma réflexion, je suppose que, pour une classe donnée, durant la phase d'analyse on privilégie les relations d'aggrégation/composition, plus lisibles, et que durant la phase de conception, on utilise plutôt les attributs par relation, du fait qu'ils apportent plus de détail sur l'implémentation de la classe. Suis-je dans le vrai, ou complètement à l'ouest ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 545
    Par défaut
    Bonjour,

    je ne sais pas si tu voulais dire 'relation' ou 'en ligne' pour la phase de conception (tu as dis deux fois 'relation' mais la tournure de la phrase semble insiter à l'autre choix ), mais cela n'est pas très important.

    Pour moi les diagrammes sont les mêmes dans les deux phases, le fait d'avoir une composition ou une aggrégation est important dans les deux phases. De plus, suivant comment on travaille et/ou les cas, les classes créées lors de la phases d'analyse peuvent toujours être présentes (au sens 'pointeur', ie pas 'recopiées') en phase de conception, et dans ce cas une relation ne devient pas un attribut 'en ligne'.

    Un modeleur qui tient la route doit permettre de générer le code désiré pour les relations et les attributs 'en ligne'. Bref ta discrimination sur le fait qu'ils apportent plus de détail sur l'implémentation de la classe ne devrait pas exister, mais peut être que le modeleur que tu utilises à de telles limitations ?

    Lorsque la valeur d'un attribut n'est pas une classe mais un entier par exemple, tu n'as pas le choix et tu dois utiliser des attributs 'en ligne' et non des relations. Dans les autres cas je prefère les relations car elles sont plus visibles dans les diagrammes, c'est pour cela que le reverse de http://bouml.fr les privilégie par rapport aux attributs 'en ligne'.
    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 chevronné Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Par défaut
    UML 2 distingue 3 types de relation entre 2 classes (sans parler d'héritage).
    agrégation - composition - simple (ni agreg ni compo).
    Les attributs peuvent se trouver soit dans une classe soit dans une classe association (suivant leur dépendance avec la ou les classes).
    Exemple : Classes Etudiant et Matière, attribut moyenne.
    Si tu veux stocker la moyenne générale de l'étudiant : dans la classe Etudiant,
    si c'est la moyenne de la matière : dans la classe Matiere, si c'est la moyenne de l'étudiant pour une matière donnée : dans la classe-asso qui relie Etudiant à Matiere.

  4. #4
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Par défaut
    Je ne suis pas sur de bien comprendre ce que tu entends par attribut en ligne ou par relation. Si j'en crois la reponse de Christian Soutou, tu parles d'attributs de classe (en ligne) et d'attributs de classe d'association (par relation) et dans ce cas l'explication que donne Christian devrait etre claire.

    Ensuite comme l'a indique Bruno, il n'y a pas a retoucher ton diagramme de quelque maniere que ce soit en passant a la conception, puisque normalement le modeleur se charge de tout traduire dans ton langage prefere. De plus une classe d'association et une classe composite ou agregee n'ont pas la meme semantique, ce n'est donc pas la bonne facon de proceder.

    Une precision supplementaire: effectivement UML distingue 3 types de relation. Cependant tous les types ne sont pas representables avec par les langages objet actuels, ainsi agregation et relation (simple) sont implementees de la meme maniere.

  5. #5
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Merci pour vos explications, qui clarifient par la même occasion d'autres aspects qui étaient restés un peu nébuleux pour moi.

    Je n'ai peut-être pas été assez explicite par ce que j'entendais par attribut en ligne et attribut par relation ; en fait, j'ai repris mot pour mot la terminologie employée dans "UML 2 en concentré" de chez O'Reilly, qui est mon ouvrage de référence actuel. Dans cet ouvrage, un attribut en ligne est un attribut figurant dans le compartiment ad hoc de la classe. Un attribut par relation est lui symbolisé par une relation d'association, et n'a pas de rapport avec une classe d'association. Ainsi, pour dire qu'une Automobile a un attribut moteur de type Moteur, on modélisera comme ceci :


    En fait, mon interrogation première portait sur la subtile différence sémantique entre cette représentation et celle d'une aggrégation ; j'imagine qu'elle porte sur le cycle de vie de l'objet instance de Moteur ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 545
    Par défaut
    Citation Envoyé par GrandFather
    j'imagine qu'elle porte sur le cycle de vie de l'objet instance de Moteur ?
    Absolument, cela permet d'indiquer si la vie de l'objet pointe est liée a la vie du contenant.

    Comme le dit Nip, cette distinction est ou non visible au niveau code en fonction des langages :
    • en Java on ne voit rien car on ne manipule que des pointeurs,
    • en C++ si tu as T * x; tu ne sais pas, mais on le sait avec T x;


    En tout cas, meme si le langage utilise le meme code pour des cas differents, il est fort conseille d'utiliser quand meme les representations UML differentiant les differents cas.
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/05/2011, 18h05
  2. [XSD] choix entre attributs et elements
    Par ama-deo dans le forum Valider
    Réponses: 6
    Dernier message: 08/03/2010, 20h21
  3. Choix entre MAVEN et ANT pour un débutant
    Par masterboy01 dans le forum Maven
    Réponses: 5
    Dernier message: 15/09/2009, 02h23
  4. [Modèle Relationnel] Choix entre attribut ou entité
    Par looping dans le forum Schéma
    Réponses: 4
    Dernier message: 03/04/2009, 16h07
  5. Réponses: 18
    Dernier message: 04/04/2006, 14h31

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