UML图

UML包括许多种类的图,其中使用最广泛的就是类图(Class Diagram)和时序图(Sequence Diagram)。

类图

  • 表达类(Class)的结构、类与类之间关系和包(Package)的结构的图;

类的结构

  • 属性(Attribute):同一个类中的成员变量;<保护符> <属性名>: <属性类型>

    • 例如:- name: std::string
  • 操作(Operation):同一个类中的成员方法;<保护符> <方法名>(): <返回值类型>

    • 例如:+ getName() : std::string
  • 三种详细等级

    • 概念型:只写类名 image-20230224213326219
    • 标准型(说明型):类名、属性名、重要的方法名以及成员可见性。此时可以省略属性和方法的类型。 image-20230224213720917
    • 实现型,怎么详细怎么写,包括类名,属性名、属性类型,所有方法的方法名、方法形参、方法形参的出入类型、方法的返回值类型,成员可见性等。 image-20230224213744120
  • 四种成员可见性(Visibility):同 面向对象编程语言中类的成员保护符;

    • public:公开,+
    • private:私有,-
    • protected:受保护的,#
    • package:在同一个包内,~
  • 抽象方法:同面向对象编程语言中类的抽象方法,使用斜体表示 image-20230224213929268

  • 成员方法的形参:<参数方向> <参数名>: <参数类型>

  • 三种参数方向类型

    • in:仅供输入,类似于函数的普通形参,例如:int test(int a) 此处的 a
    • out:仅供输出,类似于函数将指针/引用作为形参,且函数内只修改、不读取该指针/引用的值。
    • inout:
    • 既是输入又是输出,类似于函数将指针/引用作为形参,读取了该指针/引用的值,修改后再写回。
  • 参数或属性拥有默认值:在参数后加上=<默认值>即可; image-20230224225816388

  • 抽象类/接口:类名上方标<<abstract>>/<<interface>>image-20230224225921662

  • 对象图

    • 用于表示已实例化的类,即对象
    • 标题带下划线,且会用冒号指明实例化自哪个类(对象名: 类名)
    • 等号右侧的值是实际值/期待返回的实际值,而不是默认值
    • 对象间关系只有关联、依赖、共享聚集和组合聚集
    • 对象图常常以独立的图的形式出现(即一张图都是对象)

image-20230224230012159

类间关系

  • 关联(Association)
    • 单纯的一个类和另一个类有数量上的松散关系,两个类彼此是独立的
    • 这种联系是松散的而不是逻辑的(即不是一个包含另一个或一个继承另一个之类的强联系)
    • 举例:飞机关联航线,航线关联飞机
    • 线型:实线,无箭头
    • 线上写联系的简要描述(文字描述/函数名),下同
    • 数量关系,下同
      • 1:一对一
      • n:一对n
      • 0…1:可选,即没有或有1个
      • 0…n:至少0个(没有),至多n个
      • 0…*:任意多个
      • 1…*:至少有1个
      • m…n:至少有m个,至多有n个

image-20230224230210668

  • 单项关联(Unidirectional Association)

    • 只有一个类与另一个类有数量上的逻辑关系
    • 举例:提现请求与支付宝账号
    • 类型:实线,普通箭头,箭头从一个类出发指向与其关联的另一个类
  • 继承(Inheritance)

    • 同C++中类的继承,子类获得父类的部分属性和方法并可以重载
    • 举例:老师继承自人
    • 类型:实现,空心三角箭头,由子类指向父类
    • 很少见到继承的数量关系
  • 实现(Implement)

    • 同C++/Golang中的抽象类/接口的实现,且一般只在有抽象类/接口时才会使用
    • 举例:正方形类实现了形状抽象类
    • 类型:虚线,空心三角箭头,指向被实现的抽象类/接口
    • 很少见到实现的数量关系
  • 依赖(Dependency)

    • 表示一个类与另一个类有简单的依赖关系,一般是方法上的依赖
    • 举例:学生类的阅读方法依赖书类
    • 类型:虚线,普通箭头,指向被依赖的类
  • 共享聚集(Aggregation)

    • 类互相独立但可以聚集为一个新的类。当这个类消失时,聚集成它的类不会消失
    • 举例:课桌类可由椅子类和桌子类聚集。课桌拆散时桌子、椅子还在
    • 类型:实线,普通箭头,空心菱形线头。线头在聚集成的类处,箭头指向各个子类
  • 组合聚集(Combination)

    • 子类互相独立但必须依存于组合成的类存在。当组合成的类消失时,这些子类也会一并消失
    • 举例:公司可由公司的各个部门组合。公司解散后各部门也不复存在
    • 类型:实线,普通箭头,实心菱形线头。线头在组合成的类处,箭头指向各个子类

杂项

  • 注释
    • 一般放置在图旁边(或包范围内),起解释说明作用;

image-20230224230250786

评论