Principes et conseils : Association
Rubriques
Les associations représentent des relations structurelles entre les objets de différentes classes ; elles représentent des connexions entre les instances de deux classes ou plus qui existent pendant une certaine période.
Opposez cela aux liens transitoires qui, par exemple, n'existent que pendant la durée d'une opération. Ces dernières situations peuvent être modélisées en utilisant des collaborations, dans lesquelles les liens n'existent que dans des contextes limités spécifiques.
Vous pouvez utiliser des associations pour montrer ce que les objets savent à propos d'autres objets. Parfois, les objets doivent posséder des références les uns par rapport aux autres pour pouvoir interagir, par exemple s'envoyer des messages ; ainsi, dans certains cas les associations peuvent suivre de modèles d'interactions dans des diagrammes de fonctionnement ou de communication.
La plupart des associations sont binaires (existent entre deux classes) et sont dessinées en tant que chemins solides connectant des paires de symboles de classe. Une association peut avoir un nom ou les rôles d'association peuvent avoir des noms. Les noms de rôles sont préférables, car ils communiquent plus d'information. Dans les cas où seul l'un des rôles peut être nommé, les noms de rôles sont tout de même préférables aux noms d'associations s'il est prévu que l'association soit unidirectionnelle, débutant de l'objet auquel le nom de rôle est associé.
Les associations sont généralement nommées pendant l'analyse, avant qu'il y ait suffisamment d'informations pour nommer les rôles de façon adéquate. Lorsqu'ils sont utilisés, les noms d'associations doivent exprimer la relation et être un syntagme verbal. Le nom de l'association est placé sur, ou de façon adjacente au chemin d'association.
Exemple
Dans un distributeur de billets, le tiroir-caisse fournit l'argent que le distributeur de billets distribue. Pour que le distributeur de billets puisse distribuer des fonds, il doit conserver une référence à l'objet tiroir-caisse ; de même, si le tiroir-caisse n'a plus de fonds, l'objet distributeur de billets doit en être informé, donc le tiroir-caisse doit garder une référence au distributeur de billets. Une association modélise cette référence.

Une association entre le distributeur de billets et le tiroir-caisse, appelée valeur d'approvisionnement.
Les noms d'association, s'ils sont mal choisis, peuvent être déroutants et trompeurs. L'exemple suivant illustre des bons et des mauvais noms. Dans le premier diagramme, des noms d'associations sont utilisés, et bien qu'ils soient grammaticalement corrects (ils utilisent des syntagmes verbaux), ils n'expriment pas beaucoup d'informations au sujet de la relation. Dans le second diagramme, des noms de rôles sont utilisés, et ils expriment beaucoup plus d'informations sur la nature de la participation dans l'association.

Exemples de bonne et de mauvaise utilisation des noms d'association et de rôle
Chaque extrémité d'une association est un rôle mentionnant la face qu'une classe joue dans l'association. Chaque rôle doit avoir un nom, et les noms de rôle face à une classe doivent être uniques. Un nom de rôle doit être un nom exprimant le rôle que l'objet associé joue par rapport à l'objet associant. Un nom de rôle adapté pour un professeur dans une association avec une partie d'un cours sera, par exemple, conférencier; évitez les noms comme "a" et "contient", car ils n'ajoutent aucune information sur les relations entre les classes.
Notez que l'utilisation des noms d'associations et des noms de rôles est réciproquement exclusive : on n'utilisera pas à la fois un nom d'association et un nom de rôle.
Les noms de rôle sont préférables aux noms d'association excepté dans les cas où il n'y a pas suffisamment d'informations pour nommer le rôle de façon appropriée (comme c'est souvent le cas durant l'analyse ; lors de la conception les noms de rôles doivent toujours être utilisés). L'absence d'un bon nom de rôle sous-entend un modèle incomplet ou mal formé.
Le nom de rôle est placé près de la fin de la ligne d'association.
Exemple
Examinez les relations entre les classes dans un système de saisie des commandes. Un client peut avoir deux types d'adresses : une adresse où les factures sont envoyées, et un certain nombre d'adresses auxquelles les commandes peuvent être envoyées. Ainsi, nous avons deux associations entre client et adresse, comme montré ci-dessous. Les associations sont marquées du rôle que l'adresse associée joue pour le client.

