Associations

Objectifs

  • Savoir représenter les relations entre des classes grâce aux associations ;

  • Savoir ajouter des contraintes sur les associations.

Mise en situation

Imaginez que vous développiez une application à destination des agences immobilières pour faciliter la gestion des locations d'appartements ou de maisons.

Dans votre modélisation, vous avez identifié plusieurs acteurs : les locataires, les bailleurs, les biens immobiliers, etc. Chacun de ces acteurs est représenté par une classe UML.

Mais comment représenter les relations qui existent entre ces classes ? Par exemple, un bailleur peut posséder plusieurs biens immobiliers, mais un bien immobilier ne peut être loué que par un seul locataire.

Dans ce module, vous allez découvrir les associations UML, qui permettent d'exprimer efficacement les relations entre plusieurs classes, ainsi que leurs contraintes.

DéfinitionAssociation

Une association est une relation logique entre deux classes (association binaire) ou plus (association n-aire) qui définit un ensemble de liens entre les objets de ces classes.

Une association est nommée, généralement par un verbe. Une association peut avoir des propriétés (à l'instar d'une classe). Une association définit le nombre minimum et maximum d'instances autorisées dans la relation (on parle de cardinalité).

Syntaxe

@startumlskinparam defaultFontName Inconsolataskinparam classFontStyle boldhide circleclass Classe1 as "Classe A"class Classe2 as "Classe B"Classe1 -right- Classe2: verbe@enduml

Attention

Le nom de l'association (verbe qui la décrit) est obligatoire, au même titre que le nom d'une classe ou d'un attribut.

Remarque

Une association est généralement bidirectionnelle (c'est à dire qu'elle peut se lire dans les deux sens). Les associations qui ne respectent pas cette propriété sont dites unidirectionnelles ou à navigation restreinte.

ExempleL'association Conduit

@startumlskinparam defaultFontName Inconsolataskinparam classFontStyle boldskinparam nodesep 80hide circleclass A as "Conducteur" {type_permis: Enumerationdate_permis: Date}class B as "Voiture" {marque: varcharyype: varcharnb_portes: integerpuissance: integerkilométrage: integer--rouler()}A -right- B : conduit@enduml

L'association « Conduit » entre les classes « Conducteur » et « Voiture » exprime que les conducteurs conduisent des voitures.

DéfinitionCardinalité d'une association

La cardinalité d'une association permet de représenter le nombre minimum et maximum d'instances qui sont autorisées à participer à la relation. La cardinalité est définie pour les deux sens de la relation.

Syntaxe

Si mina (resp. maxa) est le nombre minimum (resp. maximum) d'instances de la classe A autorisées à participer à l'association, on note sur la relation, à côté de la classe A : mina..maxa.

Si le nombre maximum est indéterminé, on note n ou *.

Remarque

Les cardinalités les plus courantes sont :

  • 0..1 (optionnel)

  • 1..1 ou 1 (un)

  • 0..n ou 0..* ou * (plusieurs)

  • 1..n ou 1..* (obligatoire)

ExempleLa cardinalité de l'association Possède

@startumlskinparam defaultFontName Inconsolataskinparam classFontStyle boldskinparam nodesep 80hide circleclass A as "Conducteur" {type_permis: Enumerationdate_permis: Date}class B as "Voiture" {marque: varchartype: varcharnb_portes: integerpuissance: integerkilométrage: integer--Rouler()}A "1"-right-"*" B : possède@enduml

Ici un conducteur peut posséder plusieurs voitures (y compris aucune) et une voiture n'est possédée que par un seul conducteur.

AttentionTerminologie

  • On appelle association 1:1 les associations de type :

    • 0..1:0..1

    • 0..1:1..1

    • 1..1:0..1

    • 1..1:1..1

  • On appelle association 1:N les associations de type :

    • 0..1:0..N

    • 0..1:1..N

    • 1..1:0..N

    • 1..1:1..N

  • On appelle association N:M (ou M:N) les associations de type :

    • 0..N:0..M

    • 0..N:1..M

    • 1..N:0..M

    • 1..N:1..M

Complément

La notation de la cardinalité en UML est opposée à celle adoptée en E-A. En UML on note à gauche (resp. à droite) le nombre d'instances de la classe de gauche (resp. de droite) autorisées dans l'association. En E-A, on note à gauche (resp. à droite) le nombre d'instances de la classe de droite (resp. de gauche) autorisées dans l'association.