PlantUML类图
PlantUML类图
雨客 2016-04-08 11:38:03 浏览796 评论0
摘要: 类之间的关系 PlantUML用下面的符号来表示类之间的关系: 泛化,Generalization:<|-- 关联,Association:<-- 组合,Composition:*-- 聚合,Aggregation:o-- 实现,Realization:<|.. 依赖,Dependency:<.. 以上是常见的六种关系,--可以替换成..就可以得到虚线。
类之间的关系
PlantUML用下面的符号来表示类之间的关系:
- 泛化,
Generalization:<|-- - 关联,
Association:<-- - 组合,
Composition:*-- - 聚合,
Aggregation:o-- - 实现,
Realization:<|.. - 依赖,
Dependency:<..
以上是常见的六种关系,--可以替换成..就可以得到虚线。另外,其中的符号是可以改变方向的,例如:<|--表示右边的类泛化左边的类;--|>表示左边的类泛化右边的类。
例如,下面的是--:
@startuml
Class01 <|-- Class02:泛化
Class03 <-- Class04:关联
Class05 *-- Class06:组合
Class07 o-- Class08:聚合
Class09 -- Class10
@enduml
生成的类图如下:
--可以替换成..,对应的虚线:
@startuml
Class11 <|.. Class12:实现
Class13 <.. Class14:依赖
Class15 *.. Class16
Class17 o.. Class18
Class19 .. Class20
@enduml
生成的类图如下:
关系上的标签
可以在关系上添加标签,只需要在文本后面添加冒号和标签名称即可。可以在关联的两边使用双引号。例如:
@startuml
Class01 "1" *-- "many" Class02 : contains
Class03 o-- Class04 : aggregation
Class05 --> "1" Class06
@enduml
生成的类图如下:
你可以在关系上使用<或者>表名两个类之间的关系,例如:
@startuml
class Car
Driver - Car : drives >
Car *- Wheel : have 4 >
Car -- Person : < owns
@enduml
生成的类图如下:
上面的类图意思是:
- Driver 驾驶 Car
- Car 有4个 Wheel
- Person 拥有 Car
添加方法
在类名后面添加冒号可以添加方法和方法的参数,例如:
@startuml
Object <|-- ArrayList
Object : equals()
ArrayList : Object[] elementData
ArrayList : size()
@enduml
生成的类图如下:
也可以使用{}来定义所有的字段及字段和方法,例如:
@startuml
class Dummy {
String data
void methods()
}
class Flight {
flightNumber : Integer
departureTime : Date
}
@enduml
生成的类图如下:
定义可见性
以下符号定义字段或者方法的可见性:
-:private#:protected~:package private+:public
例如:
@startuml
class Dummy {
-field1
#field2
~method1()
+method2()
}
@enduml
你可以使用skinparam classAttributeIconSize 0关掉icon的显示:
@startuml
skinparam classAttributeIconSize 0
class Dummy {
-field1
#field2
~method1()
+method2()
}
@enduml
抽象和静态
你可以使用{static}或者{abstract}来修饰字段或者方法,修饰符需要在行的开头或者末尾使用。你也可以使用{classifier}代替{static}。
@startuml
class Dummy {
{static} String id
{classifier} String name
{abstract} void methods()
}
@enduml
类主体
默认的,字段和方法是由PlantUML自动分组的,你也可以使用: -- .. == __这些分隔符手动进行分组。
@startuml
class Foo1 {
You can use
several lines
..
as you want
and group
==
things together.
__
You can have as many groups
as you want
--
End of classes
}
class User {
.. Simple Getter ..
+ getName()
+ getAddress()
.. Some setter ..
+ setName()
__ private data __
int age
-- encrypted --
String password
}
@enduml
注释和原型
原型使用class、<<和>>进行定义。
注释使用note left of、note right of、note top of、note bottom of关键字进行定义。
你也可以在最后一个定义的类上使用note left、note right、note top、note bottom关键字。
注释可以使用..与其他对象进行连接。
@startuml
class Object << general >>
Object <|--- ArrayList
note top of Object : In java, every class\nextends this one.
note "This is a floating note" as N1
note "This note is connected\nto several objects." as N2
Object .. N2
N2 .. ArrayList
class Foo
note left: On last defined class
@enduml
注释的其他特性
注释可以使用一些html标签进行修饰:
<b><u><i><s>,<del>,<strike><font color="#AAAAAA">或者<font color="colorName"><color:#AAAAAA>或者<color:colorName><size:nn>该表font大小<img src="file">或者<img:file>,文件必须是可以访问的。
@startuml
class Foo
note left: On last defined class
note top of Object
In java, <size:18>every</size> <u>class</u>
<b>extends</b>
<i>this</i> one.
end note
note as N1
This note is <u>also</u>
<b><color:royalBlue>on several</color>
<s>words</s> lines
And this is hosted by <img:sourceforge.jpg>
end note
@enduml

