1、前言
试过很多次想画类图,也试用过各种不同uml软件,但是那些图画出来,总感觉有点丑,也是一如既往的去找uml软件有什么好用的,最后发现plantUML,发现生成的格式是符合自己审美的。
2、环境
编辑器:VS Code
vs code插件:okazuki PlantUML
uml软件:PlantUML
辅助软件:Graphviz
3、安装插件
默认你安装了vs code了。
在vs code插件中心搜索uml,点安装,再点重新加载即可。
接着,按照插件说明,要在环境变量中设置JAVA_HOME(jdk的目录)、PLANTUML_JAR(plantuml的jar包地址)、GRAPHVIZ_DOT(Graphviz的执行文件地址)
下载plantUML你可以到官网下载:http://plantuml.com/download 下载graphviz到官网下载msi安装包就好了:https://graphviz.gitlab.io/_pages/Download/Download_windows.html
note:
最近发现好像教程的那个插件不见了,找下面这个插件,预览快捷键Alt+D,这个插件有格式限制,格式要为*.wsd, *.pu, *.puml, *.plantuml, *.iuml
才能使用快捷键,plantUML、graphviz按照上面安装配置环境变量即可
4、使用预览功能
随便写个文本文件即可。
我写的内容如下:
@startuml
interface ListIterator
interface Iterator
interface Collection
interface List
interface Set
interface Map
interface Map.Entry
interface Queue
interface Deque
abstract class AbstractCollection{
{abstract} +int size()
{abstract} +Iterator<E> iterator()
}
abstract class AbstractList{
+Iterator<E> iterator()
}
abstract class AbstractSet
abstract class AbstractMap{
{abstract} +Set<Entry<K,V>> entrySet()
}
abstract class AbstractSequentialList
abstract class Dictionary
class ArrayList
class Vector
class LinkedList
class HashSet
class Hashtable
class HashMap
class LinkedHashMap
Iterator <|-- ListIterator
Iterator <|-- Collection
Collection <|-- List
Collection <|-- Set
Collection <|.. AbstractCollection
Collection <|-- Queue
Queue <|-- Deque
Deque <|.. ArrayList
List <|.. AbstractList
List <|.. Vector
List <|.. LinkedList
Set <|.. AbstractSet
Set <|.. HashSet
Map <|.. AbstractMap
Map <|.. Hashtable
Map <|.. HashMap
Map <|.. LinkedHashMap
AbstractCollection <|-- AbstractList
AbstractCollection <|-- AbstractSet
AbstractList <|-- ArrayList
AbstractList <|-- Vector
AbstractList <|-- AbstractSequentialList
AbstractSet <|-- HashSet
AbstractSequentialList <|-- LinkedList
AbstractMap <|-- HashMap
Dictionary <|-- Hashtable
HashMap <|-- LinkedHashMap
note as N1 #green
AbstractCollection--iterator作为数据源
AbstractList--实现好的iterator作为数据源
ArrayList--数组是数据操作的对象
end note
note right of ArrayList:批量操作变为数组操作
@enduml
以上是阅读jdk集合框架画了个主要的类图。
接着使用快捷键:Ctrl+Shift+P 打开插件命令行,输入uml pre,基本是就是第一个了。
效果如下:
总得来说效果是很不错的。
5、类图语法
5.1、类声明
接口声明:interface 接口名
抽象类声明:abstract class 类名
类声明:class 类名
注解类声明:annotation 注解名
枚举类声明:enum 枚举类名
5.2、关系声明
关系的声明:
关系 | 符号 | 说明 |
接口与实现关系 | <|..或者..|> | 带空心三角型的虚线表示 |
依赖(Dependency)关系 | <..或者..> | 带箭头的虚线表示 |
单向关联(Association) | <-- 或者 --> | 带箭头的实线表示 |
双向关联 | -- | 直线表示 |
多重性关联 | “1..*”<--"0..*"或者 “0..*”--“1..*” | 关联直线上用一个数字或者一个数字的范围表示 |
聚合(Aggregation)关系 | o--或者--o | 英语O | 带空心菱形的直线表示 |
组合(Composition)关系 | *--或者--* | 带实心的菱形的直线表示 |
泛化关系(继承[Inheritance]) | <|-- 或者 --|> | 带空心三角型的直线表示 |
@startuml
class Impl
interface Interface
Interface <|.. Impl:实现
class Dep1
class Dep2
Dep2 <.. Dep1:依赖
class Ass1
class Ass2
Ass2 <-- Ass1:单向依赖
class Ass3
class Ass4
Ass4 -- Ass3:双向依赖
class Ass5
class Ass6
Ass6 "1..*"<--"0..1" Ass5:多重行依赖
class Agg1
class Agg2
Agg2 o-- Agg1:聚合
class Com1
class Com2
Com2 *-- Com1:组合
class Parent
class Sub
Parent <|-- Sub:继承
@enduml
5.3、声明方法的修饰符
5.4、注释/备注
5.4.1、对类注释
note后接方位词(left、right、top、bottom)
1.直接在对象下一行用:
class ArrayList
note right:批量操作变为数组操作
2.使用of+类名
class ArrayList
......中间若干行
note right of ArrayList:批量操作变为数组操作
5.4.2、不对类备注
1.使用:note “备注内容” as note的别名
note "This is a floating note" as N2
2.使用:note as note的别名 \n 备注内容 \n end note 语法块
note as N1
AbstractCollection--iterator作为数据源
AbstractList--实现好的iterator作为数据源
ArrayList--数组是数据操作的对象
end note
5.4.3、关系备注
1.关系:备注信息
2.直接在关系的下一行用