Diagramme de classes
Les diagrammes de classes sont conçus à l'aide d'une syntaxe qui reflète celle traditionnellement employée dans les langages de programmation. Cette ressemblance favorise un environnement familier pour les développeurs, facilitant ainsi un processus de création de diagrammes plus facile et plus intuitif. Cette approche de la conception est non seulement succincte, mais elle permet également de créer des représentations à la fois concises et expressives. De plus, elle permet la représentation des relations entre les classes à travers une syntaxe qui fait écho à celle des diagrammes de séquence, ouvrant la voie à une représentation fluide et perspicace des interactions entre les classes. Au-delà des représentations structurelles et relationnelles, la syntaxe des diagrammes de classes supporte d'autres enrichissements tels que l'inclusion de notes et l'application de couleurs, permettant aux utilisateurs de créer des diagrammes qui sont à la fois informatifs et visuellement attrayants. Vous pouvez en apprendre plus sur certaines des commandes communes dans PlantUML pour améliorer votre expérience de création de diagrammes.
Élément déclaratif
|
🎉 Copied!
|
|
[Réf. pour
protocol et struct: GH-1028, pour exception: QA-16258, pour record et dataclass: GH-2232]
[Ref. for protocol and struct: GH-1028, for exception: QA-16258, for record and dataclass: GH-2232]
WARNING
This translation need to be updated. WARNING
Relations entre classes
Les relations entre les classes sont définies en utilisant les symboles suivants :
| Type | Symbole | Objectif |
| Extension |
<|--
|
Spécialisation d'une classe dans une hiérarchie |
| Implémentation |
<|..
|
Réalisation d'une interface par une classe |
| Composition |
*--
|
La partie ne peut exister sans le tout |
| Agrégation |
o--
|
La partie peut exister indépendamment du tout |
| Dépendance |
-->
|
L'objet utilise un autre objet |
| Dépendance |
..>
|
Une forme plus faible de dépendance |
-- par .. pour obtenir une ligne
pointillée.
Grâce à ces règles, il est possible de faire les diagrammes suivants :
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
Libellés sur les relations
Il est possible de rajouter un libellé sur une relation, en utilisant les deux points :, suivi
du texte du libellé.
Pour les cardinalité, vous pouvez utiliser des guillemets "" des deux cotés
de la relation.
|
🎉 Copied!
|
|
Vous pouvez ajouter une flèche désignant quel objet agit sur l'autre en utilisant
< ou > au début ou à la fin du libellé.
|
🎉 Copied!
|
|
Caractères non alphabétiques dans les noms d'éléments et les étiquettes de relations
Si vous voulez utiliser autre chose que des lettres dans les noms des classes (ou les enums...), vous pouvez :
- Utiliser le mot-clé
asdans la définition de la classe - Metter des guillemets
""autour du nom de la classe
|
🎉 Copied!
|
|
Si un alias est assigné à un élément, le reste du fichier doit se référer à cet élément par cet alias et non son nom.
Commencer un nom avec $
Note : les noms qui commencent par $ ne peuvent pas être cachés ou supprimés par après, parce que les commandes hide et remove les considéreront comme une $etiquette et non comme un nom de composant. Pour supprimer de tels éléments, ils doivent avoir un alias ou une étiquette.
|
🎉 Copied!
|
|
Notez aussi que les noms qui commencent par
$ sont valides, mais que pour assigner un alias à un tel élément le nom doit être entre guillemets "".
Ajouter des méthodes
Pour déclarer des méthodes ou des champs, vous pouvez utiliser le caractère :
suivi de la méthode ou du champ.
Le système utilise la présence de parenthèses pour choisir entre méthodes et champs.
|
🎉 Copied!
|
|
Il est possible de regrouper tous les champs et méthodes en utilisant des crochets
{}.
Notez que la syntaxe est très souple sur l'ordre des champs et des méthodes.
|
🎉 Copied!
|
|
Vous pouvez utiliser les directives
{field} et {method} pour remplacer le comportement par défaut du système sur le choix entre champs et méthodes.
|
🎉 Copied!
|
|
Définition de la visibilité
Lorsque vous définissez des méthodes ou des champs, vous pouvez utiliser des caractères pour définir la visibilité de l'élément correspondant
| Caractère | Icône pour le champ | Icône de la méthode | Visibilité |
-
|
|
|
private
|
#
|
|
|
protected
|
~
|
|
|
package private
|
+
|
|
|
public
|
|
🎉 Copied!
|
|
Vous pouvez désactiver cette fonctionnalité à l'aide de la commande
skinparam classAttributeIconSize 0:
|
🎉 Copied!
|
|
Les indicateurs de visibilité sont facultatifs et peuvent être omis individuellement sans désactiver les icônes globalement à l'aide de
skinparam classAttributeIconSize 0.
|
🎉 Copied!
|
|
Dans le cas où vous voudriez utiliser des méthodes ou champs qui commencent par l'un des caractères
-, #, ~ ou +, échappez le premier caractère avec \. C'est utile dans certains langages, par exemple pour définir le destructeur de la classe Machin : ~Machin() :
|
🎉 Copied!
|
|
*[Ref. [QA-4755](https://forum.plantuml.net/4755/provide-display-visibility-attributes-private-protected)]*
WARNING
This translation need to be updated. WARNING
Visibility on compositions and aggregations
|
🎉 Copied!
|
|
[Ref. QA-8294]
Abstrait et statique
Vous pouvez définir une méthode statique ou abstraite ou un champ utilisant {static}
ou {abstract} modificateur.
Ce modificateur peut être utilisé au début ou à la fin de la ligne.
Vous pouvez alors utiliser {classifier} plutôt que {static}.
|
🎉 Copied!
|
|
Corps de classe avancé
Par défaut, méthodes et champs sont automatiquement regroupés par PlantUML.
Vous pouvez utiliser un séparateur pour définir votre propre manière d'ordonner les champs et les méthodes.
Les séparateurs suivants sont possibles : -- .. == __.
Vous pouvez aussi utiliser les titres dans les séparateurs.
|
🎉 Copied!
|
|
Notes et stéréotypes
Stéréotypes sont définies avec le mot clé class, << et >>.
Vous pouvez aussi définir une note en utilisant les mots clés note left of , note right of , note top of , note bottom of.
Vous pouvez aussi définir une note sur la dernière classe utilisant note left, note right,
note top, note bottom.
Une note peut aussi être définie le mot clé note, puis être lié à un autre objet en utilisant le symbole ...
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
Plus de notes
Il est également possible d'utiliser quelques balises HTML (voir expression créole) comme
<b><u><i><s>,<del>,<strike><font color="#AAAAAA">ou<font color="colorName"><color:#AAAAAA>ou<color:colorName><size:nn>pour changer la taille de la police<img src="file">ou<img:file>: le fichier doit être accessible par le système de fichiers
note left, note right,
note top , note bottom
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
Note sur un champ (champ, attribut, membre) ou une méthode
Il est possible d'ajouter une note sur un champ (champ, attribut, membre) ou une méthode.
⚠ Contrainte
- Ne peut pas être utilisé avec
topnibottom(seulsleftetrightsont implementés) - Ne peut pas être utilisé avec le séparateur d'espaces de nommage
::
Note sur un champ ou une méthode
|
🎉 Copied!
|
|
Note sur une méthode de même nom
|
🎉 Copied!
|
|
[Réf. QA-3474 et QA-5835]
Note sur les liens
Il est possible d'ajouter une note sur un lien, juste après la définition d'un lien, utiliser note on link.
Vous pouvez aussi utiliser note left on link, note right on link, note top on link,
note bottom on link si vous voulez changer la position relative de la note avec l'étiquette.
|
🎉 Copied!
|
|
Classe et interface abstraites
Vous pouvez déclarer une classe abstraite à l'aide des mots-clés abstract ou abstract class.
La classe sera imprimée en italique.
Vous pouvez également utiliser les mots-clés interface, annotation et enum
|
🎉 Copied!
|
|
[Ref. 'Annotation with members'Issue#458]
Masquer les attributs et les méthodes
Vous pouvez paramétrer l'affichage des classes à l'aide de la commande
hide/show .
La commande de base est: hide empty members. Cette commande va masquer la zone
des champs ou des méthodes si celle-ci est vide.
A la place de empty members, vous pouvez utiliser:
empty fieldsouempty attributespour des champs vides,empty methodspour des méthodes vides,fieldsorattributesqui masque les champs, même s'il y en a de définis,methodsqui masque les méthodes, même s'il y en a de définies,membersqui masque les méthodes ou les champs, même s'il y en a de définies,circlepour le caractère entouré en face du nom de la classe,stereotypepour le stéréotype.
hide ou show :
classpour toutes les classes,interfacepour toutes les interfaces,enumpour tous les enums,<<foo1>>pour les classes qui sont stéréotypée avec foo1,- Un nom de classe existant
show/hide pour définir des règles et des exceptions.
|
🎉 Copied!
|
|
Vous pouvez également combiner avec la visibilité :
|
🎉 Copied!
|
|
*[Ref. [QA-2913](https://forum.plantuml.net/2913/hiding-based-on-visibilty?show=2916#a2916)]*
Masquer les classes
Vous pouvez également utiliser les commandes show/hide pour masquer les classes.
Cela peut être utile si vous définissez un grand fichier !inclus,
et si vous voulez masquer certaines classes après l'inclusion du fichier
|
🎉 Copied!
|
|
Supprimer des classes
Vous pouvez également utiliser les commandes remove pour supprimer des classes.
Cela peut être utile si vous définissez un grand fichier !inclus,
et si vous voulez supprimer certaines classes après l'inclusion du fichier
|
🎉 Copied!
|
|
Cacher, Supprimer ou Remettre des éléments marqués (tagged) ou wildcard
Vous pouvez mettre $tags (avec $) sur des éléments, puis supprimer, cacher ou remettre des composants individuellement ou en utilisant des tags.
Par défaut, tous les composants sont visibles:
|
🎉 Copied!
|
|
Mais vous pouvez :
- cacher le composant
tag13avechide $tag13:
|
🎉 Copied!
|
|
- ou supprimer le composant
$tag13avecremove $tag13:
|
🎉 Copied!
|
|
- ou supprimer le composant
tag13et remettre le composanttag1avecremove $tag13etrestore $tag1:
|
🎉 Copied!
|
|
- ou supprimer tous les composants sauf
$tag1avecremove *etrestore $tag1:
|
🎉 Copied!
|
|
Masquer ou supprimer une classe non liée
Par défaut, toutes les classes sont affichées
|
🎉 Copied!
|
|
Mais vous pouvez :
hide @unlinkedclasses
|
🎉 Copied!
|
|
- ou
remove @unlinkedclasses
|
🎉 Copied!
|
|
[Adapté de QA-11052]
Utilisation de la généricité
Vous pouvez aussi utiliser les signes inférieur < et supérieur > pour définir l'utilisation de la généricité dans une classe.
|
🎉 Copied!
|
|
On peut désactiver ce comportement avec la commande
skinparam genericDisplay old.
Caractère spécial
Normalement, un caractère (C, I, E ou A) est utilisé pour les classes, les interfaces ou les énum.
Vous pouvez aussi utiliser le caractère de votre choix, en définissant le stéréotype
et en ajoutant une couleur, comme par exemple :
|
🎉 Copied!
|
|
Packages
Vous pouvez définir un package en utilisant le mot-clé package, et optionnellement
déclarer une couleur de fond pour votre package (en utilisant un code couleur HTML ou son nom).
Notez que les définitions de packages peuvent être imbriquées.
|
🎉 Copied!
|
|
Modèle de paquet
Il y a différents styles de paquets disponibles.
Vous pouvez les spécifier chacun par un réglage par défaut avec la commande : skinparam packageStyle,
ou par l'utilisation d'un stéréotype sur le paquet:
|
🎉 Copied!
|
|
Vous pouvez aussi définir les liens entre les paquets, comme dans l'exemple suivant :
|
🎉 Copied!
|
|
Les espaces de nommage
Depuis la version 1.2023.2 (publiée en béta) PlantUml a modifié le traitement des espaces de nommage et des packages.
Il n'y aura plus de différences entre espaces de nommage et packages : ces notions seront équivalentes.
Avec les packages, le nom de la classe est l'identifiant unique de la classe.
Cela signifie qu'on ne peux pas avoir deux classes avec le même nom dans deux packages différents.
Pour ce faire, vous devez utiliser des espace de nommage (namespace) à la place des packages.
Vous pouvez faire référence à des classes d'autres espace de nommage en les nommant complétement.
Les classes de l'espace de nommage par défaut (racine) sont nommées en commençant par un point.
Il n'est pas obligatoire de créer les espaces de nom. Un classe avec son nom complet sera
automatiquement ajoutée au bon espace de nommage.
|
🎉 Copied!
|
|
There won't be any difference between namespaces and packages anymore: both keywords are now synonymous.
WARNING
This translation need to be updated. WARNING
Creation automatique d'espace de nommage
Vous pouvez définir une autre séparateur (autre que le point) en utilisant la commande : set separator ???.
|
🎉 Copied!
|
|
Vous pouvez désactiver la création automatique d'espace de nommage en utilisant la commande
set separator none.
|
🎉 Copied!
|
|
Interface boucle
Vous pouvez aussi rajouter des interfaces sur les classes avec la syntaxe suivante:
bar ()- foobar ()-- foofoo -() bar
|
🎉 Copied!
|
|
Changer la direction des flèches
Par défaut, les liens entre les classe ont deux tirets -- et sont orientés verticalement. Il est possible d'utiliser une ligne horizontal en mettant un simple tiret (Ou un point) comme ceci:
|
🎉 Copied!
|
|
Vous pouvez aussi changer le sens en renversant le lien :
|
🎉 Copied!
|
|
Il est aussi possible de changer la direction d'une flèche en ajoutant les mots clés
left, right, up
ou down à l'intérieur de la flèche:
|
🎉 Copied!
|
|
Il est possible de raccourcir la flèche en n'utilisant que la première lettre de la direction (par exemple,
-d- au lieu de -down-) ou les deux premières
lettres (-do-)
Attention à ne pas abuser de cette fonctionnalité : GraphViz donne généralement de bons résultats sans trop de raffistolages.
Et avec le paramètre left to right direction:
|
🎉 Copied!
|
|
Classes d'association
Vous pouvez définir une classe d'association après qu'une relation ait été définie
entre deux classes, comme dans l'exemple suivant:
|
🎉 Copied!
|
|
Vous pouvez la définir dans une autre direction :
|
🎉 Copied!
|
|
Association sur la même classe
|
🎉 Copied!
|
|
[Réf. Incubation : Associations]
Personnalisation
La commande skinparam permet de changer la couleur et les polices de caractères.
Vous pouvez utiliser cette commande :
- Dans le diagramme, comme toutes les autre commandes,
- Dans un fichier inclus,
- Dans un fichier de configuration précisé par la ligne de commande ou la tâche ANT.
|
🎉 Copied!
|
|
Stéréotypes Personnalisés
Vous pouvez définir des couleurs et des fontes de caractères spécifiques pour les classes stéréotypées.
|
🎉 Copied!
|
|
Important: Contrairement aux stéréotypes des classes, il ne doit pas y avoir d'espaces entre skinparam et le stéréotype suivant. N'importe quel espace tel que
_ montré ci dessous fera que tous les skinparams seront ignorés
cf.discussion discord et issue #1932:
BackgroundColor_<<Foo>> Wheatskinparam stereotypeCBackgroundColor_<<Foo>> DimGray
Dégradé de couleurs
Vous pouvez déclarer des couleurs individuelles pour les classes, les notes, etc. en utilisant la notation #.
Vous pouvez utiliser des noms de couleurs standard ou des codes RVB dans diverses notations, voir Couleurs.
Vous pouvez également utiliser le dégradé de couleurs pour les couleurs de fond, avec la syntaxe suivante :
deux noms de couleurs séparés soit par :
|,/,\, ou-
|
🎉 Copied!
|
|
Aide pour la mise en page
Sometimes, the default layout is not perfect...
You can use together keyword to group some classes together :
the layout engine will try to group them (as if they were in the same package).
You can also use hidden links to force the layout.
|
🎉 Copied!
|
|
Découper les grands diagrammes
Parfois, vous obtiendrez des images de taille importante.
Vous pouvez utiliser la commande page (hpages)x(vpages) pour découper l'image en plusieurs fichiers:
hpages est le nombre de pages horizontales et vpages indique le nombre de pages verticales.
Vous pouvez aussi utiliser des paramètres spécifiques pour rajouter des bords sur les pages découpées (voir l'exemple).
|
🎉 Copied!
|
|
Extension et implementation [extends, implements]
Il est aussi possible d'utiliser directement les mots clés extends and implements.
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
[Ref. QA-2239]
Relations entre crochets (liens ou flèches) style
Style de ligne
Il est également possible d'avoir explicitement des relations, des liens ou des flèchesbold, dashed, dotted, hidden ou plain:- sans étiquette
|
🎉 Copied!
|
|
- avec étiquette
|
🎉 Copied!
|
|
[Adapté de QA-4181]
Couleur de ligne
|
🎉 Copied!
|
|
Épaisseur de ligne
|
🎉 Copied!
|
|
[Réf. QA-4949]
Mélange
|
🎉 Copied!
|
|
Modifier la couleur et le style d'une relation (lien ou flèche) (style en ligne)
Vous pouvez modifier la couleur ou le style d'une relation ou d'une flèche individuelle en utilisant la notation suivante en ligne
#color;line.[bold|dashed|dotted];text:color
|
🎉 Copied!
|
|
[Voir une fonctionnalité similaire sur le déploiement]
Modifier la couleur et le style d'une classe (style en ligne)
Vous pouvez modifier la couleur ou le style d'une classe individuelle en utilisant les deux notations suivantes
#color ##[style]color
#color), puis le style de ligne et la couleur de ligne (##[style]color )
|
🎉 Copied!
|
|
[Réf. QA-1487]
#[color|back:color];header:color;line:color;line.[bold|dashed|dotted];text:color
|
🎉 Copied!
|
|
Premier exemple original
|
🎉 Copied!
|
|
[Réf. QA-3770]
Flèches de/vers les membres de la classe
|
🎉 Copied!
|
|
Ref. QA-3636]
|
🎉 Copied!
|
|
[Réf. QA-5261]
Regroupement de flèche d'héritage
Vous pouvez fusionner toutes les têtes de flèche à l'aide de la fonction skinparam groupInheritance, avec un seuil comme paramètre.
GroupInheritance 1 (pas de regroupement)
|
🎉 Copied!
|
|
GroupInheritance 2 (regroupement à partir de 2)
|
🎉 Copied!
|
|
GroupInheritance 3 (regroupement uniquement à partir de 3)
|
🎉 Copied!
|
|
GroupInheritance 4 (regroupement uniquement à partir de 4)
|
🎉 Copied!
|
|
[Réf. QA-3193, et Défaut QA-13532]
Display JSON Data on Class or Object diagram
Simple example
|
🎉 Copied!
|
|
[Ref. QA-15481] For another example, see on JSON page.
Packages and Namespaces Enhancement
[From V1.2023.2+, and V1.2023.5]
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
[Ref. GH-1352]
Qualified associations
Minimal example
|
🎉 Copied!
|
|
[Ref. QA-16397, GH-1467]
Another example
|
🎉 Copied!
|
|
Change diagram orientation
You can change (whole) diagram orientation with:
top to bottom direction(by default)left to right direction
Top to bottom (by default)
With Graphviz (layout engine by default)
The main rule is: Nested element first, then simple element.
|
🎉 Copied!
|
|
With Smetana (internal layout engine)
The main rule is the opposite: Simple element first, then nested element.
|
🎉 Copied!
|
|
Left to right
With Graphviz (layout engine by default)
|
🎉 Copied!
|
|
With Smetana (internal layout engine)
|
🎉 Copied!
|
|
Role label to associations
|
🎉 Copied!
|
|
[Ref. GH-2536, GH-2537]