UML学习笔记
大约 4 分钟
UML学习笔记
1.关系线条类型
类与类之间由弱到强关系是: 没关系 < 依赖 < 关联 < 聚合 < 组合
类图:
- +:public
- -:private
- #:protected
类间数量的对应关系
- 1…1表示另一个类的一个对象只与该类的一个对象有关系
- 0…* 表示另一个类的一个对象与该类的零个或多个对象有关系
- 1…* 表示另一个类的一个对象与该类的一个或多个对象有关系
- 0…1表示另一个类的一个对象没有或只与该类的一个对象有关系
都是从具体实现、派生类、部分等出发,指向接口、超类、整体等
依赖:一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。eg 人使用了锤子就是依赖关系
关联:他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的。依赖在代码中主要体现为类A的某个成员方法的返回值、形参、局部变量或静态方法的调用,则表示类A引用了类B。eg 如一个人和他的同事之间的关系
- **依赖和关联区别:**我用锤子修了一下桌子,我和锤子之间就是一种依赖,我和我的同事就是一种关联。依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“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