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?
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:
Règles simples:
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.
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
Il n'y a pas d'explication unique. Différents auteurs signifient différentes choses par agrégation. La plupart ne veulent rien dire de particulier.
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);
}
}
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.
Notations UML pour différents types de dépendance entre deux classes
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;
}
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!]
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.
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.
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é.