Archyno
UMLRéférence de notation

Symboles du diagramme de classes UML

Chaque pointe de flèche, losange et pointillé qu'un diagramme de classes peut porter, tracé à l'échelle d'une légende à côté de son sens - la page à garder ouverte pour vérifier un tracé.

11 min de lectureUML 2.5.17 sur 35

La réponse courte

  • L'extrémité décorée d'une ligne est celle qui porte le sens : le triangle pointe vers le parent, le losange se pose sur le tout propriétaire, la flèche ouverte désigne ce qui est utilisé.
  • Trait plein avec triangle creux : généralisation. Trait pointillé : réalisation. La première hérite structure et comportement, la seconde ne promet que les opérations.
  • Une multiplicité décrit la classe contre laquelle elle est écrite : 0..* à côté de Order se lit « beaucoup de commandes », pas « beaucoup de clients ».
  • Sur les boîtes : un nom en italique signifie abstrait, les guillemets un mot-clé ou un stéréotype, une barre oblique initiale un attribut dérivé, et les accolades une contrainte.

01Les six relations#

ÉlémentNotationCe que cela signifie
AssociationLes deux classes se connaissent. Le choix par défaut, et bien plus souvent la bonne réponse que tout ce qui suit.
GénéralisationTriangle creux du côté du parent. L'enfant est une sorte de parent et peut le remplacer partout où le parent est attendu.
RéalisationPointillés, triangle creux du côté de l'interface. La classe fournit ce que l'interface déclare, sans hériter d'état.
CompositionLosange plein du côté du tout. La partie appartient à exactement un tout et est supprimée avec lui.
AgrégationLosange creux du côté du tout. La partie peut être partagée et survit au tout. Elle ne porte aucune autre sémantique formelle.
DépendanceFlèche ouverte en pointillés. Une classe en utilise une autre sans en garder de référence - un paramètre, un type de retour, un appel statique.
Un diagramme de classes UML montrant toutes les sortes de relations à la fois. Order généralise depuis AbstractOrder, réalise l'interface Printable, est composé de OrderLine, agrège Tag, est associé à Customer et dépend d'un PriceService.
Chaque type de relation qu'un diagramme de classes peut porter, sur un seul dessin, pour comparer les traits directement.

La règle qui rend tout cela mémorisable : l'extrémité décorée est celle qui compte - le triangle pointe vers le classifieur le plus général, le losange se pose sur le tout qui possède, et la flèche ouverte pointe vers ce qui est utilisé. Si vous retenez quelle extrémité porte la marque, vous reconstituez généralement le sens.

02Les boîtes elles-mêmes#

La moitié des marques d'un diagramme de classes est sur les traits, l'autre sur les boîtes, et c'est la seconde que l'on saute. Un rectangle avec un nom est une classe ; tout ce qui suit change la nature que ce rectangle prétend avoir, et un lecteur qui ignore la différence lit une interface comme une classe et s'étonne qu'elle n'ait pas d'attributs.

ÉlémentNotationCe que cela signifie
ClasseOrderUn simple rectangle au nom droit. Le cas par défaut, et le seul ici qui ne demande aucun marquage.
Classe abstraiteAbstractOrderNom en italique. Non instanciable : elle existe pour qu'on en généralise. Là où l'italique ne survit pas - et sur un tableau blanc, jamais - on écrit {abstract} sous le nom.
Interface«interface» PrintableUn contrat avec des opérations et sans état. Les classes l'atteignent par réalisation - le trait pointillé au triangle creux - jamais par généralisation.
Énumération«enumeration» StatusUn ensemble fixe de littéraux, un par ligne dans le compartiment sous le nom : DRAFT, PLACED, SHIPPED. Pas de marqueurs de visibilité - les littéraux sont toujours publics.
Type de données«dataType» MoneyUne valeur sans identité : deux instances portant les mêmes nombres sont la même chose. «primitive» est la même idée pour les types intégrés.
Classe active‖ Scheduler ‖Double trait vertical sur les côtés. L'objet possède son propre fil d'exécution au lieu d'attendre qu'on l'appelle - un processus, un démon, un consommateur de file.

