Agrégation vs composition


206

Je comprends la composition de la programmation orientée objet, mais je ne parviens pas à me faire une idée précise de ce qu'est l'agrégation. Quelqu'un peut-il expliquer?

Réponses:


322

Règles simples:

  1. A "possède" B = Composition: B n'a aucune signification ou finalité dans le système sans A
  2. A "utilise" B = Agrégation: B existe indépendamment (conceptuellement) de A

Exemple 1:

Une entreprise est une agrégation de personnes. Une entreprise est une composition de comptes. Lorsqu'une entreprise cesse ses activités, ses comptes cessent d'exister, mais ses employés continuent d'exister.

Exemple 2: (très simplifié)

Un éditeur de texte possède un tampon (composition). Un éditeur de texte utilise un fichier (agrégation). Lorsque l'éditeur de texte est fermé, le tampon est détruit mais le fichier lui-même n'est pas détruit.


11
Une voiture est-elle un agrégat ou une composition de ses pièces?
Reinierpost

2
Et en quoi l'agrégation est-elle différente de toute autre relation entre deux types d'entités?
Reinierpost

55
@reinierpost En réalité , une voiture est une agrégation de pièces, et les pièces sont simplement une agrégation de molécules ... Cependant, dans un modèle , tout dépend de vos exigences. Est-il important de traiter le moteur comme une entité distincte afin de pouvoir suivre sa durée de vie indépendamment de la voiture? Pouvez-vous réutiliser exactement le même moteur dans une autre voiture? Si oui, alors vous voulez probablement l'agrégation. Sinon, vous voulez une composition parce que vous ne vous souciez pas des moteurs qui ne font pas partie des voitures, ni de la réutilisation des moteurs.
Curtis Batt

3
ce qui manque, c'est un exemple d'implémentation pour une compréhension complète ...
Chesnokov Yuriy

1
Qu'en est-il des employés lorsqu'une entreprise cesse ses activités? Les employés et les personnes sont des entités différentes, n'est-ce pas? Alors, puis-je dire que la société est la composition des employés?
Arjun

36

De http://en.wikipedia.org/wiki/Composition_Objet

L'agrégation diffère de la composition ordinaire en ce sens qu'elle n'implique pas la propriété. En composition, lorsque l'objet propriétaire est détruit, les objets contenus le sont également. En agrégation, ce n'est pas nécessairement vrai. Par exemple, une université possède divers départements (par exemple, la chimie) et chaque département compte un certain nombre de professeurs. Si l'université ferme ses portes, les départements n'existeront plus, mais les professeurs de ces départements continueront d'exister. Par conséquent, une université peut être vue comme une composition de départements, alors que les départements ont une agrégation de professeurs. En outre, un professeur peut travailler dans plus d’un département, mais un département ne peut pas appartenir à plus d’une université.

Ainsi, tant que vous avez une relation de propriété avec la composition, l'objet appartenant est également détruit lorsque le propriétaire l'est: une agrégation (et les objets contenus) peuvent exister indépendamment.

-

Mise à jour: excuses - cette réponse est beaucoup trop simpliste avec le recul.

c.batt fournit une excellente définition dans sa réponse: agrégation vs composition


3
Dans l’exemple que vous citez, la composition est un-à-plusieurs et l’agrégation comporte également une relation un-à-plusieurs, bien qu’il puisse également s'agir ici d’une relation plusieurs-à-plusieurs pour l’agrégation (on peut supposer possible un enseignant peut enseigner dans plusieurs départements). Attendu qu'un département ne peut pas faire partie de plusieurs universités. La composition implique la propriété alors que l'agrégation ne va pas au-delà des relations. La citation est correcte mais le commentaire ne l’est pas.
Newtopian

1
cela n'a rien à voir avec la destruction! UML ne définit pas le système de récupération de place.
Nom à afficher

2
Je pense que le lien vers Wikipédia devient de plus en plus critique, mais il s'agit d'une définition terrible - comme l'a souligné @bold, ces relations n'ont rien à voir avec GC. Cela tombe également lorsqu'un objet est la composante de deux autres objets, comme la balle dans une rotule joignant deux membres artificiels. La relation entre composants concerne la dépendance fonctionnelle.
Steven A. Lowe

1
Je conviens que ma réponse fait cruellement défaut - tout comme l'article de WikiPedia ...
HorusKol

La différence entre composition et agrégation est claire. Le problème avec l'agrégation est qu'il n'est pas clair en quoi cela diffère de l'association ordinaire.
reinierpost


17
  • La composition est une association

  • L'agrégation est une association

  • La composition est une association forte (si la vie d'un objet contenu dépend totalement de l'objet conteneur, elle s'appelle une association forte)

  • L'agrégation est une association faible (si la durée de vie de l'objet contenu ne dépend pas de l'objet conteneur, on parle alors d'association faible)

Exemple:

class Contained {
    public void disp() {
        System.out.println("disp() of Contained A");
    }
}

public class Container {
    private Contained c;

    //Composition
    Container() {
        c = new Contained(); 
    }

    //Association 
    public Contained getC() {
        return c;
    }