Associations entre le client, l'adresse, et la commande, montrant à la fois les noms de rôles et les multiplicités
Pour chaque rôle vous pouvez préciser la multiplicité de sa classe, combien d'objets de la classe peuvent être associés à un objet de l'autre classe. La multiplicité est représentée par un élément texte sur le rôle. L'expression est une liste de séries de nombres entiers séparés d'une virgule. Un intervalle est indiqué par un entier (la valeur inférieure), deux points et un entier (la valeur supérieure) ; un seul entier correspond à une plage valide.
Le symbole '*' indique "beaucoup", ce qui signifie un nombre illimité d'objets. Le symbole '*' est à lui seul équivalent à '0..*', c'est à dire tout nombre n'incluant aucune valeur ; c'est la valeur par défaut. Un rôle scalaire facultatif présente la multiplicité 0..1.
Exemple
Dans l'exemple précédent, on a montré des multiplicités pour les associations entre la commande et le client et entre le client et l'adresse.
Si on interprète le diagramme, celui-ci exprime qu'une commande doit posséder un client associé (la multiplicité est de 1..1 à l'extrémité client ), mais un client peut ne pas avoir de commande (la multiplicité est de 0..* à l'autre extrémité). De plus, un client a une adresse de facturation, mais une adresse d'expédition ou plus. Pour réduire l'encombrement en terme de notation, si des multiplicités sont omises, on suppose qu'elles sont de 1..1.
La propriété de navigabilité sur un rôle indique qu'il est possible de naviguer d'une classe associante à la classe cible utilisant l'association. On peut l'implémenter de différentes manières : par des références objet directes, des tableaux associatifs, des tables de hachage, ou toute autre technique d'implémentation qui permet à un objet d'en référencer un autre. La navigabilité est indiquée par une flèche ouverte, qui est placée sur la fin ciblée de la ligne d'association à côté de la classe cible (vers laquelle on navigue). La valeur par défaut de la propriété de navigabilité est vraie.
Exemple
Dans l'exemple de saisie des commandes, l'association entre la commande et le client est navigable dans les deux directions : une commande doit savoir quel client a passé la commande, et le client doit savoir quelles commandes il a passé. Lorsqu'aucune flèche n'est visible, on suppose que l'association est navigable dans les deux directions.
Dans le cas des associations entre le client et l'adresse, le client doit connaître ses adresses, mais les adresses n'ont aucune connaissance au sujet des clients (ou des autres classes, car de nombreux éléments possèdent des adresses) associés à l'adresse. Ainsi, la propriété de navigabilité de l'extrémité client de l'association est désactivée, ce qui entraîne le diagramme suivant :

Classes de système de saisie des commandes mises à jour, montrant la navigabilité des associations.
Parfois, une classe a une association avec elle-même. Cela ne signifie pas nécessairement qu'une instance de cette classe a une association à elle-même ; plus généralement, cela signifie qu'une instance de la classe a des associations à d'autres instances de la même classe. Dans le cas des auto-associations, les noms de rôles sont essentiels pour distinguer l'objectif de l'association.
Exemple
Examinez les auto-associations suivantes concernant la classe employé:

Dans ce cas, un employé peut avoir une association à d'autres employés ; si c'est le cas, il s'agit d'un responsable, et les autres employés sont membres de son équipe. L'association est navigable dans les deux directions dans la mesure où les employés connaissent leur responsable, et un responsable connaît son équipe.
Dessiner deux associations entre les classes signifie que les objets ont deux liens ; un objet donné peut être lié à différents objets par le biais de chaque association. Chaque association est indépendante, et se distingue par le nom de rôle. Comme nous le montrons ci-dessus, un client peut avoir des associations à différentes instances de la même classe, chacune ayant un nom de rôle différent.
Lorsque la multiplicité d'une association est supérieure à un, les instances associées peuvent être classées. La propriété classée d'un rôle indique que les instances participant à l'association sont classées ; par défaut elles forment un ensemble non classé. Le modèle ne précise pas comment maintenir le classement ; les opérations qui mettent à jour une association classée doivent préciser lorsque des éléments mis à jour sont insérés.
Les instances individuelles d'une association sont appelées liens ; un lien est ainsi une relation entre des instances. Des messages peuvent être envoyés aux liens, et des liens peuvent indiquer les références et les agrégations entre les objets. Voir Principes et conseils : Diagramme de communication pour plus d'informations.
Une classe d'association est une association qui possède également des propriétés de classe (comme les attributs, les opérations et les associations). On la montre en traçant un tireté du chemin d'association à un symbole de classe qui contient les attributs, les opérations et les associations pour l'association. Les attributs, opérations et associations s'appliquent à l'association d'origine elle-même. Chaque lien dans l'association a les propriétés indiquées. L'utilisation la plus répandue des classes d'association est la réconciliation de relations à origine et à destination multiples (voir exemple ci-dessus). En principe, le nom de l'association et de la classe doit être le même, mais si nécessaire des noms séparés sont autorisés. Une classe d'association dégénérée contient uniquement des attributs pour l'association ; dans ce cas vous pouvez omettre le nom de la classe d'association pour rendre son caractère séparé moins frappant.
Exemple
En développant l'exemple Employé précédent, examinez le cas où un employé (un membre de l'équipe) travaille pour un autre employé (un responsable). Le responsable évalue périodiquement le membre de l'équipe, en examinant sa performance pendant une période spécifique.
L'évaluation ne peut être seulement un attribut du responsable ou du membre de l'équipe, mais nous pouvons associer l'information à l'association elle-même, comme nous le montrons ci-dessous :