Les formes de boîtes. Tout sauf la première est un mot-clé ou un changement de style typographique, et c'est bien pour cela qu'on les lit si facilement sans les voir.

Une interface a une seconde notation, plus petite, qui ne coûte aucune boîte : une sucette - un cercle sur une tige - dessinée sur le classifieur qui la fournit, et une douille correspondante, un demi-cercle ouvert, sur celui qui en a besoin. Emboîtez les deux et vous avez la boule-et-douille dont sont faits les diagrammes de composants. Elle dit exactement ce que dit le triangle pointillé, dans un dixième de la place, et c'est le bon choix dès qu'un diagramme porte plus de trois interfaces environ.

03Dans la boîte : visibilité, types et multiplicité#

Une boîte de classe est un bandeau de nom avec jusqu'à deux compartiments dessous : les attributs, puis les opérations. Les deux sont facultatifs, et une boîte réduite à un nom est parfaitement légale - souvent la bonne chose sur un diagramme qui parle de relations.

ÉlémentNotationCe que cela signifie
Public+ name: StringVisible de partout. Ce que sont toujours les membres d'une interface.
Privé- id: UUIDVisible seulement dans la classe. Le cas habituel sur un diagramme de conception.
Protégé# state: StatusVisible pour la classe et ses sous-types.
Paquet~ cache: MapVisible dans le paquet propriétaire. Rare en pratique.
StatiquesoulignéAppartient au classifieur et non à une instance.
AbstraititaliqueLa classe ou l'opération n'a pas d'implémentation. Là où l'italique ne survivrait pas au tableau, on écrit souvent «abstract».

La multiplicité s'écrit à l'extrémité d'une relation, et la syntaxe est courte : 1 exactement un, 0..1 facultatif, * ou 0..* un nombre quelconque y compris zéro, 1..* au moins un, et 2..5 un vrai intervalle. Une multiplicité absente signifie non spécifiée et non « un » : la laisser vide est un manque, pas une valeur par défaut.

Une opération s'écrit + place(customer: Customer, at: Instant): Order - visibilité, nom, paramètres avec leurs types, puis le type de retour après les deux-points. Deux décorations reviennent assez souvent pour être reconnues : un paramètre peut porter une direction, comme out receipt: Receipt, et un attribut une valeur par défaut, comme - status: Status = DRAFT. Ni l'une ni l'autre n'est obligatoire, et un modèle du domaine se porte généralement mieux sans.

04Les extrémités d'un trait : flèches, rôles et qualificateurs#

Une relation porte du sens à ses deux extrémités, et presque tout ce qu'un diagramme de classes rate en relecture se joue à une extrémité et non au milieu. Le trait dit que deux classes sont reliées ; les extrémités disent qui peut atteindre qui, combien, dans quel ordre et sous quel nom.

