Les associations
Une association est une relation existant entre deux classes.
Une association est binaire quand elle relie deux classes, ternaire quand elle en relie trois, etc.
Les associations peuvent être comparées à des liens entre des fiches.
Le dessin suivant permet de visualiser "en trois dimensions" les situations qu'un diagramme de classes permet de mémoriser.
Pierre et Marie sont des clients. Pierre a effectué les réservations numéros 312 et 329.
Un diagramme de classes doit permettre de mémoriser toutes les situations du contexte de l'entreprise.
Exemples d'association
• Un client passe une commande.
• Une commande comprend plusieurs produits.
Créer une association
Pour créer une association:
1. Dans le diagramme de classes, cliquez sur le bouton
Association 
de la barre d'objets.
2. Cliquez sur une des classes concernées, et faites glisser la souris jusqu'à la deuxième classe avant de relâcher votre pression.
La fenêtre de création d'une association apparaît.
3. Saisissez le nom de l'association à créer.

Vous pouvez également sélectionner une association existante.
4. Cliquez sur Ajouter.
L'association apparaît dans le diagramme sous forme d'un trait.
Les rôles des associations
Il est possible de décrire les différents rôles joués par les classes dans les associations, et de préciser leur multiplicité et leur navigabilité.
Chaque extrémité d'une association permet de préciser le rôle joué par chaque classe dans l'association.
Visuellement, le nom du rôle se distingue du nom d'une association, car il est placé près de son extrémité. De plus, il apparaît en caractères droits, alors que le nom de l'association est en italique.
Lorsque deux classes sont reliées par une seule association, le nom des classes suffit souvent à caractériser le rôle ; nommer les rôles prend tout son intérêt lorsque plusieurs associations relient deux classes.
Exemples de rôles :
• Un client est le donneur d'ordre d'une commande.
• Une commande est passée par un client.
• Une commande est composée de produits.
• Un produit est commandé.
Multiplicité d'un rôle

La multiplicité précise l'intervalle entre les valeurs minimum et maximum des cardinalités possibles pour un ensemble. On l'indique en particulier pour chacun des rôles que jouent les classes dans une association. Elle peut prendre les valeurs *, 0..1, 1, 1..*, 2..*, 4..10, etc. La valeur proposée par défaut est *.

La cardinalité est le nombre d'éléments contenus dans un ensemble.
La multiplicité exprime le nombre minimum et maximum d'instances d'une classe pouvant être reliées par l'association à chaque instance de l'autre classe.
Les multiplicités usuelles sont "1", "0..1", "*" ou "0..*", "1..*", et "M..N" où "M" et "N" sont des entiers :
• La multiplicité "1" indique qu'une et une seule instance de la classe est reliée par cette association à chaque instance de l'autre classe.
• La multiplicité "0..1" indique qu'au plus une instance de la classe peut être reliée par cette association à chaque instance de l'autre classe.
• La multiplicité "*" ou "0..*" indique qu'un nombre quelconque d'instances de la classe peuvent être reliées par l'association à chaque instance de l'autre classe.
• La multiplicité "1..*" indique qu'au moins une instance de la classe est reliée par l'association à chaque instance de l'autre classe.
• La multiplicité "M..N" indique qu'au moins M instances de la classe et au plus N sont reliées par l'association à chaque instance de l'autre classe.
1 | Un et un seul |
0..1 | Zéro ou un |
M..N | De M à N (entiers naturels) |
* | De zéro à plusieurs |
0..* | De zéro à plusieurs |
1..* | De un à plusieurs |
L'exemple suivant va nous permettre d'illustrer la signification de chacune des multiplicités.
• 0..1 : A une commande correspond une facture au maximum ou aucune.
• * : Aucune restriction n'est imposée sur le nombre de factures correspondant à une commande.
• 1 : A chaque commande correspond une facture et une seule.
• 1..* : A chaque commande correspond une ou plusieurs factures.
Préciser la multiplicité d'un rôle
Pour préciser la multiplicité d'un rôle :
1. Faites un clic droit sur la partie du trait de l'association qui se trouve au plus près de la classe.
2. Sélectionnez Multiplicité puis la valeur voulue.

Si le menu affiché ne propose pas les multiplicités, vérifiez que vous avez bien cliqué sur le trait qui matérialise le rôle, et non sur l'association.
La multiplicité apparaît alors sur le rôle.
Navigabilité d'un rôle
La navigabilité précise le sens dans lequel l'association entre deux classes peut être parcourue. Pour ne pas encombrer le dessin, on n'indiquera la navigabilité que lorsqu'elle n'a lieu que dans un seul sens.
Exemple de navigabilité :
• Il est nécessaire de connaître tous les produits contenus dans une commande.
• Par contre, il est rarement utile de connaître toutes les commandes qui portent sur un produit.
Préciser la navigabilité d'un rôle
Pour indiquer qu'une association n'est navigable que dans un sens :
1. Faites un clic droit sur le rôle non navigable.
2. Sélectionnez Navigabilité > Non.
Une flèche représentant la navigabilité apparaît alors sur le rôle opposé.
Agrégation d'un rôle
L'agrégation est une forme particulière d'association qui indique que l'une des classes contient l'autre.
Exemple : Une voiture comprend un châssis, un moteur et des roues.
Préciser l'agrégation d'un rôle
Pour préciser l'agrégation d'un rôle :
1. Faites un clic droit sur le rôle.
2. Sélectionnez Tout/Partie > Agrégat.

