Diagrammes de flux
Expression graphique
Cartes mentales
Expression structurée
Notes
Expression efficace

Diagramme de classesSyntaxe

Diagramme de classes

Le diagramme de classes est le principal bloc de construction de la modélisation orientée objet. Il sert à la modélisation conceptuelle générale de la structure d'une application, ainsi qu'à la modélisation détaillée qui transforme le modèle en code de programmation. Le diagramme de classes peut également servir à la modélisation de données. Les classes d'un diagramme de classes représentent à la fois les principaux éléments et interactions d'une application, et les classes qu'il faut programmer.

Code
                            
Copier
Intégrer
--- title: Animal example --- classDiagram note "From Duck till Zebra" Animal <|-- Duck note for Duck "can fly can swim can dive can help in debugging" Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() }

Syntaxe

Classe

UML fournit des mécanismes pour représenter les membres d'une classe, tels que les propriétés et les méthodes, ainsi que leurs informations complémentaires. Une instance unique d'une classe comporte trois parties :

  • La partie supérieure contient le nom de la classe. Il est imprimé en gras et centré, avec la première lettre en majuscule. Elle peut également contenir un texte de commentaire facultatif décrivant la nature de la classe.
  • La partie centrale contient les propriétés de la classe. Elles sont alignées à gauche, avec la première lettre en minuscule.
  • La partie inférieure contient les opérations que la classe peut exécuter. Elles sont également alignées à gauche, avec la première lettre en minuscule.
Code
                            
Copier
Intégrer
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

Définir une classe

Il existe deux façons de définir une classe

  • Utiliser explicitement la syntaxe class (par exemple class Animal), ce qui définit la classe Animal.
  • Par une relation, qui définit simultanément deux classes et la relation entre elles (par exemple Vehicle <|-- Car).
Code
                            
Copier
Intégrer
classDiagram class Animal Vehicle <|-- Car

Convention de nommage : le nom d'une classe ne peut être composé que de caractères alphanumériques (y compris l'unicode), du tiret bas (_) et du tiret (-).

Étiquette de classe

Si vous devez fournir une étiquette à une classe, vous pouvez utiliser la syntaxe suivante :

Code
                            
Copier
Intégrer
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

Vous pouvez également utiliser des backticks (``) pour échapper les caractères spéciaux dans une étiquette :

Code
                            
Copier
Intégrer
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

Définir les membres d'une classe

UML fournit des mécanismes pour représenter les membres d'une classe (tels que les propriétés et les méthodes) ainsi que leurs informations complémentaires.

Mermaid fait la distinction entre les propriétés et les fonctions ou méthodes selon la présence ou non de parenthèses (). Ceux qui comportent () sont considérés comme des fonctions ou des méthodes, et tout le reste comme des propriétés.

Il existe deux façons de définir les membres d'une classe ; quelle que soit la syntaxe utilisée pour définir un membre, le résultat est identique. Les deux méthodes sont :

1. Utiliser le signe deux-points (:) suivi du nom du membre pour associer un membre à une classe ; cela est utile pour définir un seul membre à la fois. Par exemple :

Code
                            
Copier
Intégrer
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2. Utiliser des accolades {} pour associer les membres d'une classe, les membres étant regroupés à l'intérieur des accolades. Convient pour définir plusieurs membres à la fois. Par exemple :

Code
                            
Copier
Intégrer
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

Type de retour

Vous pouvez spécifier le type de données qui sera renvoyé à la fin d'une définition de méthode ou de fonction. Remarque : il doit y avoir un espace entre la dernière ')' et le type de retour. Un exemple :

Code
                            
Copier
Intégrer
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

Types génériques

Un type générique peut être représenté dans le cadre d'une définition de classe, et peut aussi être utilisé pour un membre de classe ou un type de retour. Pour représenter un élément comme un type générique, placez ce type entre des tildes (~). Les déclarations de types imbriqués telles que List<List<int>> sont prises en charge, mais les types génériques contenant des virgules, comme List<List<K, V>> , ne sont pas pris en charge actuellement.

Code
                            
Copier
Intégrer
classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ Square : +getDistanceMatrix() List~List~int~~

Visibilité

Pour décrire la visibilité d'une propriété ou d'une méthode/fonction, vous pouvez utiliser un symbole facultatif avant le nom de ce membre :

  • + Public
  • - Privé
  • # Protégé
  • ~ Interne

Définir une relation

Une relation est un terme général qui englobe les types spécifiques de connexions logiques rencontrés dans les diagrammes de classes et d'objets.

                            
Copier
Intégrer
[classA][Arrow][ClassB]

UML为类定义了八种不同类型的关系:

Type Description
<|-- Héritage
*-- Composition
o-- Agrégation
--> Association
-- Lien (plein)
..> Dépendance
..|> Réalisation
.. Lien (pointillé)
Code
                            
Copier
Intégrer
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

Nous pouvons utiliser des étiquettes pour décrire la nature de la relation entre deux classes. De plus, la flèche peut également être utilisée dans le sens inverse :

Code
                            
Copier
Intégrer
classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed)

Étiquette de relation

Vous pouvez ajouter un texte d'étiquette à une relation :

                            
Copier
Intégrer
[classA][Arrow][ClassB]:LabelText
Code
                            
