En programmation informatique et plus précisément en programmation orientée objet, l'agrégation permet de définir une entité comme étant liée à plusieurs entités de classe différentes. C'est une généralisation de la composition, qui n’entraîne pas l'appartenance.
Par exemple, une université est composée de plusieurs facultés, et chaque faculté est un agrégat de plusieurs professeurs. La destruction de l'université implique la destruction des facultés qui la composent, alors que la destruction d'une faculté n'implique pas la destruction des professeurs liés à cette faculté par une relation d'agrégation. On peut écrire cet exemple en C++ :
class Professeur;
class Departement
{
...
private:
// Agrégation
Professeur* enseignants[5];
...
};
class Universite
{
...
private:
// Composition
Departement facultes[20];
...
};
Cela est dû au fait que les professeurs sont déclarés en tant que pointeurs. Il faudrait donc une ligne
for(long i = 0;i<5;i++){delete enseignants[i]}
dans le destructeur de facultés afin de les détruire.
Les facultés sont par contre déclarées en tant que variable membre (et non pointeur) et seront donc détruites automatiquement lors de la destruction d'une instance.
En UML, l'agrégation se note par un trait entre deux classes orné d'un losange blanc du côté de la classe agrégat.