Diagrammes de classes UML
Le diagramme de structure qui porte l'essentiel du vocabulaire d'UML : les types, leurs attributs et opérations, et les six sortes de lignes qui les relient. Apprenez bien celui-ci et les six autres diagrammes de structure ne coûtent presque rien.
11 min de lectureUML 2.5.14 sur 35
La réponse courte
- Agrégation et composition disent toutes deux possède. La seule différence est de savoir si les parties survivent au tout : losange creux oui, losange plein non.
- La généralisation est un trait plein à triangle creux, la réalisation un pointillé au même triangle. Le plein dit est-une-sorte-de, le pointillé remplit-le-contrat-de.
- La multiplicité se place au bout d'une association, pas au milieu : 1, 0..1, 1..*, et un astérisque seul pour abréger 0..*.
- Un diagramme de classes modélise des types dotés de comportement, un diagramme ER les données stockées. Un domaine a souvent les deux, sans correspondance élément pour élément.
01Lire la boîte#
Une classe est un rectangle à trois compartiments au plus, empilés. Seul le premier est obligatoire.
- Nom. Le nom du type, centré et en gras. Si la classe est abstraite, le nom est en italique. Un mot-clé entre guillemets français au-dessus -
«interface»,«enumeration»- précise de quel type de classificateur il s'agit. - Attributs. Un par ligne, écrits
visibilité nom : Type [multiplicité] = valeur par défaut. Tout sauf le nom est facultatif. - Opérations. Une par ligne, écrites
visibilité nom(paramètres) : TypeDeRetour.
Le symbole de tête de chaque membre est sa visibilité : + public, - privé, # protégé et ~ paquet. Un membre souligné est statique : il appartient à la classe et non à une instance.
02Les six traits#
Presque tout le sens d'un diagramme de classes est dans les traits, et il n'y en a que six à retenir. L'extrémité qui porte la décoration est significative dans tous les cas.
| Élément | Notation | Ce que cela signifie |
|---|---|---|
| Association | Un lien structurel. Les instances de l'une connaissent celles de l'autre. La multiplicité à chaque extrémité dit combien. | |
| Association dirigée | La même chose, mais navigable seulement dans le sens de la flèche. Payment peut atteindre sa PaymentMethod ; la méthode ne peut pas remonter. | |
| Agrégation | Un lien tout-partie où la partie survit au tout. Le losange creux se place du côté du tout. | |
| Composition | Un lien tout-partie où la partie meurt avec le tout. Losange plein du côté du tout. Une partie a exactement un propriétaire. | |
| Généralisation | Héritage. Le triangle creux pointe vers le parent. Lisez-le « est une sorte de ». | |
| Réalisation | Implémentation d'une interface. Trait pointillé, triangle creux du côté de l'interface. | |
| Dépendance | Le lien le plus faible : l'une utilise l'autre, typiquement comme paramètre ou variable locale. À utiliser avec parcimonie, sinon chaque classe finit reliée à toutes les autres. |
Les traits pleins sans triangle sont structurels ; les traits pointillés sont toujours plus faibles que les pleins.
03Multiplicité#
Le nombre au bout d'un trait dit combien d'instances participent. Il se place à l'extrémité opposée à la classe qu'il contraint, ce qui déroute : en lisant Merchant 1 —— 0..* Payment, le 0..* à côté de Payment signifie qu'un marchand a zéro ou plusieurs paiements.
1- exactement une. La valeur par défaut quand rien n'est écrit, même s'il est plus clair de l'écrire.0..1- facultative. C'est la notation d'une référence pouvant être vide.*ou0..*- un nombre quelconque, y compris aucun.1..*- au moins une. Une contrainte utile et souvent oubliée.2..4- un intervalle explicite.
La multiplicité est le gain de justesse le moins cher de toute la notation. « Est-ce que ça peut être vide ? » et « peut-il y en avoir plusieurs ? » sont les deux questions qui font remonter les vrais désaccords en revue de conception, et la réponse tient en trois caractères.
04Association, agrégation, composition#
Ces trois-là sont la même forme de relation à trois intensités, et la différence porte sur le cycle de vie, pas sur l'intensité du lien ressenti entre les deux choses.
Une association simple n'affirme rien sur la propriété. Deux choses sont reliées. C'est tout, et c'est le bon choix par défaut.
L'agrégation - le losange creux - affirme une relation tout-partie où la partie est indépendante. Conseil honnête : l'agrégation ne porte presque aucune sémantique formelle en UML 2.5.1, et les lecteurs ne s'accordent pas sur ce qu'elle implique. Si vous hésitez entre association et agrégation, dessinez l'association.
La composition - le losange plein - est celle qui dit quelque chose de fort et de vérifiable. La partie appartient à exactement un tout et est détruite avec lui. Dans le modèle de paiement, un Refund n'existe que dans un Payment ; il n'y a pas de remboursement flottant. C'est une vraie contrainte, qui vaut la peine d'être consignée, et elle se traduit directement par une suppression en cascade ou une collection possédée dans le code.
05Quand en dessiner un#
À utiliser quand
- S'accorder sur le vocabulaire du domaine avec des gens qui ne liront pas le code
- Les relations ont de vraies contraintes : optionalité, cardinalité, propriété
- Former quelqu'un à un sous-système dont la forme n'est pas évidente dans l'arborescence
- Concevoir un schéma, un contrat d'API, ou tout ce qui a une structure persistée
Préférer autre chose quand
- Vous redessineriez ce qu'un IDE génère depuis les sources en un clic
- La question porte sur l'ordre ou le temps - dessinez une séquence ou une activité
- Les classes sont de la pure plomberie de framework sans sens métier
- Vous êtes tenté de mettre toutes les classes du système sur une seule page
Les diagrammes de classes les plus utiles sont petits en pratique. Sept à douze classes, des attributs sur celles dont on discute et omis partout ailleurs, et chaque trait portant une multiplicité. Un tel diagramme se lit en réunion et tranche des débats. Un diagramme de classes à cent boîtes est un artefact, pas une communication.
06Cinq erreurs à éviter#
- Des flèches à l'envers. Généralisation et réalisation pointent vers l'abstraction. Si votre triangle est sur la sous-classe, le diagramme dit le contraire de ce que vous vouliez.
- La composition pour dire « fortement lié ». Le losange plein est une affirmation sur le cycle de vie. Ne l'utilisez que lorsque détruire le tout détruit vraiment la partie.
- Aucune multiplicité. Un trait sans rien à ses extrémités a jeté l'information la plus précieuse que le diagramme pouvait porter.
- Mélanger les altitudes. Classes métier et classes de framework sur la même page. Séparez ; chaque diagramme doit être lisible par un seul public.
- Modéliser chaque accesseur. Les opérations ont leur place quand elles portent du sens.
getName()n'en porte pas.
Pour confronter un modèle de classes à la réalité, dessinez un diagramme d'objets - un unique instantané concret d'instances. Les multiplicités qui paraissaient correctes dans l'abstrait s'effondrent en général dès qu'on essaie de les remplir avec de vraies valeurs.
En une ligne chacun
- 01Trois compartiments : nom, attributs, opérations. Omettre plutôt que laisser vide.
- 02Les marqueurs de visibilité sont + - # ~ ; souligné veut dire statique, nom en italique veut dire abstrait.
- 03Six traits portent le sens ; l'extrémité décorée est toujours significative.
- 04Généralisation et réalisation pointent vers l'abstraction.
- 05La composition affirme un cycle de vie : la partie meurt avec le tout. L'agrégation ne signifie presque rien ; préférez une association simple.
- 06La multiplicité est le gain de justesse le moins cher disponible. Mettez-la sur chaque trait.
07Questions fréquentes#
Quelle est la différence entre agrégation et composition ?
Les deux veulent dire possède, et la différence tient à ce qui arrive quand le tout disparaît. L'agrégation, losange creux, signifie que les parties survivent au tout : supprimez un service et ses employés existent toujours. La composition, losange plein, signifie qu'elles ne survivent pas : supprimez une commande et ses lignes partent avec elle.
Que signifient les signes plus, moins et dièse dans un diagramme de classes ?
Ce sont des marques de visibilité sur les attributs et les opérations, écrites juste avant le nom du membre. Plus vaut public, moins privé, dièse protégé, et le tilde visible au paquetage.
Que signifie 0..* en UML ?
C'est une multiplicité, qui veut dire zéro ou plus. La multiplicité se place au bout d'une association et contraint le nombre d'instances qui peuvent y participer : 1 vaut exactement une, 0..1 optionnelle, 1..* une ou plus, et un astérisque seul abrège 0..*.
Quelle est la différence entre généralisation et réalisation ?
La généralisation est un héritage entre deux classes, tracé en trait plein avec un triangle creux. La réalisation est une classe qui implémente une interface, tracée en pointillés avec le même triangle creux. Le plein dit est-une-sorte-de ; le pointillé dit remplit-le-contrat-de.
En quoi un diagramme de classes UML diffère-t-il d'un diagramme ER ?
Un diagramme de classes modélise des types dotés de comportement, d'où les opérations sur la classe, et il décrit des objets en mémoire. Un diagramme ER modélise les données que le système stocke, n'a pas d'opérations, et ses relations se limitent à ce qu'une base relationnelle peut faire respecter. Un même domaine a souvent les deux, sans correspondance élément pour élément.
Dans cette série
- 01Qu'est-ce que UML ?
- 02Symboles UML
- 03Choisir un diagramme
- 04Diagrammes de classes
- 05Exemples de diagrammes de classes
- 06Dessiner un diagramme de classes
- 07Symboles du diagramme de classes
- 08Diagrammes de séquence
- 09Exemples de diagrammes de séquence
- 10Dessiner un diagramme de séquence
- 11Diagrammes de cas d'utilisation
- 12Exemples de cas d'utilisation
- 13Diagrammes d'activité
- 14Exemples d'activité
- 15Diagrammes états-transitions
- 16Exemples d'états-transitions
- 17Diagrammes de composants
- 18Exemples de composants
- 19Dessiner un diagramme de composants
- 20Symboles de composants
- 21Diagrammes de déploiement
- 22Exemples de déploiement
- 23Diagrammes d'objets
- 24Diagrammes de paquetages
- 25Diagrammes de structure composite
- 26Diagrammes de communication
- 27Séquence vs communication
- 28Diagrammes de temps
- 29Diagrammes globaux d'interaction
- 30Diagrammes de profil
- 31UML avec l'IA
- 32Exemple e-commerce
- 33Exemple bancaire
- 34Exemple microservices
- 35Exemple AWS
À lire aussi
Fondamentaux
Diagrammes de structure
Diagrammes de structure
Diagrammes de comportement
Référence de notation
Fondamentaux