Copier
Intégrer
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

Relation bidirectionnelle

Une relation bidirectionnelle peut logiquement représenter une association N:M :

Code
                            
Copier
Intégrer
classDiagram Animal <|--|> Zebra

语法如下:

                            
Copier
Intégrer
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

Type Description
<| Héritage
* Composition
o Agrégation
> Association
< Association
|> Réalisation

Link est l'un des suivants :

Type Description
-- Trait plein
.. Trait en pointillés

Interface en sucette

Une classe peut également se voir attribuer un type de relation particulier, qui définit une interface en sucette pour la classe. L'interface en sucette est définie à l'aide de la syntaxe suivante :

  • bar ()-- foo
  • foo --() bar

L'interface avec une sucette (bar) se connecte à la classe (foo).

Remarque : chaque interface définie est unique, dans le but de ne pas être partagée entre les classes et de ne pas autoriser plusieurs connexions pointant vers elle.

Code
                            
Copier
Intégrer
classDiagram bar ()-- foo
Code
                            
Copier
Intégrer
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

Définir un espace de noms

L'espace de noms regroupe les classes.

Code
                            
Copier
Intégrer
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

Cardinalité/multiplicité d'une relation

La multiplicité ou cardinalité dans un diagramme de classes indique le nombre d'instances d'une classe qui peuvent être associées aux instances d'une autre classe. Par exemple, chaque entreprise aura un ou plusieurs employés, jamais zéro, tandis que chaque employé travaille actuellement pour zéro ou une entreprise.

Le symbole de multiplicité est placé près de l'extrémité de l'association.

Les différentes options de cardinalité sont :

  • 1 un seul
  • 0..1 zéro ou un
  • 1..* un ou plusieurs
  • * zéro, un ou plusieurs
  • n n (où n>1)
  • 0..n de 0 à n (où n>1)
  • 1..n de 1 à n (où n>1)

La cardinalité peut être facilement définie en entourant l'option de texte de guillemets doubles ”“ , avant ou après la flèche donnée. Par exemple :

                            
Copier
Intégrer
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Code
                            
Copier
Intégrer
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

Annotations de classe

Les classes peuvent être annotées à l'aide de marqueurs afin de fournir des métadonnées complémentaires sur la classe. Cela permet d'indiquer plus clairement la nature de la classe. Parmi les annotations courantes figurent :

  • <<Interface>> représente une classe d'interface
  • <<Abstract>> représente une classe abstraite
  • <<Service>> représente une classe de service
  • <<Enumeration>> représente une énumération

Les annotations sont définies entre << au début et >> à la fin. Il existe trois façons d'ajouter des annotations à une classe ; les trois produisent le même résultat :

  • En ligne avec la définition de classe
                            
Copier
Intégrer
classDiagram class Shape <<interface>>

Sur une ligne distincte après la définition de la classe :

Code
                            
Copier
Intégrer
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • Dans la structure imbriquée de la définition de classe :
Code
                            
Copier
Intégrer
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

Commentaire

Vous pouvez saisir des commentaires dans un diagramme de classes ; l'éditeur les ignorera. Un commentaire doit occuper une ligne à lui seul et commencer par un double signe de pourcentage (%%) . Tout texte jusqu'à la ligne suivante est considéré comme un commentaire, y compris toute syntaxe de diagramme de classes.

Code
                            
Copier
Intégrer
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

Définir la direction du diagramme

Vous pouvez utiliser une instruction de direction pour définir la direction de rendu du diagramme de classes :

Code
                            
Copier
Intégrer
classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides

Interaction

Vous pouvez lier un événement de clic à un nœud. L'événement de clic peut déclencher une fonction de rappel JavaScript ou ouvrir un lien qui sera chargé dans un nouvel onglet du navigateur. Remarque : cette fonctionnalité est désactivée avec securityLevel='strict' et activée avec securityLevel='loose'.

Vous pouvez définir ces opérations sur une ligne distincte après toutes les déclarations de classes.

                            
Copier
Intégrer
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • action est link ou callback, selon le type d'interaction que vous souhaitez appeler.
  • className est l'id du nœud associé à l'opération.
  • reference peut être un lien URL ou le nom d'une fonction de rappel.
  • (Facultatif) L'info-bulle est la chaîne de caractères affichée lorsque le curseur survole l'élément.
  • La fonction de rappel sera appelée avec nodeId comme paramètre.

Remarque

Vous pouvez ajouter un commentaire sur le diagramme à l'aide de note "line1 line2". Vous pouvez ajouter un commentaire à une classe spécifique à l'aide de note for <CLASS NAME> "line1 line2".

Exemple

Code
                            
Copier
Intégrer
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

Lien URL :

Code
                            
Copier
Intégrer
classDiagram class Shape link Shape "https://www.github.com" "This is a tooltip for a link" class Shape2 click Shape2 href "https://www.github.com" "This is a tooltip for a link"

Configuration

Cadre des membres

Vous pouvez masquer le cadre des membres vide d'un nœud de classe ; cela se fait en modifiant la valeur hideEmptyMembersBox de la configuration du diagramme de classes.

Code
                            
Copier
Intégrer
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck