UML-ClassDiagram基本语法
2024-04-09 16:15:45  阅读数 9863

注意:本文是基于mermaid的规范编写的,其余类似PlantUML、语雀等第三方工具,语法基本一致。

零、本文纲要

  • 一、 UML基本使用
  1. 定义一个类
  2. 定义类的方法与属性
  3. 返回类型
  4. 泛型(使用~~包裹)
  5. 可见性(访问修饰符)
  6. 关系描述
  7. 关系标签
  8. 类修饰
  9. 注释
  • 二、 类与类之间的关系
  1. 关联关系
  2. 聚合关系(强关联关系)
  3. 组合关系(强聚合关系)
  4. 依赖关系
  5. 继承关系
  6. 实现关系

一、 UML基本使用

mermaid官方网址:Class Diagram (mermaid-js.github.io)

使用classDiagram开启类图编辑

1. 定义一个类

① 使用class关键字

语法:class 类名

如:class Employee

2. 定义类的方法与属性

  • ① 方式一

语法:

类名 : 修饰符 属性
注意:修饰符与属性或者方法间不能有space空格

类名 : 修饰符 方法(参数) 返回值
注意:方法的)与返回值之间必须有space空格

classDiagram    
    class Employee
    Employee : +String name
    Employee : +String password
    Employee : +setLeader(Employee leader) Employee
  • ② 方式二

语法:

class 类名{
修饰符 属性
修饰符 方法 返回值
}

classDiagram
    class Employee{
        -String name
        -String password
        +setLeader(Employee leader) Employee
    }
使用UML描述一个类.png

3. 返回类型

语法:

修饰符 方法(参数) 返回值

4. 泛型(使用~~包裹)

语法:

修饰符 方法(参数类型泛型 参数名) 返回值

如:+setLeaders(List~Employee~ leaders) List~Employee~

表示 public List<Employee> setLeaders(List<Employee> leaders){...}方法

5. 可见性(访问修饰符)

访问修饰符需要与被修饰的方法或者属性一起使用,中间不能有space空格

符号 含义
+ Public
- Private
# Protected
~ Package/Internal

抽象、静态的表示会有不同,这两个符号需要在方法的)后面紧跟,不能有space空格。不能修饰属性

符号 含义
* abstract
$ static

显示上,<u>抽象方法会有下划线</u>,静态方法则表现为斜体

6. 关系描述

Type Description
<|-- Inheritance 继承
*-- Composition 组合
o-- Aggregation 聚合
--> Association 关联
-- Link (Solid) 连接实线
..> Dependency 依赖
..|> Realization 实现
.. Link (Dashed) 连接虚线
classDiagram
classA --|> classB : Inheritance
classC --* classD : Composition
classE --o classF : Aggregation
classG --> classH : Association
classI -- classJ : Link(Solid)
classK ..> classL : Dependency
classM ..|> classN : Realization
classO .. classP : Link(Dashed)
关系描述.png

7. 关系标签

语法:[类A][关系描述][类B] : 标签描述

如:classA --|> classB : Inheritance

8. 类修饰

Type Description
<<Interface>> 接口
<<abstract>> 抽象类
<<enumeration>> 枚举类

方式一:

classDiagram
    class Shape
    <<interface>> Shape
    Shape : noOfVertices
    Shape : draw()

方式二:

classDiagram
class Shape{
    <<interface>>
    noOfVertices
    draw()
}

枚举类会稍微特殊一些,如下:

class Color{
    <<enumeration>>
    RED
    BLUE
    GREEN
    WHITE
    BLACK
}

9. 注释

语法:%% 注释内容

classDiagram
    %% This whole line is a comment classDiagram class Shape <<interface>>
    class Shape{
        <<interface>>
        noOfVertices
        draw()
    }

注意:由于版本问题,目前主流支持UML的工具暂不支持该语法。
比如,plantuml工具则是使用note来添加备注。

二、 类与类之间的关系

1. 关联关系

简言之:一个类中存在一个属性是另一个类。

  • ① 单向关联

表示一个User用户类,包含一个属性是Address地址类,如下:

classDiagram
    class User{
        -Address address
    }
    class Address
    User --> Address
单向关联.png
  • ② 双向关联

表示User用户类内部包含Order属性,Order订单类内部包含User属性,如下:

classDiagram
    class User{
        -List~Order~ orders
    }
    class Order{
        -User user
    }
    User <--> Order
双向关联.png
  • ③ 自关联

表示TreeNode二叉树类包含TreeNode属性,如下:

classDiagram
    class TreeNode{
        -int val
        -TreeNode left
        -TreeNode right
    }
    TreeNode --> TreeNode
自关联.png

2. 聚合关系(强关联关系)

简言之:整体与部分之间的关系,部分可以单独存在。

表示SetMeal套餐类聚合了Dish菜品类,如下:

classDiagram
    class Dish
    class SetMeal{
        -List~Dish~ dishes
    }
    SetMeal o-- Dish
聚合关系.png

3. 组合关系(强聚合关系)

简言之:整体与部分之间的关系,部分不能单独存在。

表示LinkedList类组合了Node类,Node类不能单独存在,如下:

classDiagram
    class Node
    class LinkedList{
        -List~Node~ nodes
    }
    LinkedList *-- Node
组合关系.png

注意:此处这个例子不是非常恰当,暂时没有找到合适的例子。

4. 依赖关系

简言之:某个类与另一个类之间存在使用关系。

某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法。

Collection内部使用Iterator的方法(具体可见Collection接口的实现类),如下:

classDiagram
    class Collection{
        <<Interface>>
        +iterator() Iterator~E~
    }
    class Iterator~E~{
        <<Interface>>
        +hasNext() boolean
        +next() E
    }
    Collection ..> Iterator
依赖关系.png

注意:此处可以看ArrayList类,以及其内部Itr类。

5. 继承关系

简言之:父类与子类的关系。

LinkedHashSet类继承HashSet类,如下:

classDiagram
    class HashSet~E~
    class LinkedHashSet~E~
    HashSet <|-- LinkedHashSet
继承关系.png

6. 实现关系

简言之:接口与实现类的关系。

ArrayList类实现List接口,如下:

classDiagram
    class List~E~{
        <<Interface>>
    }
    class ArrayList~E~
    List <|.. ArrayList
实现关系.png

三、结尾

以上即为UML-ClassDiagram基本语法的全部内容,感谢阅读。