Si le menu affiché ne propose pas l'agrégation, vérifiez que vous avez bien cliqué sur le trait qui matérialise le rôle, et non sur l'association.
Un losange représentant l'agrégation apparaît alors sur le rôle.
Composition d'un rôle
La composition est une agrégation forte pour laquelle la durée de vie des composants coïncide avec celle du composé. Une composition est une agrégation immuable avec une multiplicité 1.
Exemple : Une commande est composée de plusieurs lignes de commande qui n'existent plus si la commande est supprimée.
La composition est matérialisée par un losange noir.
Rôle modifiable
La caractéristique Lecture seule permet de préciser si le rôle joué par une classe dans une association est modifiable après qu'il a été créé ou non. Par défaut, le rôle d'une classe dans une association est considéré comme modifiable.
Exemple : Une commande comprend une ligne de commande pour chacun des produits commandés. On ne peut plus changer ces différentes lignes de commande après l'enregistrement de la commande.
Il est possible d'indiquer si un rôle est modifiable à l'aide du menu contextuel du rôle ou dans la fenêtre de propriétés du rôle.
La caractéristique Lecture seule du rôle peut avoir les valeurs suivantes :
• Ajout seul : il est toujours possible de relier de nouveaux objets par cette association, mais il n'est pas possible de délier les objets déjà reliés.
• Lecture seule : les instances reliées ne peuvent plus être déliées. Il n'est pas possible non plus d'ajouter un nouveau lien.
• Pas de restriction : de nouvelles instances peuvent être reliées ou déliées à tout moment sans aucune contrainte.
Ordre d'un rôle
Il est possible de préciser si un rôle est ordonné ou non. Par exemple, pour une commande, il peut être intéressant de mémoriser l'ordre de ses lignes de commande.
Pour spécifier qu'un rôle est ordonné :
1. Ouvrez la fenêtre de Propriétés du rôle.
2. Dans la page Caractéristiques, cochez la case Ordonnée.
Propriété statique d'un rôle
Comme pour un attribut, il est possible de préciser si un rôle peut prendre des valeurs spécifiques pour chacune des instances de la classe ou bien s'il a une valeur qui caractérise l'ensemble de la classe :
1. Ouvrez la fenêtre de propriétés du rôle.
2. Cliquez sur la page Caractéristiques.
3. Dans le champ Statique, sélectionnez :
• "Oui" : pour que le rôle ait une valeur qui caractérise l'ensemble de la classe.
• "Non" : pour que le rôle puisse prendre une valeur différente pour chacune des instances de la classe.
Qualificatif d'un rôle
Un qualificatif est un attribut dont les valeurs partitionnent l'ensemble des objets reliés à un objet à travers une association.
Exemple : Une commande comprend plusieurs lignes de commande. Le numéro de ligne de commande peut servir de qualificatif pour identifier chacune des lignes.
Pour définir un qualificatif :
1. Faites un clic droit sur le rôle et sélectionnez Propriétés.
La fenêtre de propriétés du rôle s'ouvre.
2. Sélectionnez la page Qualificatifs.
3. Pour ajouter un nouveau qualificatif au rôle, cliquez sur Ajouter.
4. Saisissez le nom du qualificatif.
5. Cliquez sur Ajouter.
Plusieurs qualificatifs peuvent être nécessaires pour identifier de manière unique chacun des objets de la classe.
Par exemple, chaque case d'un échiquier est identifiée par son numéro de ligne et son numéro de colonne dans l'échiquier.
Surcharger un rôle
Un rôle peut hériter d'un rôle défini au niveau supérieur. La surcharge permet de définir des propriétés supplémentaires sur un rôle hérité.
Pour surcharger un rôle :
1. Ouvrez la fenêtre de propriétés du rôle.
2. Dans la fenêtre de propriétés, cliquez sur la liste déroulante puis sur Caractéristiques.
3. Sous la section Rôles, sélectionnez Rôle surchargé.
4. Cliquez sur Ajouter.
La fenêtre de sélection apparaît.
5. Recherchez et sélectionnez le rôle en question.
6. Cliquez sur OK.
Les classes d'association
Une classe d'association est une association qui possède aussi les propriétés d'une classe comme des attributs.
Il est utile de créer une classe d'association pour préciser des caractéristiques de l'association.
Par exemple, il est nécessaire de préciser la quantité de produit demandée pour chacune des lignes d'une commande.
Pour créer une classe d'association :
1. Créez une nouvelle classe.
2. A l'aide du bouton Lien, créez un lien entre la classe et l'association.
La classe d'association est reliée à l'association par un trait pointillé.

Comme pour les classes standard, il est possible de cacher les compartiments et de retailler la classe d'association à l'aide de la commande Affichage de son menu contextuel.
Définir une association "plus que binaire"
Certaines associations associent non pas deux, mais davantage de classes. Ces associations sont, en principe, rares.
Exemple : Lors d'un inventaire, une certaine quantité de produit a été comptée dans chaque entrepôt.
Pour créer une association ternaire :
1. Créez tout d'abord l'association entre deux des classes.
2. Cliquez sur le bouton
Rôle de l'association 
3. Tirez un lien entre l'association et la troisième classe.
Vous pouvez ensuite créer la classe d'association éventuelle comme précédemment.
Les associations réflexives
Certaines associations mettent en jeu plusieurs fois la même classe.
Une salle de classe, un bâtiment, un établissement scolaire sont tous des lieux.
Une salle de classe est contenue dans un bâtiment, lui-même contenu dans un établissement scolaire.
Une association réflexive porte deux fois sur la même classe.
Créer une association réflexive
Pour créer une association réflexive :
1. Cliquez sur le bouton
Association 
de la barre d'outils.
2. Cliquez dans la classe concernée et faites glisser la souris en dehors de cette classe, puis revenez-y ; relâchez enfin votre pression.
L'association réflexive apparaît sous forme d'un crochet.

Dans le cas d'une association entre une classe et elle-même, il est indispensable de préciser les rôles afin de distinguer les liens correspondants dans le dessin.