连接上的注释
可以在连接上定义注释,只需要使用note on link,你可以使用note left on link、note right on link、note top on link、note bottom on link来改变注释的位置。
@startuml
class Dummy
Dummy --> Foo : A link
note on link #red: note that is red
Dummy --> Foo2 : Another link
note right on link #blue
this is my note on right link
and in blue
end note
@enduml
抽象类和接口
可以使用abstract或者interface来定义抽象类或者接口,也可以使用annotation、enum关键字来定义注解或者枚举。
@startuml
abstract class AbstractList
abstract AbstractCollection
interface List
interface Collection
List <|-- AbstractList
Collection <|-- AbstractCollection
Collection <|- List
AbstractCollection <|- AbstractList
AbstractList <|-- ArrayList
class ArrayList {
Object[] elementData
size()
}
enum TimeUnit {
DAYS
HOURS
MINUTES
}
annotation SuppressWarnings
@enduml
使用非字母
类名可以使用非字母的方式显示:
@startuml
class "This is my class" as class1
class class2 as "It works this way too"
class2 *-- "foo/dummy" : use
@enduml
隐藏字段和方法
@startuml
class Dummy1 {
+myMethods()
}
class Dummy2 {
+hiddenMethod()
}
class Dummy3 <<Serializable>> {
String name
}
hide members
hide <<Serializable>> circle
show Dummy1 methods
show <<Serializable>> fields
@enduml
隐藏类
@startuml
class Foo1
class Foo2
Foo2 *-- Foo1
hide Foo2
@enduml
使用泛型
@startuml
class Foo<? extends Element> {
int size()
}
Foo *- Element
@enduml
包
@startuml
package "Classic Collections" #yellow{
Object <|-- ArrayList
}
package net.sourceforge.plantuml {
Object <|-- Demo1
Demo1 *- Demo2
}
@enduml
包可以设置样式,也可以使用skinparam packageStyle设置为默认样式。
@startuml
scale 750 width
package foo1 <<Node>> {
class Class1
}
package foo2 <<Rect>> {
class Class2
}
package foo3 <<Folder>> {
class Class3
}
package foo4 <<Frame>> {
class Class4
}
package foo5 <<Cloud>> {
class Class5
}
package foo6 <<Database>> {
class Class6
}
@enduml
也可以在包之间设置联系:
@startuml
skinparam packageStyle rect
package foo1.foo2 {
}
package foo1.foo2.foo3 {
class Object
}
foo1.foo2 +-- foo1.foo2.foo3
@enduml
命名空间
命名空间内使用默认的类,需要在类名前加上点。
@startuml
class BaseClass
namespace net.dummy #DDDDDD {
.BaseClass <|-- Person
Meeting o-- Person
.BaseClass <|- Meeting
}
namespace net.foo {
net.dummy.Person <|- Person
.BaseClass <|-- Person
net.dummy.Meeting o-- Person
}
BaseClass <|-- net.unused.Person
@enduml
命名空间可以自动设置,通过set namespaceSeparator ???设置命名空间分隔符,使用set namespaceSeparator none可以关闭自动设置命名空间。
@startuml
set namespaceSeparator ::
class X1::X2::foo {
some info
}
@enduml
改变箭头方向
@startuml
Room o- Student
Room *-- Chair
@enduml
换个方向:
@startuml
Student -o Room
Chair --* Room
@enduml
也可以在箭头上使用left, right, up or down关键字:
@startuml
foo -left-> dummyLeft
foo -right-> dummyRight
foo -up-> dummyUp
foo -down-> dummyDown
@enduml
这些关键字可以使用开头的几个字符简写,例如,使用-d-代替-down-。
标题
使用title或者title end title。
@startuml
title Simple <b>example</b>\nof title
Object <|-- ArrayList
@enduml
设置Legend
@startuml
Object <|- ArrayList
legend right
<b>Object</b> and <b>ArrayList</b>
are simple class
endlegend
@enduml
关联类
一个类和两个类有关联时设置关系:
@startuml
class Student {
Name
}
Student "0..*" - "1..*" Course
(Student, Course) .. Enrollment
class Enrollment {
drop()
cancel()
}
@enduml
换一个方向:
@startuml
class Student {
Name
}
Student "0..*" -- "1..*" Course
(Student, Course) . Enrollment
class Enrollment {
drop()
cancel()
}
@enduml
其他
还有一些特性,如设置皮肤参数、颜色、拆分大文件等等,请参考官方文档。
例子
一个完整的例子:
@startuml
title class-diagram.png
scale 1.5
/'组合关系(composition)'/
class Human {
- Head mHead;
- Heart mHeart;
..
- CreditCard mCard;
--
+ void travel(Vehicle vehicle);
}
Human *-up- Head : contains >
Human *-up- Heart : contains >
/'聚合关系(aggregation)'/
Human o-left- CreditCard : owns >
/'依赖关系(dependency)'/
Human .down.> Vehicle : dependent
/'关联关系(association'/
Human -down-> Company : associate
/'继承关系(extention)'/
interface IProgram {
+ void program();
}
class Programmer {
+ void program();
}
Programmer -left-|> Human : extend
Programmer .up.|> IProgram : implement
@enduml
下面例子,参考自Class Diagram。
Java集合类图
@startuml
abstract class AbstractList
abstract AbstractCollection
interface List
interface Collection
List <|-- AbstractList
Collection <|-- AbstractCollection
Collection <|- List
AbstractCollection <|- AbstractList
AbstractList <|-- ArrayList
ArrayList : Object[] elementData
ArrayList : size()
enum TimeUnit
TimeUnit : DAYS
TimeUnit : HOURS
TimeUnit : MINUTES
@enduml
类和接口
@startuml
Object -- AbstractList
class ArrayList extends Object {
int size
}
interface List extends Collection {
add()
}
interface Set extends Collection
class TreeSet implements SortedSet
@enduml
Repository接口
@startuml
package framework <<Folder>>{
interface BasicRepository {
E find(Object pk);
List<E> findAll();
void save(E entity);
void update(E entity);
void remove(E entity);
}
class AbstractHibernateRepository << @Repository >> {
-EntityManager entityManager;
}
}
interface PartnerRepository {
List<PartnerEntity> findByFoo(...);
List<PartnerEntity> search(String pattern, int maxResult);
}
class HibernatePartnerRepository << @Repository >> {
}
class InMemoryPartnerRepository {
}
BasicRepository <|.. PartnerRepository
BasicRepository <|.. AbstractHibernateRepository
AbstractHibernateRepository <|-- HibernatePartnerRepository
PartnerRepository <|.. HibernatePartnerRepository
PartnerRepository <|.. InMemoryPartnerRepository
@enduml
Java异常层次
@startuml
namespace java.lang #DDDDDD {
class Error << unchecked >>
Throwable <|-- Error
Throwable <|-- Exception
Exception <|-- CloneNotSupportedException
Exception <|-- RuntimeException
RuntimeException <|-- ArithmeticException
RuntimeException <|-- ClassCastException
RuntimeException <|-- IllegalArgumentException
RuntimeException <|-- IllegalStateException
Exception <|-- ReflectiveOperationException
ReflectiveOperationException <|-- ClassNotFoundException
}
namespace java.io #DDDDDD {
java.lang.Exception <|-- IOException
IOException <|-- EOFException
IOException <|-- FileNotFoundException
}
namespace java.net #DDDDDD {
java.io.IOException <|-- MalformedURLException
java.io.IOException <|-- UnknownHostException
}
@enduml
PlantUML类图的更多相关文章
- [emacs] Drawing uml under emacs org-mode using plantUML - 类图
[emacs] Drawing uml under emacs org-mode using plantUML - 类图 // */ // ]]> [emacs] Drawing uml u ...
- UML作业第三次:分析《书店图书销售管理系统,绘制类图
plantuml类图绘制方法的学习: 1.关于类图的学习: 类图显示了系统的静态结构. 类:类图中的主要元素,用矩形表示.矩形的上层表示类名.中层表示属性.下层表示方法. 类之间的关系:关联.依赖.聚 ...
- mac版本idea使用(二)-如何安装PlantUML画时序图、类图
在跟踪spring源码的时候,看见网上的博客好多使用了idea自带的展示类继承关系图的功能,这个地方使用了idea的diagrams-show diagram,就可以显示类的继承图,很神奇的样子,记录 ...
- UML类图介绍以及PlantUML使用方法
类的UML表示方法 UML介绍 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图.它形象的描述出了系统的结构,帮助人们理解系统. 类图是 ...
- CentO7-使用plantuml绘制UML类图
准备工作 到PlantUml官网(http://plantuml.com/download)下载plantuml.jar.官网上还有一个在线的demof服务.plantuml的官网真的很挫! 到官网下 ...
- UML作业第二次:类图中类的表示
1.关于类图的学习: 类图显示了系统的静态结构. 类:类图中的主要元素,用矩形表示.矩形的上层表示类名.中层表示属性.下层表示方法. 类之间的关系:关联.依赖.聚集.泛化和实现五种. 2.五种类间关系 ...
- UML与软件建模:第二次作业(类图中类的表示)
一.类图 (1)类图定义 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图.它形象的描述出了系统的结构,帮助人们理解系统. 类图是在&q ...
- 练习UML类图中的类的表示
第一部分:UML类图(class diagram) 类图用来展现一组类.类的特性以及其类相互之间的关系,一个类图由一组类以及它们之间的关系构成,类图用来对系统的领域概念以及静态结构进行建模. 在软件模 ...
- UML作业第三次:分析《书店图书销售管理系统》,绘制类图
一. 类图语法学习小结(类间关系的表示方法) 1.抽象类和接口 我们用关键字abstract或abstract class来定义抽象类(抽象类用斜体显示).也可以使用interface,annotat ...
随机推荐
- 点滴拾遗 - 自定义 Format 控制 String.Format 行为
点击下载示例代码 String.Format 一重载方法的签名如下 public static string Format( IFormatProvider provider, string form ...
- python format用法详解
#常用方法:print('{0},{1}'.format('zhangk', 32)) print('{},{},{}'.format('zhangk','boy',32)) print('{name ...
- KETTLE元数据表
表名 说明 R_CLUSTER R_CLUSTER_SLAVE R_CONDITION R_DATABASE 数据库连接信息 R_DATABASE_ATTRIBUTE 数据库属性 R_DATABASE ...
- C++的反思与总结
博客作业学到的东西: 1.博客作业应该说是从寒假就开始了,因为博客作业,所以我寒假时都不敢玩得太疯狂,毕竟还有博客作业没做呢.有了博客作业,我就从一个连博客是什么都不知道无知少年,开始去了解博客是什么 ...
- 第二次c艹作业
1,c语言实现方法:按照电梯运行方式,改变被定义为全局变量的结构体的数值. c艹实现方法:用类来存放电梯的属性,整个过程都是对类操作. 两者不同:c语言是面向过程的,整个函数里都要对电梯的参数进行修改 ...
- Alpha-9
前言 失心疯病源9 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 熬夜肝代码 代码签入github 明天的计划 最好能够完成对接环节 准备展示内容 还剩下哪 ...
- texbbox,combobox设置属性
--输入框 $("#xx").textbox('setValue','value'); //设置输入框的值 $('#xx').textbox('textbox').attr('r ...
- 整理sql server数据类型
我们在平常开发过程中,在设计数据的时候,经常碰到数据类型选择的问题,为了更快,更合适地选择正确的数据类型,所以在这里做个总结. 分类 sql server 数据类型 c# 数据类型 描述 应用场景 字 ...
- 各种GIT代码托管工具比较
bitbucket免费支持5个开发成员的团队创建无限私有代码托管库. GOES是一个由GO语音编写的自组GIT托管服务. gitorious 是一个基于GIT版本控制系统的WEB项目托管平台,基于RU ...
- centOS7设置静态ip后无法上网的解决,【亲可测】
最近在VMware虚拟机里玩Centos,装好后发现上不了网.经过一番艰辛的折腾,终于找到出解决问题的方法了.最终的效果是无论是ping内网IP还是ping外网ip,都能正常ping通.方法四步走: ...