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).
-graphvizdotGRAPHVIZ_DOTGRAPHVIZ_DOTSi 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 ... @ endumls, 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
@ startumlCourir
> 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/elseoptloopparbreakcriticalLorsqu'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 ... @ endumls, 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.pusource.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