Comme il sera long, vous ne pouvez dessiner le diagramme qu'avec le diagramme de classes et le diagramme de séquence.
--Un type de DSL qui vous permet d'écrire des diagrammes UML dans du texte (probablement)
Le système d'exploitation est Windows 10.
Java
> java --version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.6+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.6+10, mixed mode)
La méthode d'installation est omise.
https://plantuml.com/ja/download
Déposez plantuml.jar
d'ici.
Au moment de la confirmation, il s'agissait de «plantuml.1.2020.7.jar».
Graphviz http://www.graphviz.org/download/
Cela ressemble au logiciel utilisé pour dessiner la figure. Graphviz - Wikipedia
Il est pratiquement nécessaire car il est nécessaire si vous souhaitez générer des diagrammes autres que des diagrammes de séquence et des diagrammes d'activités **.
J'ai laissé tomber "2.38".
Lorsque vous exécutez PlantUML, vous devez spécifier l'emplacement de dot.exe
dans Graphviz.
La méthode de désignation est l'une des suivantes (classée par ordre de priorité à adopter).
-graphvizdot
GRAPHVIZ_DOT
GRAPHVIZ_DOT
Si le dossier dans lequel Graphviz est installé est C: \ Graphviz
, spécifiez-le comme suit.
-Lorsqu'il est spécifié avec l'option graphvizdot
> java -jar plantuml.jar -graphvizdot C:\Graphviz\bin\dot.exe ...
Lorsque spécifié dans les propriétés système
> java -DGRAPHVIZ_DOT=C:\Graphviz\bin\dot.exe -jar plantuml.jar ...
Lorsqu'il est spécifié par la variable d'environnement
> set GRAPHVIZ_DOT
GRAPHVIZ_DOT=C:\Graphviz\bin\dot.exe
VSCode
Lorsque vous utilisez les plug-ins suivants, définissez la variable d'environnement GRAPHVIZ_DOT
avant d'exécuter VSCode.
PlantUML PlantUML - Visual Studio Marketplace
+
d` affichera l'aperçu@startuml ... @ enduml
s, le diagramme de l'emplacement actuel du curseur sera prévisualisé.Markdown Preview Enhanced Markdown Preview Enhanced - Visual Studio Marketplace
--Un plug-in qui vous permet de prévisualiser PlantUML dans Markdown
Ctrl
+ k
, v
Hello World
hello.pu
@startuml
Hello <|-- World
@enduml
--Créez un fichier texte et décrivez le contenu comme ↑
Courir
> java -jar plantuml.jar hello.pu
--Spécifiez le fichier texte créé comme argument et exécutez
--Ensuite, un fichier appelé hello.png
sera généré au même emplacement que le fichier spécifié par l'argument.
hello.png
> dir /b
fuga.pu
hoge.pu
piyo.pu
> java -jar plantuml.jar hoge.pu fuga.pu piyo.pu
> dir /b
fuga.png
fuga.pu
hoge.png
hoge.pu
piyo.png
piyo.pu
--Peut être exécuté en spécifiant le chemin du fichier comme argument --Plusieurs fichiers peuvent être spécifiés
Structure des dossiers
`-hoge/
|-plantuml.pu
|-markdown.md
|-JavaSource.java
`-fuga/
`-fuga.pu
hoge
.
――Le contenu de chacun est le suivantplantuml.pu
@startuml
class PlantUml
@enduml
markdown.md
```
@startuml
class Markdown
@enduml
```
JavaSource.java
/**
* @startuml
* class JavaSource {
* - String message
* }
* @enduml
*/
public class JavaSource {}
fuga
sous le dossier hoge
, et le fichier fuga.pu
se trouve en dessous.fuga.pu
@startuml
class Fuga
@enduml
> java -jar plantuml.jar hoge
Après exécution
`-hoge/
|-plantuml.pu
|-plantuml.png
|-markdown.md
|-JavaSource.java
|-JavaSource.png
`-fuga/
`-fuga.pu
--plantuml.png
et JavaSource.png
ont été générés
plantuml.png
JavaSource.png
.c
.h
.cpp
.txt
.pu
.tex
.html
.htm
.java
@ startuml
et se termine par @ enduml
, une image sera générée à partir de cette partie.> java -jar plantuml.jar "hoge/**"
--La partie où le dossier est spécifié est définie sur `` hoge / ** "`
Résultat d'exécution
`-hoge/
|-plantuml.pu
|-plantuml.png
|-markdown.md
|-markdown.png
|-JavaSource.java
|-JavaSource.png
`-fuga/
|-fuga.pu
`-fuga.png
--markdown.png
et fuga.png
sont également générés
markdown.png
fuga.png
*
Chaîne de caractères arbitraires
--? ʻUn seul caractère --
** `Tout sous-répertoire> java -jar plantuml -x "**/*.pu" "hoge/**"
Résultat d'exécution
`-hoge/
|-plantuml.pu
|-markdown.md
|-markdown.png
|-JavaSource.java
|-JavaSource.png
`-fuga/
`-fuga.pu
pu
n'ont pas été générés en tant que fichiers png.-x
> java -jar plantuml.jar -charset UTF-8 hello.pu
--Le code de caractère est spécifié avec l'option -charset
> type plantuml | java -jar plantuml.jar -pipe > result.png
--Si l'option -pipe
est spécifiée, elle sera lue à partir de l'entrée standard, donc les tubes seront possibles.
hoge.pu
@startuml
class Hoge
@enduml
@startuml
class Fuga
@enduml
@startuml
class Piyo
@enduml
--Quand il y a plusieurs descriptions @startuml ... @ enduml
dans un fichier
Courir
> java -jar plantuml.jar hoge.pu
Résultat d'exécution
> dir /b
hoge.png
hoge.pu
hoge_001.png
hoge_002.png
hoge.png
hoge_001.png
hoge_002.png
filename.png
--Le reste des chiffres est généré avec le numéro de série de nom de fichier_XXX.png
--Je n'ai pas essayé ce qui se passe s'il y en a plus de 1000hoge.pu
@startuml hoge
class Hoge
@enduml
@startuml fuga
class Fuga
@enduml
@startuml piyo
class Piyo
@enduml
@ startuml
Courir
> java -jar plantuml.jar hoge.pu
Résultat d'exécution
> dir /b
fuga.png
hoge.png
hoge.pu
piyo.png
hoge.png
fuga.png
pioy.png
@startuml name
.> java -jar plantuml.jar -h
-h
ou -help
@startuml no-scale
'Ceci est un commentaire
Hello <|-- World
@enduml
--De guillemet simple (`` ''), le reste est traité comme un commentaire
@startuml
title Hello Title
Hello <|-- World
@enduml
@startuml
title
Hello
Title
end title
Hello <|-- World
@enduml
title
et ʻend title`.@startuml
title
* __Hello__
* **World**
end title
Hello <|-- World
@enduml
@startuml
légende Figure 1
Hello <|-- World
@enduml
caption caption
@startuml
header Hello
Hello <|-- World
footer World
@enduml
commentaire d'en-tête d'en-tête
et commentaire de pied de page
.@startuml
left header Hello
Hello <|-- World
right footer World
@enduml
@startuml
header
Hello
Header
end header
Hello <|-- World
footer
World
Footer
end footer
@enduml
header ... end header
, footer ... end footer
, il peut être décrit sur plusieurs lignes.@startuml
legend
Hello World
end legend
Hello <|-- World
class FizzBuzz
@enduml
legend ... end legend
--Par défaut, il est placé en bas au centre@startuml right
legend right
Right
end legend
Hello <|-- World
class FizzBuzz
@enduml
--Si vous ne spécifiez que les positions gauche et droite, les positions supérieure et inférieure seront les positions par défaut «bas».
@startuml top
legend top
Top
end legend
Hello <|-- World
class FizzBuzz
@enduml
--Si vous ne spécifiez que les positions supérieure et inférieure, les positions gauche et droite seront le centre
par défaut.
@startuml top-left
legend top left
Top Left
end legend
Hello <|-- World
class FizzBuzz
@enduml
--Si les deux sont spécifiés, ils seront affichés à la position spécifiée.
@startuml no-scale
Hello <|-- World
@enduml
@startuml scale-1.5
scale 1.5
Hello <|-- World
@enduml
@startuml scale-0.5
scale 0.5
Hello <|-- World
@enduml
Creole
@startuml
note left
--Titre--
=Titre 1
==Titre 2
===Titre 3
--Liste non numérotée--
*Liste 1
*Liste 2
**Annonce 2-1
*Liste 3
--Numéroté--
#Liste numérotée 1
#Liste numérotée 2
##Liste numérotée 2-1
#Liste numérotée 3
--Décoration--
* **Audacieux**
* //italique//
* ""Police de largeur égale(monospace)""
* --Ligne d'annulation--
* __Souligner__
--table--
|= |= Column1 |= Column2 |
|1 |Value1-1 |Value1-2 |
|2 |Value2-1 |Value2-2 |
--HTML--
* <color:red>Spécification du nom de couleur</color>
* <color:#00FF00>Spécification du code couleur</color>
* <back:skyblue>Couleur de l'arrière plan</back>
* <size:18>taille de police</size>
* <b>Audacieux</b>
--Structure arborescente--
|_build.gradle
|_src
|_main
|_java
|_**bold**
|_--strike--
|_//itaric//
|___underline__
|_""monospace""
|_test
--Unicode--
* <U+20BB7>
--Escape--
* **Ce sera audacieux**
* ~**Cela ne devient pas audacieux**
--Horizon--
--Insérez le titre--
----
==Insérez le titre==
====
..Insérez le titre..
....
end note
@enduml
@startuml
skinparam DefaultFontName Meilio
Bonjour<|--monde
@enduml
skinparam DefaultFontName font name
.
--skinparam
peut spécifier divers paramètres de skin au formatskinparam <key> <value>
--DefaultFontName
est la clé pour spécifier la police par défaut
--Il est également possible de spécifier une police pour chaque élément spécifique, tel que «CaptionFontName» ou «ClassFontName».
--Une liste de valeurs pouvant être spécifiées pour «> java -jar plantuml.jar -language
...
;skinparameter
;536
ActivityBackgroundColor
ActivityBarColor
ActivityBorderColor
ActivityBorderThickness
ActivityDiamondBackgroundColor
ActivityDiamondBorderColor
ActivityDiamondFontColor
...
@startuml
class Hello
class World
@enduml
class <type name>
@startuml
interface Hello
interface World
@enduml
@startuml
abstract class Hello
@enduml
@startuml
enum HelloWorld {
ONE
TWO
THREE
}
@enduml
{...}
et y déclarer une constante.@startuml
Hello -- World
@enduml
<nom de type> <ligne représentant l'association> <nom de type>
, vous pouvez décrire l'association entre les types.
---
ne peut décrire que des associations simples
--Peut être utilisé avec des types non déclarés avec class <type name>
--Il est également possible de le décrire avec la déclaration@startuml
class One
One --> Two
Three <-- Four
Five <--> Six
Seven x-- Eight
Nine --x Ten
@enduml
--L'inductibilité peut être exprimée par «<», «>», «x».
@startuml
One ..> Two
Three <.. Four
@enduml
..>
et <..
@startuml
One --|> Two
Three <|-- Four
@enduml
<|--
, --|>
Peut exprimer la généralisation avec@startuml
One ..|> Two
Three <|.. Four
@enduml
..|>
, <|..
Peut exprimer la réalisation@startuml
One --o Two
Three o-- Four
@enduml
--o
, ʻo -`@startuml
One --* Two
Three *-- Four
@enduml
--La composition peut être exprimée par - *
, * -
@startuml
One -- Two : Hoge
Three -- Four : Fuga >
Five -- Six : < Piyo
@enduml
--Si vous mettez :
après la relation, vous pouvez écrire le nom de la relation après.
--En mettant <
, >
avant et après le nom associé, vous pouvez exprimer la direction du
@startuml
One "Foo" -- Two
Three -- "Bar" Four
Five "1" -- "1..*" Six
Seven "1 Fizz" -- "~* Buzz" Eight
@enduml
"
) entre le nom du type et la ligne associée.*
) comme * Buzz
, il sera traité comme une liste de notation créole, vous devez donc échapper avec ~
@startuml
class Hello {
one: String
three(param1: String, param2: int): boolean
String two
int four(List<String> param)
}
@enduml
--Les champs et les méthodes peuvent être déclarés à l'intérieur de class <type name>
suivi de crochets ondulés ({...}
).
--Peut être écrit non seulement dans la description formelle comme UML (nom de champ: nom de type
) mais aussi en écriture de type Java ( nom de champ de nom de type
)
――Il semble que vous puissiez écrire n'importe quoi, mais je pense qu'il est prudent d'utiliser la notation UML officielle.
@startuml
class Hello {
- privateField: int
# protectedField: int
~ packagePrivateField: int
+ publicField: int
- privateMethod(): void
# protectedMethod(): void
~ packagePrivateMethod(): void
+ publicMethod(): void
}
@enduml
--Si vous décrivez la visibilité en notation UML, ce sera un affichage d'icônes dédié
@startuml
skinparam classAttributeIconSize 0
class Hello {
- privateField: int
# protectedField: int
~ packagePrivateField: int
+ publicField: int
- privateMethod(): void
# protectedMethod(): void
~ packagePrivateMethod(): void
+ publicMethod(): void
}
@enduml
--Lorsque skinparam classAttributeIconSize 0
est défini, l'affichage de l'icône de visibilité disparaît.
@startuml
class Hello {
{abstract} one: int
{abstract} two(): int
}
@enduml
{abstract}
.@startuml
class Hello {
{static} ONE: int
{static} two(): int
}
@enduml
{static}
au début du membre.@startuml
class Hello <<Hoge>>
class World <<Fuga>> {
message: String
}
@enduml
@startuml
class Hello<H>
class World<W> <<Hoge>>
@enduml
@startuml
interface One
interface Two
interface Three extends Two
interface Four
class Five implements One, Three
class Six extends Five implements Four {
field: String
method(): void
}
@enduml
et ʻimplements
――Cela progresse@startuml
package one.two {
class Hello
}
package three.four {
World -- Hello
}
@enduml
package <nom> {...}
.Lorsque l'ordre de déclaration de colis est inversé
@startuml
package three.four {
World -- Hello
}
package one.two {
class Hello
}
@enduml
Hello
est censée être déclarée dans le package ʻone.two, mais elle est incluse dans le package
three.four` précédent.
――Il semble que vous l'ayez déclaré dans le paquet qui est apparu pour la première fois en le regardant dans l'ordre du haut.@startuml
class Fizz
note left: fizz
class Buzz
note right: buzz
class Foo
note top: foo
class Bar
note bottom: bar
@enduml
-Derrière la déclaration de classe etc.note <top|bottom|left|right>: <commentaire>
En écrivant, vous pouvez écrire une note pour l'élément immédiatement précédent.
@startuml
Fizz -- Buzz
note left of Fizz: fizz
note right of Buzz: buzz
@enduml
--note <position> de <target>: En écrivant <comment>
, vous pouvez ajouter une note à l'élément spécifié par <target>
.
@startuml
Fizz -- Buzz
note on link: fizz-buzz
note left: buzz
@enduml
note sur le lien: <commentaire>
après avoir décrit l'association entre les types.@startuml
note "Hello World" as n1
Hello -- n1
World .. n1
note "Fizz Buzz" as n2
@enduml
note" <commentaire> "comme <nom>
.@startuml
class Hello
note left
Hello
World
end note
Fizz -- Buzz
note on link
Fizz
Buzz
end note
note left of Fizz
fizz
buzz
end note
note as n1
Foo
Bar
end note
@enduml
@startuml
Alice -> Bob: Hi
Bob --> Alice: Hi
Alice -> Bob: Is this a pen?
Bob --> Alice: No! This is an apple!!
@enduml
<élément> <message> <élément>: <nom du message>
.
--<message>
devient un message synchrone avec->
--->
rend la ligne pointillée et peut être utilisée dans les messages de réponse@startuml
Alice ->> Bob: Hi
Alice ->> Bob: Is this a pen?
Alice ->> Bob: Is this a pen??
Alice ->> Bob: Is this a pen???
Alice ->> Bob: Is this a pen????
Bob -> Alice: This is an apple!!!
@enduml
- >>
@startuml
participant Alice
participant Bob
participant Carol
Carol -> Bob: Is the tip included?
Bob -> Alice:Serez-vous capable de dépasser Teppen un jour?
@enduml
--Si vous ne faites rien, les lignes de vie seront disposées à partir de la gauche dans l'ordre dans lequel elles apparaissent du haut.
--Si vous souhaitez spécifier l'ordre des lignes de vie, définissez une séquence distincte sous la forme de paritcipant <nom de la ligne de vie>
.
@startuml
actor Actor
boundary Boundary
control Control
entity Entity
database Database
collections Collections
@enduml
participant
, vous pouvez utiliser l'icône en fonction du rôle.@startuml
Aclie -> Aclie:Ne t'enfuis pas
Aclie -> Aclie:Ne t'enfuis pas
Aclie -> Aclie:Ne t'enfuis pas
Aclie -> Aclie:Ne t'enfuis pas
Aclie -> Aclie:Ne t'enfuis pas
@enduml
@startuml
Alice -> Bob: Hi
autonumber
Bob -> Carol: Hi
Carol -> Dave: Hi
Bob -> Dave: Hi
@enduml
@startuml
autonumber 3
Alice -> Bob: Hi
Bob -> Carol: Hi
autonumber 2 3
Carol -> Dave: Hi
Bob -> Dave: Hi
@enduml
@startuml
autonumber
Alice -> Bob: Hi
autonumber stop
Bob -> Carol: Hi
Carol -> Dave: Hi
autonumber resume
Bob -> Dave: Hi
Carol -> Dave: Hi
@enduml
@startuml
Alice -> Bob: Is this a pen?
alt yes
Alice <-- Bob: Yes! This is a pen!!
else no
Alice <-- Bob: Noooooooo! This is an apple!!!!!
end
@enduml
alt
/else
opt
loop
par
break
critical
Lorsqu'il est imbriqué
@startuml
Alice -> Bob: Is this a pen?
alt yes
Alice <-- Bob: Yes! This is a pen!!
else no
Alice <-- Bob: Noooooooo! This is an apple!!!!!
loop ∞
Alice -> Bob: Oh sorry! By the way, is this a pen?
Alice <-- Bob: Noooooooooooooooooo!!!!
end
end
@enduml
@startuml
copie de groupe
Alice -> Bob: Is this a pen?
Alice <-- Bob: No! This is an apple!!
end
@enduml
groupe <nom>
@startuml
activate Alice
Alice -> Bob
activate Bob
Bob -> Carol
activate Carol
Bob <-- Carol
deactivate Carol
Alice <-- Bob
deactivate Bob
@enduml
--ʻActivate
disable <nom>
@startuml
activate Alice
Alice -> Bob
activate Bob
Bob -> Bob
activate Bob
Bob -> Carol
activate Carol
Bob <-- Carol
deactivate Carol
Alice <-- Bob
deactivate Bob
@enduml
@startuml
Alice -> Bob
create Carol
Bob -> Carol: new
Bob -> Carol
Bob <-- Carol
Alice <-- Bob
@enduml
create <nom>
, vous pouvez créer une ligne de vie avec le nom spécifié à partir du milieu.@startuml
Alice -> Bob
ref over Bob, Carol:Voir là-bas
Alice <-- Bob
ref over Alice
Là bas
référence
end ref
@enduml
ref over <objet à inclure dans la référence>: <description>
.
-Vous pouvez spécifier plusieurs noms de ligne de vie séparés par des virgules pour la cible incluse dans la référence.
--Il est également possible de décrire en plusieurs lignes en définissant ref over ... end ref
@startuml
== Foo ==
Alice -> Bob
Alice <-- Bob
== Bar ==
Bob -> Carol
Bob <-- Carol
@enduml
== <nom> ==
@startuml
[-> Alice: Hello
Alice ->]: Hello
@enduml
--En utilisant [
, ]
au lieu du nom de la ligne de vie, vous pouvez écrire un message de l'extérieur (vers)
@startuml
Alice -> Bob
Alice <-- Bob
Alice -> Bob
Alice <-- Bob
|||
Alice -> Bob
Alice <-- Bob
||80||
Alice -> Bob
Alice <-- Bob
@enduml
-Entre les messages|||
Vous pouvez laisser un peu d'espace en sandwich
||<pixel>||
とすれば、間隔の大きさをpixelで指定できる@startuml
Alice -> Bob
note left: Hello
Alice <-- Bob
note right: World
Alice -> Alice
note left
Hello
World
end note
@enduml
top
et bottom
ne peuvent pas être utilisés (s'ils sont utilisés, ils seront interprétés comme un diagramme de classes)
--Il est possible d'écrire sur plusieurs lignes en définissant note <left | right> ... end note
.build.gradle
plugins {
id "application"
}
sourceCompatibility = 11
targetCompatibility = 11
compileJava.options.encoding = "UTF-8"
mainClassName = "sandbox.plantuml.Main"
repositories {
mavenCentral()
}
dependencies {
implementation "net.sourceforge.plantuml:plantuml:8059"
}
-Ajouter net.sourceforge.plantuml: plantuml à la dépendance
Main.java
package sandbox.plantuml;
import net.sourceforge.plantuml.SourceStringReader;
import java.io.File;
public class Main {
public static void main(String[] args) throws Exception {
String source = "@startuml\n"
+ "Foo <-- Bar\n"
+ "@enduml";
final SourceStringReader reader = new SourceStringReader(source);
reader.generateImage(new File("result.png "));
}
}
SourceStringReader
pour lire la source de String
et générer une image.generateImage (File)
.
--S'il y a plusieurs @startuml ... @ enduml
s, seule la première image sera généréeRésultat d'exécution
> gradle run
...
GRAPHVIZ_DOT
doit être définie telle quelle lors de l'exécution à partir de la ligne de commande.Main.java
package sandbox.plantuml;
import net.sourceforge.plantuml.SourceStringReader;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Main {
public static void main(String[] args) throws Exception {
String source = "@startuml FooBar\n"
+ "Foo <-- Bar\n"
+ "@enduml\n"
+ "\n"
+ "@startuml FizzBuzz\n"
+ "Fizz <-- Buzz\n"
+ "@enduml";
final SourceStringReader reader = new SourceStringReader(source);
try (
OutputStream fooBar = new FileOutputStream("foobar.png ");
OutputStream fizzBuzz = new FileOutputStream("fizzbuzz.png ");
) {
reader.generateImage(fooBar, 0);
reader.generateImage(fizzBuzz, 1);
}
}
}
generateImage (OutputStream, int)
pour générer l'image avec le nombre spécifié.Structure des dossiers
|-source.pu
|-build.gradle
`-src/main/java/
`-sandbox/plantuml/
`-Main.java
source.pu
source.pu
@startuml FooBar
Foo <-- Bar
@enduml
@startuml FizzBuzz
Fizz <-- Buzz
@enduml
――Deux chiffres sont définis
Main.java
package sandbox.plantuml;
import net.sourceforge.plantuml.SourceFileReader;
import java.io.File;
public class Main {
public static void main(String[] args) throws Exception {
final SourceFileReader reader = new SourceFileReader(new File("source.pu"));
reader.getGeneratedImages();
}
}
--Lecture du fichier source avec SourceFileReader
--Lorsque vous exécutez getGeneratedImages ()
, des images sont générées.
Résultat d'exécution
> gradle run
...
Structure des dossiers
|-source.pu
|-FooBar.png
|-FizzBuzz.png
|-build.gradle
`-src/main/java/
`-sandbox/plantuml/
`-Main.java
FooBar.png
FizzBuzz.png
getGeneratedImage ()
retourne Liste
de l'objet File
qui représente le fichier image généréRecommended Posts