    public void setC(Contained c) {
        this.c = c;
    }     

    public static void main(String[] args) {
        Container container = new Container();
        Contained contained = new Contained();
        container.setC(contained);
    } 
}

2
Quelle est la différence entre agrégation et association qui n'est ni composition ni agrégation?
reinierpost

11

La composition (mélange) est un moyen de combiner des objets simples ou des types de données en des objets plus complexes. Les compositions sont un élément essentiel de nombreuses structures de données de base

L'agrégation (collection) diffère de la composition ordinaire en ce sens qu'elle n'implique pas la propriété. En composition, lorsque l'objet propriétaire est détruit, les objets contenus le sont également. En agrégation, ce n'est pas nécessairement vrai

╔═══════════╦═════════════════════════╦═══════════════════════╗
║           ║       Aggregation       ║      Composition      ║
╠═══════════╬═════════════════════════╬═══════════════════════╣
║ Life time ║ Have their own lifetime ║ Owner's life time     ║
║ Relation  ║ Has                     ║ part-of               ║
║ Example   ║ Car has driver          ║ Engine is part of Car ║
╚═══════════╩═════════════════════════╩═══════════════════════╝

Les deux dénotent la relation entre objet et ne diffèrent que par leur force. entrez la description de l'image ici

Notations UML pour différents types de dépendance entre deux classes entrez la description de l'image ici

Composition : Puisque Engine fait partie de la voiture, la relation entre eux est la composition. Voici comment ils sont implémentés entre les classes Java.

public class Car {
    //final will make sure engine is initialized
    private final Engine engine;  

    public Car(){
       engine  = new Engine();
    }
}

class Engine {
    private String type;
}

Agrégation : Puisque l'organisation a une personne comme employé, la relation entre eux est une agrégation. Voici à quoi elles ressemblent en termes de classes Java

public class Organization {
    private List employees;
}


public class Person {
    private String name;   
}

La source


cela ne semble pas offrir quoi que ce soit de substantiel sur les points soulevés et expliqués dans les 12 réponses précédentes
gnat

Bien sûr, les livres peuvent exister sans bibliothèques. Mauvais exemple!
T Blank

Ici, la liste des employés est la partie de l'objet d'organisation. Comment cela peut-il être agrégation?
Salman Muhammad Ayub

Comment l'association est-elle différente de l'agrégation?
reinierpost

J'aime cette réponse. Finalement, elle m'a expliqué correctement la différence entre agrégation et composition.
PandasRocks

6

l'agrégation est une collection simple, comme un sac de billes

la composition implique des dépendances internes / fonctionnelles, comme les charnières d'une boîte

les voitures regroupent les passagers; ils entrent et sortent sans casser les fonctionnalités de la voiture

les pneus sont des composants; retirez-en un et la voiture ne fonctionne plus correctement

[note: le pneu de secours est un agrégat!]


1

Je regarde toujours la composition comme "a besoin d'un", c'est-à-dire qu'une voiture a besoin d'un moteur, et je considère l'agrégation comme "des choses liées à un but". Donc, pour rester dans l’analogie voiture, mon agrégation peut être de représenter un voyage qui peut impliquer de réunir une voiture et des passagers. Le trajet ne appartient pas à la voiture ou aux passagers, je suis en train d'agréger des données liées à un scénario spécifique. Lorsque le voyage est terminé, la voiture et les passagers continuent. Quand une voiture est arrêtée, la voiture et son moteur sont normalement détruits ensemble.


0

Sémantiquement, tous les ensembles sont constitués de sous-ensembles, non? Donc:

  • L'agrégation est lorsque ces sous-ensembles existent indépendamment de l'ensemble père. Comme un moniteur peut être débranché de l'ordinateur pour être connecté à un autre.

  • La composition correspond au moment où ces sous-ensembles dépendent de l’existence de l’ensemble paternel. Comme une feuille est une partie d'un arbre ou le foie est une partie d'un corps.

Ces concepts parlent du type de dépendance entre deux objets ou classes, conceptuellement. Directement dans un programme, dans une agrégation, lorsque l'objet père dispose, les objets agrégés doivent également être éliminés. Dans le même scénario pour une composition, les objets fils composites persisteront, puis l'objet père distribuera.


-1

Que diriez-vous de cet exemple simple:

Un tableau d'objets est une composition. Un tableau de pointeurs sur des objets est une agrégation.

Si je supprime le premier, son contenu disparaît avec lui. Le second, en revanche, peut disparaître sans affecter l’existence de ses membres sauf s’il existe une méthode spécifique qui supprime chaque objet lorsque son pointeur est supprimé.


3
cela ne semble rien ajouter d’important aux points soulevés et expliqués dans les 11 réponses précédentes
gnat

Respectueusement en désaccord, @gnat. Ceci est un exemple utile de la façon dont les deux pourraient être implémentés. Les gens apprennent mieux avec des exemples. (Je suis venu ici pour vérifier ma compréhension du fait qu'un membre du pointeur était probablement une agrégation et un membre de l'objet une composition. C'est la seule réponse pour adresser cela directement.)
Bob Stein
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.