跳至主要內容

UML学习笔记

BradZhone大约 4 分钟学习笔记UML

UML学习笔记

1.关系线条类型

这里写图片描述
这里写图片描述

类与类之间由弱到强关系是: 没关系 < 依赖 < 关联 < 聚合 < 组合

类图:

  • +:public
  • -:private
  • #:protected

类间数量的对应关系

  • 1…1表示另一个类的一个对象只与该类的一个对象有关系
  • 0…* 表示另一个类的一个对象与该类的零个或多个对象有关系
  • 1…* 表示另一个类的一个对象与该类的一个或多个对象有关系
  • 0…1表示另一个类的一个对象没有或只与该类的一个对象有关系

都是从具体实现、派生类、部分等出发,指向接口、超类、整体等

  • 依赖:一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。eg 人使用了锤子就是依赖关系img

  • 关联:他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的。依赖在代码中主要体现为类A的某个成员方法的返回值、形参、局部变量或静态方法的调用,则表示类A引用了类B。eg 如一个人和他的同事之间的关系img

    • **依赖和关联区别:**我用锤子修了一下桌子,我和锤子之间就是一种依赖,我和我的同事就是一种关联。依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系。关联是类之间的一种关系,例如老师教学生,老公和老婆这种关系是非常明显的。依赖是比较陌生,关联是我们已经认识熟悉了
    • 发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。
    • 发生关联关系的两个类,类A成为类B的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。
    • 从关系的生命周期来看,依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束。
    • 关联关系当类实例化的时候产生,当类对象销毁的时候关系结束。
  • 继承:派生类指向超类。eg. Chinese -> Human这里写图片描述

  • 实现:实现类指向接口。eg. LandRover -> Car这里写图片描述

  • 聚合:整体指向部分,部分不需依附于整体存在。eg LandRover有Tire和Engine,且Tire和Engine可独立于LandRover存在这里写图片描述

  • 组合:整体指向部分,部分依附于整体存在,有相同的生命周期。eg YananMan有Head, Head脱离了YananMan无法独立存在这里写图片描述

    • 聚合和组合的区别:聚合类的构造函数中包含另一个类的实例作为参数,因为构造函数中传递另一个类的实例,因此学生可以脱离班级体独立存在。组合类的构造函数包含另一个类的实例化。因为在构造函数中进行实例化,因此两者紧密耦合在一起,同生同灭,学生不能脱离心脏而存在。
    • 在聚合关系中,客户端可以同时了解Classes类和Student类,因为他们是独立的。
    • 在组合关系中,客户端只认识Student类,根本不知道Heart类的存在,因为心脏类被严密地封装在学生类中。

2. 自动生成UML

使用Doxygen生成:

# 安装doxygen
apt install graphviz
apt install doxygen
# 生成配置文件
doxygen -g Doxygen.config
# 修改配置文件
# 主要修改参数如下,其他参数可根据需要修改
# EXTRACT_ALL            = YES
# HAVE_DOT               = YES
# UML_LOOK               = YES
# RECURSIVE              = YES
vim Doxygen.config
# 生成文档
doxygen Doxygen.config