La programmation orientée objet (POO) est une pierre angulaire des applications Java robustes et maintenables. Deux concepts cruciaux de la POO, la composition et l’agrégation, sont souvent sources de confusion. Tous deux représentent des relations « a-un » entre objets, mais diffèrent significativement dans leurs implications et leur utilisation. Cet article clarifie ces différences à travers des exemples pratiques.
Table des matières
- Composition en Java
- Agrégation en Java
- Composition vs. Agrégation
- Travailler avec la Composition en Java
- Travailler avec l’Agrégation en Java
Composition en Java
La composition, une relation « a-un » forte, signifie une relation tout-partie où le cycle de vie de la partie dépend entièrement du tout. La destruction du tout détruit également ses parties ; les parties ne peuvent pas exister indépendamment. Prenons l’exemple d’une voiture : elle est composée d’un moteur, de roues, de portes, etc. La mise au rebut de la voiture élimine ces composants.
En Java, la composition est généralement implémentée en instanciant directement les objets parties dans la classe de l’objet tout. L’objet tout crée et gère ces parties.
Agrégation en Java
L’agrégation, une relation « a-un » plus faible, indique que la partie peut exister indépendamment du tout. L’objet tout contient des références aux parties, mais leurs cycles de vie ne sont pas directement liés. Par exemple, une université « a-un » département, mais le département persiste même si l’université ferme.
En Java, l’agrégation implique que l’objet tout possède des références aux objets parties. Ces références peuvent être gérées séparément. Les parties peuvent être créées avant ou après l’objet tout et survivre à sa destruction.
Composition vs. Agrégation
Le tableau ci-dessous résume les principales différences :
Caractéristique | Composition | Agrégation |
---|---|---|
Relation | Forte « a-un » (tout-partie) | Faible « a-un » |
Cycle de vie | Le cycle de vie de la partie dépend de celui du tout | Le cycle de vie de la partie est indépendant de celui du tout |
Propriété | L’objet tout possède et gère les parties | L’objet tout contient des références aux parties |
Existence de la partie | La partie ne peut pas exister indépendamment | La partie peut exister indépendamment |
Implémentation | Instanciation directe dans l’objet tout | Références à des objets parties indépendants |
Travailler avec la Composition en Java
Illustrons la composition avec une Voiture
composée d’un Moteur
:
class Moteur {
public void demarrer() { System.out.println("Moteur démarré"); }
}
class Voiture {
private Moteur moteur;
public Voiture() {
this.moteur = new Moteur();
}
public void conduire() {
moteur.demarrer();
System.out.println("Voiture en marche");
}
}
public class Main {
public static void main(String[] args) {
Voiture maVoiture = new Voiture();
maVoiture.conduire();
}
}
L’objet Moteur
est créé dans la classe Voiture
. L’existence du Moteur
dépend de la Voiture
.
Travailler avec l’Agrégation en Java
Illustrons maintenant l’agrégation avec une université et ses départements :
class Departement {
private String nom;
public Departement(String nom) { this.nom = nom; }
public String getNom() { return nom; }
}
class Universite {
private Departement[] departements;
public Universite(Departement[] departements) {
this.departements = departements;
}
public void afficherDepartements() {
for (Departement dept : departements) {
System.out.println("Département : " + dept.getNom());
}
}
}
public class Main {
public static void main(String[] args) {
Departement info = new Departement("Informatique");
Departement maths = new Departement("Mathématiques");
Departement[] deps = {info, maths};
Universite uni = new Universite(deps);
uni.afficherDepartements();
}
}
L’Universite
contient des références aux objets Departement
. Les objets Departement
existent indépendamment et peuvent être utilisés ailleurs.
La compréhension de la composition et de l’agrégation permet de concevoir des applications Java plus robustes, maintenables et bien structurées. Le choix dépend des exigences de conception et de la gestion du cycle de vie souhaitée des objets.