0%

Markdown UML

本文介绍如何使用Markdown绘制UML图

  1. 创建UML类图

    1
    2
    <pre class="mermaid">   classDiagram
    // 以上为固定写法,此处开始创建对象与关系</pre>
  2. 类与接口

    • 创建

      1
      2
      3
      class A {

      }
           classDiagram
      class A {
          
      }
    • 类型

      符号 类型
      <> 接口
      <> 抽象类
      <> service类
      <> 枚举

      使用方式:

      1
      2
      3
      4
      5
      6
      7
      8
      // 方式一:内嵌
      class A {
      <<Interface>>
      }

      // 方式二:单独的行
      class B
      <<Interface>> B
           classDiagram
      class A {
          <>
      }
      class B
      <> B
    • 属性

      两种方式内联和单独指定

      方式一:

      1
      2
      3
      4
      5
      6
      7
      class A
      A : +String name
      A : -int age
      A : List~Object~ child //泛型变量
      A : +eat()
      A : +sleep(time) //有参数的方法
      A : +getAge() int //有返回值的方法
           classDiagram
      class A
      A : +String name
      A : -int age
      A : List~Object~ child    //泛型变量
      A : +eat()
      A : +sleep(time)          //有参数的方法
      A : +getAge() int         //有返回值的方法

      方式二:

      1
      2
      3
      4
      5
      6
      7
      8
      class B {
      +String name
      -int age
      List~Object~ child
      +eat()
      +sleep(time)
      +getAge() int
      }
           classDiagram
      class B {
          +String name
          -int age
          List~Object~ child
          +eat()
          +sleep(time)
          +getAge() int
      }

      元素可见范围:

      修饰符号 可见范围
      - private
      + public
      # protected
      ~ package
  3. 关系

    • 继承

      表示子类继承父类的所有特征和行为

      1
      ClassA <|-- ClassB  // class B extends A
           classDiagram
      ClassA <|-- ClassB
    • 实现

      类是接口所有特征和行为的实现

      1
      InterfaceA <|.. ClassB  // class B implements interface A
           classDiagram
      InterfaceA <|.. ClassB
    • 组合/聚合

      组合: 整体与部分的关系,但部分不能离开整体而单独存在 带实心菱形的实线,实心菱形指向整体

      聚合: 整体与部分的关系,且部分可以离开整体而单独存在 带空心菱形的实现,空心菱形指向整体。

      1
      ClassA *-- ClassB  // class B is part of A
           classDiagram
      ClassA *-- ClassB
    • 关联

      一个类知道另一个类的属性和方法;关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头

      1
      2
      ClassA -- ClassB
      ClassC <-- ClassD
           classDiagram
      ClassA -- ClassB
      ClassC <-- ClassD
    • 依赖

      一个类的实现需要另一个类的协助

      1
      ClassA <.. ClassB
           classDiagram
      ClassA <.. ClassB
    • 关系标识

      • 关系上添加标签

        1
        ClassA <.. ClassB : 依赖
               classDiagram
        ClassA <.. ClassB : 依赖
      • 关系上添加数量

        符号 含义
        1 1个
        0..1 0或1个
        1..* 1个或多个
        * 任意个
        n n个(n>1)
        0..n 0个到n个(n>0)
        1..n 1到n个(n>1)
        1
        ClassA "1" --> "*" ClassB
               classDiagram
        ClassA "1" --> "*" ClassB
  4. 例子

classDiagram
class Parent {
  <>
    +String name
    -int age
    #List children
    ~Float weight
    +eat()
    +sleep()
}

class Child {
    +String toy
    -Integer grade
}

Parent "1" <|-- "*" Child : 继承