• Aucun résultat trouvé

Décrire la structure statique d’un système

12. Les associations

Une association permet de lié au moins un couple de classes entre elles. Les associations sont représentés par des traits rectilignes. Pour des questions de lisibilité, il est préférable que les associations ne se croisent pas. Deux instances ne peuvent être liées que par une seule association.

2.1 Arité des associations

La plupart des associations sont binaires : elles permettent de lier deux classes entre elles. On peut cependant représenter des associations d’ordre supérieur par le biais d’un losange.

<<utilitaire>> Math +cos(x :réel) : réel +log(x :réel) : réel

Classe A Classe B :Classe A B1: Classe B B2: Classe A Etudiant Salle Enseignant

2.2 Nommage des associations

Les associations peuvent être nommées. En général le nommage consiste en une forme verbales active ou passive (Personne travaille pour Société, ou Personne est employée par Société). Lorsque le sens de lecture est ambiguë, il est recommandé de placer un petit triangle permettant de préciser ce sens.

2.3 Rôle des associations

A l’extrémité d’une association peut être attribué un rôle. Dans l’exemple suivant la société voit la personne comme son employé, alors que la personne voit la société comme son employeur.

Le rôle peut également posséder une indication de visibilité (public ou privé, symbolisé par + et -). Par ailleurs, il est possible de nommer à la fois l’association et ses extrémités, mais l’usage veut qu’un choix exclusif soit fait.

Dans certain cas il est possible d’avoir plusieurs associations entre classes, avec des rôles différents. Notons toutefois qu’il ne faut pas confondre association avec méthode (ou message), et qu’un nombre important peut paraître suspect.

Société travaille pour Personne

Société employeur Personne

employé

Avion pilote Personne

Une association peut aussi être réflexive, c’est à dire se joindre à elle même. Ce type d’association permet de créer des structures récursives comme dans le cas des nœuds d’un arbre binaire par exemple.

2.4 Multiplicité des associations

Chaque extrémité d’une association peut porter une indication de multiplicité qui montre combien d’objets d’une classe peuvent être liés à un objet d’une autre classe. La multiplicité est portée par l’extrémité d’une association. Il s’agit d’un entier ou d’un intervalle.

Les multiplicités possibles sont :

1 un seul

0..1 zéro ou un

N exactement N (N est une constante entière)

N..M entre N et M

* zéro ou plusieurs

0..* zéro ou plusieurs

1..* un à plusieurs (donc au moins 1)

N..* N ou plus

Dans le cas suivant chaque personne du modèle a un (au moins et au plus) employeur, et la société peut avoir zéro ou plus d’employés.

Les valeurs de multiplicité expriment des contraintes d’intégrité liées au domaine. Elles sont valables durant toute la durée de vie des objets. Il faut avoir à l’esprit que les valeurs de multiplicité vont avoir une influence sur le code lors de l’implémentation. Une multiplicité de type 1..* ou 0..* va impliquer la gestion et maintenance de structures de données spécifiques de type ensembles ou listes, elles-mêmes impliquant des besoins en ressources (temps d’accès et/ou mémoire). De même une multiplicité qui

Personne parent

enfants *

2

Société employeur Personne

employé 1

commence à zéro impliquera un code conditionnel permettant de gérer l’absence ou la présence de lien dans l’objet.

2.5 Contraintes sur les associations

La multiplicité d’une association représente une forme de contrainte : elle indique le nombre de liens qu’il peut y avoir entre instances (objets) de classes. Il est possible d’attribuer toutes sortes de contraintes à une ou des associations. Ces contraintes sont représentées par un label entre accolades. L’exemple ci-dessous indique que les comptes d’une personne sont ordonnées.

La contrainte {sous-ensemble} indique qu’une collection est incluse dans une autre collection. Cette contrainte nécessite la présence d’au moins deux relations. La contrainte est positionnée à coté d’une flèche en pointillés indiquant son sens.

L’exemple ci-dessus indique que les personnes qui jouent le rôle de délégués font partie des personnes qui jouent le rôle de parents d’élèves.

Une autre contrainte est le ou-exclusif {xor}. Celle-ci indique que parmi un groupe d’associations une seule est valide à la fois.

Personne Compte {ordonné} 1 0..* Ecole Personne {sous- ensemble} Parents d’élèves * délégués * PC portable Batterie Secteur {xor}

2.6 Classes-associations

Il est possible de représenter une association par une classe pour lui ajouter des attributs et des opérations. Cette classe possède toutes les caractéristiques d’une classe habituelle en plus de celles d’une association. Dans le schéma ci-dessous l’association entre les classes A et B est représentée par la classe C.

Une classe-association contenant des attributs mais sans relation avec d’autres classes ne porte pas de nom (c’est une association attribuée).

Notons qu’en conception on a tendance à modéliser une classe-association par une classe à part entière, servant en quelque sorte de pivot entre les deux classes concernées par l’association :

2.7 Qualification des associations

La qualification d’une association permet de restreindre la multiplicité d’une association en se limitant à un sous ensemble définit au travers d’attributs. La qualification d’une association se représente par un rectangle placé au niveau de la classe source du qualificatif. A B C Attributs Operation() D A B attribut n m A B C attribut n m 1 1 Banque

Au niveau de l’instanciation, il faudra préciser la valeur de qualification

Il y a une différence sémantique entre l’utilisation d’une classe-association et une association qualifiée. Avec une classe-association le lien entre deux objets ne peut avoir qu’une valeur pour chaque attribut de la classe association, alors qu’avec une qualification il peut y avoir plusieurs valeurs de qualification pour une association d’objets donnés. Dans l’exemple ci-dessous : dans le cas de la qualification, un fichier porte un nom unique au sein du répertoire (un même fichier ne peut pas avoir plusieurs noms), alors que ce n’est pas le cas avec la classe association.

Documents relatifs