La classe d'association évaluation consigne des informations liées à l'association elle-même
Des qualificatifs sont utilisés pour restreindre et définir plus en détails l'ensemble d'instances associées à une autre instance ; un objet et une valeur qualificative identifient un ensemble unique d'objets dans toute l'association, formant une clé composite.
La qualification réduit généralement la multiplicité du rôle opposé ; la multiplicité nette montre le nombre d'instances de la classe connexe associées à la première classe et à une valeur qualificative donnée. Les qualificatifs sont dessinés comme des petites cases à la fin de l'association attachée à la classe qualifiante. Ils font partie de l'association, pas de la classe. Une case qualificative peut contenir de multiples valeurs qualificatives ; la qualification se base sur la liste complète des valeurs. Une association qualifiée est une variante de l'attribut d'association.
Exemple
Examinez le perfectionnement suivant de l'association entre la ligne article et le produit: une ligne article a une association au produit commandé. Chaque ligne article fait référence à un seul produit, alors qu'un produit peut être commandé sur de nombreuses lignes articles. En qualifiant l'association avec le qualificatif code produit nous indiquons en plus que chaque produit a un code produit unique, et que les lignes articles sont associées aux produits en utilisant ce code produit.

L'association entre la ligne article et le produit a comme qualificatif code produit.
Une association n-aire est une association entre trois classes ou plus, où un seule classe peut apparaître plus d'une fois. Les associations n-aires sont dessinées comme de gros losanges avec un chemin d'association à chaque classe participante. Il s'agit du symbole de modèle traditionnel de la relation entité pour une association. La forme binaire est dessinée sans le losange afin d'être plus compacte, car elle représente la majorité des associations dans un modèle réel. Les associations n-aires sont plutôt rares et peuvent également être modélisées en les transformant en classes. Les associations n-aires peuvent également avoir une classe d'association ; on le montre en dessinant un tireté du losange au symbole de classe. Les rôles peuvent avoir des noms de rôles mais la multiplicité est plus complexe et il vaut mieux la définir en listant les clés potentielles. Si on la donne, la multiplicité représente le nombre d'instances correspondant à un uplet donné des autres objets N-1. La majorité des utilisations d'associations n-aires peuvent être supprimées en utilisant des associations qualifiées ou des classes d'associations. Elles peuvent également être remplacées par des classes normales, bien que cela enlève la contrainte voulant qu'un seul lien puisse exister pour un uplet donné des objets participants.
|