Composition (programmation)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
image illustrant l’informatique
Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

symbole graphique de la Composition dans les diagrammes de la modélisation UML.

Un lien de composition symbolise l'existence d'une agrégation particulière, dite 'forte', entre deux entités (classes).

Une composition est définie par les points suivants :

Durée de vie : toute classe agrégée est détruite quand la classe composite est détruite.
Exclusivité : une classe agrégée ne peut l'être que par une seule classe composite.
Notion de « fait partie de ».

La classe Voiture est une classe composite composée d'un élément de la classe Carburateur (un carburateur). La classe Carburateur est une classe agrégée. Quand une instance de la classe Voiture (une voiture) est détruite (dans un accident par exemple), le carburateur (instance de la classe Carburateur) aussi. Le carburateur fait partie de la voiture.

À noter que la distinction entre composition et agrégation n'est pas absolue : c'est le contexte qui détermine ce choix. Ainsi une voiture peut être vue comme l'agrégation d'un habitacle et 4 roues du point de vue d'un logiciel de casse automobile (la destruction de la voiture n'entrainera pas celle des roues si elles sont récupérées auparavant), ou bien comme une composition du point de vue d'un logiciel de simulation de comportement routier (où les roues nécessitent d'être traitées comme des entités distinctes, mais où le véhicule reste considéré comme un tout).

En UML, la composition se représente par un trait plein orné d'un losange noir du côté de la classe composite.

Exemple de code en C++[modifier | modifier le code]

// Composition
class Voiture
{
  private:
    // Tout objet de type Voiture est responsable de l'attribut 'carbu', lequel est un objet de type Carburateur. 
    // Quand un objet de type Voiture est créé, son attribut 'carbu' est créé automatiquement. 
    // Quand un objet de type Voiture est détruit, son attribut 'carbu' est également détruit.
    Carburateur carbu;
  public :
    const Carburateur & getCarbu() const { // Méthode accesseur pour accéder en lecture seule à l'attribut 'carbu'
      return carbu;
    }
    void setCarbu(const Carburateur & unCarbu) { // Méthode mutateur pour initialiser l'attribut 'carbu'
      carbu = unCarbu;
    }
};