PlantUML学习笔记
系统学习 0 233

相关资源:

基本介绍

UML(Unified Modeling Language)是一种用于软件工程和系统设计的标准化建模语言。它是一种图形化工具,用于描述和可视化软件系统的结构、行为和交互。UML 的设计旨在帮助软件开发人员、系统分析师和设计师以一种标准的方式来表达和记录软件系统的设计和结构,从而有助于降低误解和沟通问题,提高软件开发的效率和质量。

UML 包括多种不同类型的图表,每种图表用于描述系统的不同方面。常用的图表有如下几种:

  • 类图: (对象模型中)用于描述系统中的类、对象、属性和方法之间的关系,以便建模系统的静态结构。
  • 时序图: (动态模型中)用于展示系统中不同对象之间的交互和消息传递,以便建模系统的动态行为。
  • 用例图: (功能模型中)用于表示系统的功能和用户与系统之间的交互。

现如今存在很多绘制UML的工具,比如PlantUML, Lucidchart, Draw.io, Microsoft Visio等。其中,PlantUML是一种开源的绘制 UML 图形的工具,它允许用户通过编写文本描述来创建 UML 图形,包括类图、时序图、用例图、活动图等等。与手动绘制 UML 图形或图形化的UML建模工具不同,PlantUML 的文本描述方法使 UML 图形的创建变得更加轻松和自动化。

语法说明

基础语法: *.puml

@startuml [name]
' ...
@enduml

类图

  • 类:
    • 结构: 类名、属性、方法
      class Class1 {
        - privateAttribute: String
        + method1(param1: String, param2: int): Integer
      }
    • 可见性:
      • 访问权限:
        • -: private
        • +: public
        • #: protected
        • ~: package/default
      • 命名空间:【需要加在类实现的前面】
        package MyPackage {
          class Class1
          class Class2
        }
    • 抽象:
      • 接口: interface [InterfaceName]
      • 抽象类: abstract class [AbtractClassName]
  • 类的关系:
    • 继承(Inheritance):

      • 泛化(Generalization): A --|> B(A泛化了B, 带空心箭头的实线)

        • 继承具体的类
      • 实现(Realization): A ..|> B(A实现了B, 带空心箭头的虚线)

        • 实现抽象类或者接口
          • 聚合(Aggregation): A --o B(A聚合到B上,带空心菱形箭头的实线)
      • 整体和部分不是强依赖的,即使整体不存在了,部分仍然存在

        • 组合(Composition): A --* B(A是B的一部分,带实心菱形箭头的实线)
      • 组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了

        • 关联(Association): A -- B/A --> B(A与B相关联,实线/带箭头的实线)
      • 是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的

      • 一般不强调方向,表示对象间相互知道;如果强调方向,表示A知道B,B不知道A
      • 通常体现为成员变量的形式

        • 依赖(Dependency): A ..> B(A依赖于B,带箭头的虚线)
      • 一个对象在运行期间会用到另一个对象

      • 是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化依赖关系也可能发生变化
      • 体现为类构造方法及类方法的传入参数,箭头的指向为调用关系
        • 多重性(Multiplicity): Class1 "1..3" --> "2" Class2【存在多种数量限制: 1, n, 1..*, 0..1, m..n

时序图

以AMT取钱为例:

@startuml withdraw money on ATM
!theme plain
actor User
participant ATM
participant "Bank Server" as Server
participant "Bank Account" as Account


activate ATM
User -> ATM : Insert Card
activate Server
ATM -> Server : Verify Card

alt if card is valid
  Server --> ATM : Card OK
  ATM -> User : Request PIN
else else
  Server --> ATM : Card Invalid
  ATM -> User : Eject Card
end

User -> ATM : PIN Entered
ATM -> Server : Verify PIN

alt if PIN is valid
  Server --> ATM : PIN OK
  ATM -> User : Request Amount
else else
  Server --> ATM : PIN Invalid
  ATM -> User : Eject Card
end

User --> ATM : Amount Entered
ATM -> Server : Start Transaction
activate Account
Server -> Account : Sufficient Funds?

alt funds are sufficient
  Account --> Server : Funds OK
  Server -> Account : Withdraw Amount
  Account --> Server : Withdraw Successful
  Server --> ATM : Transaction Successful
  ATM -> User : Dispense Cash
else
  Account --> Server : Insufficient Funds
  Server --> ATM : Transaction Unsuccessful
end

deactivate Account
deactivate Server

ATM -> User : Eject Card

deactivate ATM
@enduml

编写
预览