【PlantUML】-类图

【PlantUML】-类图写在前面 UML 大家都听过 可是说清楚 能通过 UML 沟通的人倒不是很多

大家好,欢迎来到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::field2部分:属性,声明一个String类型的变量field end note note left of Clazz::Clazz3部分:方法,2个构造,1个普通 end note note left of Clazz::getField4部分:性质,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

(0)
上一篇 2025-08-24 22:15
下一篇 2025-08-24 22:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信