ÉlémentNotationCe que cela signifie
NavigabilitéUne flèche ouverte à une extrémité : cette extrémité est atteignable depuis l'autre, et rien n'est affirmé sur le chemin inverse. Order détient un Customer ; qu'un client puisse lister ses commandes est une autre question.
Non navigableUne petite croix à l'extrémité. Explicitement non atteignable dans ce sens - une affirmation bien plus forte que laisser l'extrémité nue, et qui vaut la peine aux une ou deux endroits d'un modèle où c'est un vrai choix de conception.
Nom de rôle+ placedByComment cette extrémité s'appelle vue de l'autre côté. Indispensable dès qu'une classe se relie à elle-même - manager et reports aux deux extrémités entre Employee et Employee - et utile chaque fois que le nom de la classe seul ne dit pas à quoi sert la référence.
Multiplicité0..*Combien d'objets se tiennent à cette extrémité pour un à l'autre. Lisez-la vers l'extrémité où elle est écrite : 1 côté Customer et 0..* côté Order signifie un client, un nombre quelconque de commandes.
Chaîne de propriétés{ordered}Entre accolades à côté d'une multiplicité. {ordered} signifie que la position fait partie du sens, {unique} que les doublons sont impossibles - ensemble, elles font la différence entre une liste, un ensemble et un multiensemble.
Qualificateur[ isbn ]Une petite boîte à l'extrémité source contenant une clé. Elle transforme un 0..* en 0..1 : une bibliothèque a beaucoup de livres, mais une bibliothèque qualifiée par ISBN en a au plus un.
Classe d'association- - - EnrolmentUne classe rattachée au milieu d'une association par un trait pointillé, portant les attributs qui appartiennent à l'appariement plutôt qu'à l'un des deux côtés - une note, une date d'inscription, un prix au moment de la commande.
Association n-aireUn losange creux au milieu avec trois traits ou plus. Légal, rare, et presque toujours plus clair redessiné en classe avec trois associations - ce qu'une base de données en ferait de toute façon.

Tout ce qui peut s'écrire au bout d'un trait. Lisez la multiplicité vers l'extrémité où elle se trouve : cette seule convention cause plus de diagrammes mal lus que les pointes de flèches.

05Notes, contraintes et membres dérivés#

Le dernier groupe de marques est celui qui porte les règles qu'un dessin de boîtes et de traits ne sait pas exprimer seul. Un diagramme de classes est une structure, et la moitié de ce que sait un expert métier est une condition sur cette structure - un total qui ne peut jamais être négatif, une paire de relations dont exactement une peut être remplie.

ÉlémentNotationCe que cela signifie
Note⎒ commentaireUn rectangle à coin corné, relié par un simple trait pointillé à ce qu'il concerne. Texte libre : une hypothèse, une question ouverte, un lien vers le ticket d'où vient la classe.
Contrainte{total >= 0}Des accolades, partout où la contrainte s'applique - dans une note, à côté d'un attribut, sur une extrémité d'association. Une affirmation que le modèle déclare vraie à tout instant, dans la langue qui se lit le plus clairement : OCL si le modèle doit être vérifié mécaniquement, du français s'il doit être lu.
Dérivé/ age: IntegerUne barre oblique en tête. La valeur est calculée à partir d'autres plutôt que stockée - précisément le drapeau dont un générateur de schéma et un relecteur ont tous deux besoin, et précisément celui qu'on oublie.
Lecture seule{readOnly}Fixé à la création et jamais ensuite. Sur une extrémité d'association, c'est la différence entre une référence que l'on peut repointer et une que l'on ne peut pas.
Xor{xor}Écrit sur un trait pointillé tracé entre deux associations : exactement une des deux peut être remplie pour un objet donné. Une facture va à une personne ou à une entreprise, jamais aux deux.
Ensemble de généralisation{complete, disjoint}À côté d'un groupe de généralisations partageant un parent. complete signifie que les sous-types couvrent tous les cas, disjoint que rien ne peut être deux d'entre eux à la fois. Les quatre combinaisons sont quatre modèles réellement différents.

Une convention hors de ce tableau mérite d'être connue parce qu'elle ressemble à un diagramme de classes sans en être un : un nom souligné de la forme order1: Order est une instance, et un diagramme fait de ceux-là est un diagramme d'objets - la même notation montrant un instant plutôt que tous les instants possibles. Un soulignement à l'intérieur d'une boîte de classe veut dire tout autre chose : c'est le marqueur statique du tableau des compartiments ci-dessus.

06Guillemets, et le reste#

Du texte entre guillemets français - «interface», «enumeration», «entity» - est un stéréotype : une extension du vocabulaire standard qui dit quelle sorte de chose est ce classifieur au-delà de « classe ». Une poignée sont définis par UML lui-même ; le reste vient d'un profil, le mécanisme pour inventer les vôtres sans quitter le langage.

