Java Programming

Composition vs. Agrégation en Java : Plongez au cœur du sujet

Spread the love

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

  1. Composition en Java
  2. Agrégation en Java
  3. Composition vs. Agrégation
  4. Travailler avec la Composition en Java
  5. 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *