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

avec Java Discussion :

Agrégation et composition


Sujet :

avec Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut Agrégation et composition
    Bonjour,

    Je voudrais savoir comment implémenter en Java les notions d'agrégation et composition.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Pour l'aggrégation, en Java c'est simple, tu en as une dès qu'une classe A référence une classe B. Il suffit d'écrire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class A {
      private B b;
     
      // [...]
     
      public B getB() {
        return b;
      }
    }
    pour avoir une aggrégation.

    Pour la composition, c'est moins évident en Java, puisque c'est une aggrégation forte (ou aggrégation par valeur). Si on reprend l'exemple ci-dessus, il y aurait une composition entre A et B si une instance de A contenait une instance de B, c'est-à-dire si les deux instances étaient physiquement liées. C'est automatiquement le cas en C++ dès que tu écris le code ci-dessus par exemple, puisque les variables contiennent bien des valeurs, alors qu'en Java ce sont des références.
    Mais en fait, la définition d'une composition signifie que A et B sont liées au point qu'une instance de B n'existe que pour une instance donnée de A, et que la disparition de cette dernière entraînera aussi celle de l'autre. En Java, on peut obtenir ça avec une bonne encapsulation. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class A {
      private B b;
     
      public A() {
        b = new B();
      }
     
      public B getB() {
        return b.clone();
      }
    }
    à condition que B soit clonable et que l'instance en question ne soit accessible de nulle part ailleurs.

    Dans ces conditions-là en effet, une instance de B est créée pour chaque instance de A, et lui est intimement liée. Elle n'est accessible à personne d'autre (à cause du clonage), et si l'instance de A disparaît, celle de B qui lui était attachée devient inaccessible. C'est donc bien une composition, même s'il n'y a pas contenance "par valeur".

    En espérant t'avoir éclairé, joyeux Noël et a+ .

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut
    Je pense que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public A() {
        b = new B();
      }
    doit figurer dans le premier exemple aussi pour qu'on puisse utiliser l'objet b.

    Dans le premier exemple, le ramasse-miettes détruira l'objet b à la destruction de l'objet a puisque c'est un champs de a. Non ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    Non, justement dans l'exemple de l'aggrégation l'instance de B n'est pas exclusive à celle de A, elle peut être partagée et venir de l'extérieur. En particulier, elle peut très bien avoir été définie avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      public void setB(B b) {
        this.b = b;
      }
    Avant de te répondre je me suis rafraîchi la mémoire avec cette page : http://uml.developpez.com/cours/. C'est plutôt bien fait et assez concis .

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut
    Merci beaucoup !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    De rien

  7. #7
    Inactif  
    Inscrit en
    Février 2003
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Février 2003
    Messages : 238
    Points : 303
    Points
    303
    Par défaut Java et aggrégation versus composition
    On ne peut pas vraiment deviner en Java s'il s'agit d'une aggrégation ou d'une composition. Le reverse engineering en UML ne permet pas de détecter s'il s'agit d'une composition ou d'une aggrégation. Toutefois en partant du principe que dans 90% des cas selon le type de multiplicité est couvert, le reverse peut estimer qu'il s'agit d'une composition ou d'une aggrégation en fonction des multiplicity d'association. Cette information est toutefois hypothétiquement correcte mais non certaines !!

    A ce moment l'utilisation d'UML apporte une information supplémentaire au code java et l'UML permet d'enrichir java et d'y apporter des notions supplémentaires qui ne sont pas codable

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

Discussions similaires

  1. UML diagramme de Classe : une agrégation ou composition cyclique ?
    Par Marlon Brando dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 11/02/2012, 10h28
  2. [DC] association, agrégation et composition
    Par vonemya dans le forum Diagrammes de Classes
    Réponses: 11
    Dernier message: 04/06/2011, 20h30
  3. [DC] Relation/Agrégation/Composition sur Client->Adresse
    Par amazircool dans le forum Diagrammes de Classes
    Réponses: 15
    Dernier message: 15/01/2008, 12h27
  4. Image - ImageIcon : composition ou agrégation?
    Par ®om dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 01/07/2006, 19h56

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