大家好,欢迎来到IT知识分享网。
写在前面
UML,大家都听过,可是说清楚,能通过UML沟通的人倒不是很多。画图能帮助我们快速回忆一些信息,也方便做大型方案设计。本文将基于IDEA的插件——PlantUML(关于如何安装,请看文档底部的系列文章)
,并结合plantuml官网,整理出基本的最常用的元素来说明如何绘制类图。如果遇到文章中未整理的其他元素,可自行再去查看官方文档。
目录
一、基本概念
类图,无非就是用图形来快速表示我们平常所写的代码。这里我将代码归纳为以下3类:
1、元素 代码中我们经常用到的元素有: 包、类、抽象类、接口、注解、枚举 属性(成员变量)、方法(构造方法、普通)、性质(get、set) 2、访问权限 私有、默认、保护、公开 静态、抽象 3、关系 继承、实现、依赖、关联(聚合和组合)
好了,接下来我们一一用PlantUML来表示说明。
二、具体步骤
1.环境说明
名称 | 说明 |
---|---|
Mac版本/操作系统/芯片 | MacBook Pro/macOS Monterey/Apple M1 Pro |
Intellij IDEA版本 | Intellij IDEA 2019.2.3(Ultimate Edition) |
PlantUML Integration | 2.23.0 |
2.元素
2.1 具体类
先说具体类,其他的大同小异。
具体类:用矩形框表示, 矩形框由上到下分为4个部分: 第1部分:类名称 第2部分:属性(成员变量) 第3部分:方法 第4部分:性质(get/set)
PlantUML文件后缀名为.puml
,文件以@startuml
开始,以@enduml
结束。
以下简单定义一个类,uml语法如下:
@startuml class Clazz {
field: String -- Clazz() Clazz(String field) method(): String -- getField(): String setField(String field): void } note top: 第1部分:类名, class用于声明一个类 note left of Clazz::field 第2部分:属性,声明一个String类型的变量field end note note left of Clazz::Clazz 第3部分:方法,2个构造,1个普通 end note note left of Clazz::getField 第4部分:性质,get/set方法 end note @enduml
public class Clazz {
String field; public Clazz() {
} public Clazz(String field) {
this.field = field; } String method() {
// return something return null; } public String getField() {
return field; } public void setField(String field) {
this.field = field; } }
2.2 抽象类、接口、注解、枚举
@startuml abstract class AbstractQueuedSynchronizer interface Iterable<T> annotation FunctionalInterface enum TimeUnit {
DAYS HOURS MINUTES } @enduml
2.3 包(命名空间)
@startuml package java.utils #EEE {
class A{
} class B{
} } note top: 用package关键字声明一个包 package java.util1 #EEE {
class A{
} class C{
} } note top: 不同的包中不能使用相同的类名(classA在util包中已经声明,所以在utils1包中没生效) namespace java.util2 #EEE {
class A{
} class C{
} } note top: 用namespace关键字声明一个工作空间,可以解决不同包同类名的问题 @enduml
@startuml class BaseClass namespace net.dummy #EEE {
.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
3.访问权限
符号表示:
-: private(当前类) #: protected(当前类、同包、子类) +: public(当前类、同包、子类、其他包) 不带符号表示default(当前类,同包),plantUML中用~表示 _: static(静态方法)
@startuml class Clazz {
- privateField: String ~ defaultField: String # protectedField: String + publicField: String {
static} staticField: String -- - privateMethod(): String ~ defaultMethod(): String # protectedMethod(): String + publicMethod(): String {
static} staticMethod(): String {
abstract} abstractMethod(): String -- + getPrivateField(): String + setPrivateField(): String } note left of Clazz::privateField 用-表示私有 end note note left of Clazz::defaultField 用~表示默认 end note note left of Clazz::protectedField 用#表示保护 end note note left of Clazz::publicField 用+表示公开 end note note left of Clazz::staticField 用{
static}表示静态 end note note right of Clazz::privateMethod 说明:方法与属性在图形上的区别是前者是空心,后者是实心 end note note right of Clazz::abstractMethod 用{
abstract}表示抽象 end note @enduml
4.关系
符号表示:
继承: 空心箭头 + 实线 由子指向父 实现: 空心箭头 + 虚线 由实现类指向接口 依赖: 箭头 + 虚线 由使用方指向被使用方,表示使用方对象持有被使用方对象的引用 方法入参(构造方法、静态方法、普通方法)、返回值、局部变量 关联(聚合、组合): 箭头 + 实线 聚合(空心棱形) 组合(实心棱形) 表达式: 数字:精确的数量 *或者0..*:表示0到多个 0..1:表示0或者1个 1..*:表示1个到多个
@startuml class A1 class B1 A1 <|-- B1 note bottom: 用<|--表示继承 class A2 class B2 A2 <|.. B2 note bottom: 用<|..表示实现 class A3 class B3 A3 <.. B3 note bottom: 用<..表示依赖 class A4 class B4 A4 <-- B4 note bottom: 用<--表示关联 class A5 class B5 A5 "*" --o "1" B5 note bottom: 用--o表示聚合,两边表示数量 class A6 class B6 A6 --* B6 note bottom: 用--*表示组合 @enduml
5.布局
@startuml class A class B A -- B: '-'可以替换成'*',同理 note right: 2个-代表垂直布局 class A1 class B1 A1 - B1 note right: 1个-代表水平布局 @enduml
三、参考资料
plantuml官网
写在后面
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。
系列文章
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129329.html