Les guillemets font deux choses différentes, et la spécification les distingue même si rien sur la page ne le fait. «interface» et «enumeration» sont des mots-clés : partie d'UML, au sens fixé, légaux dans n'importe quel outil. «aggregate root» ou «pii» sont des stéréotypes : votre vocabulaire, défini dans un profil, porteur de sens uniquement pour un lecteur à qui on l'a expliqué. Les deux méritent d'être utilisés. Il vaut la peine de savoir lequel vous venez d'écrire, car le second a besoin d'une légende sur le diagramme et le premier non.

Un stéréotype peut aussi porter des valeurs étiquetées - {owner = payments-team, retention = 7y} sous une classe stéréotypée - et c'est ainsi qu'un modèle se met à contenir les métadonnées qu'un tableur contenait mal. C'est le mécanisme qu'un profil existe pour définir.

En une ligne chacun

  1. 01L'extrémité décorée est celle qui compte : triangle au parent, losange au tout, flèche vers l'utilisé.
  2. 02Triangle creux : généralisation ; triangle creux pointillé : réalisation - le trait plein hérite, le pointillé promet seulement.
  3. 03Losange plein : supprimé avec le tout ; losange creux : partagé et survivant.
  4. 04Une multiplicité décrit la classe qu'elle touche : lisez-la vers l'extrémité où elle se trouve.
  5. 05Une multiplicité vide signifie non spécifiée, pas « un » - c'est un manque dans le diagramme.
  6. 06Une barre oblique en tête signifie dérivé, les accolades une contrainte, un nom souligné une instance.
  7. 07Les guillemets marquent soit un mot-clé UML soit votre propre stéréotype ; seul le second demande une explication.

Pour voir tout cela sur de vrais modèles, lisez les exemples détaillés ; pour le raisonnement derrière les marques plutôt que les marques elles-mêmes, l' article sur le diagramme de classes.

07Questions fréquentes#

Que signifient les flèches d'un diagramme de classes UML ?

Un triangle creux est une généralisation et un triangle en pointillés une réalisation ; un losange plein est une composition et un losange creux une agrégation ; un trait simple est une association et une flèche ouverte en pointillés une dépendance. La pointe est toujours du côté le plus général ou possédant.

Quelle différence entre losange plein et losange creux ?

Le losange plein est la composition : la partie est supprimée avec le tout et appartient à exactement un tout. Le losange creux est l'agrégation : la partie peut être partagée et survit au tout. Au-delà de cette lecture, l'agrégation ne porte aucune sémantique formelle en UML 2.5.1.

Que signifient plus, moins et dièse devant un attribut ?

Ce sont des marqueurs de visibilité : plus pour public, moins pour privé, dièse pour protégé et tilde pour paquetage. Ils ont leur place sur un diagramme de conception, dont le sujet est la structure du code, et s'omettent en général sur un modèle de domaine.

Que signifie une barre oblique devant un nom d'attribut ?

Une barre oblique initiale marque l'attribut comme dérivé : sa valeur est calculée à partir d'autres attributs ou associations plutôt que stockée. Écrire /age sur une Personne qui porte déjà une date de naissance dit à un générateur de schéma de ne pas créer de colonne, et à un relecteur de ne pas chercher le code qui les garde en accord.

Quelle différence entre un mot-clé UML et un stéréotype ?

Les deux s'écrivent entre guillemets français et ce ne sont pas les mêmes choses. Un mot-clé comme interface ou enumeration fait partie d'UML lui-même et signifie la même chose dans tous les outils. Un stéréotype comme aggregate root est votre vocabulaire propre, défini dans un profil, et ne dit rien à un lecteur qu'on n'a pas prévenu : il lui faut donc une légende sur le diagramme, ce dont un mot-clé se passe.

Dans cette série

À lire aussi

Tous les articles