定义和由来
UML是一种面向对象建模技术,通过使用标准图像符号和文字来可视化描述面向对象编程范式项目的软件架构以及其中元素之间的关系。UML于1996年发布,后续持续更新迭代,03年发布2.0版本,15年发布2.5版本,为目前最新版本。
概述
UML大致分为三个部分
- 视图:对于同一个项目的不同观察视角,可以分为用户视图,结构视图,行为视图,实现视图和环境视图,
- 常用的是结构视图
- 图:如果说把UML类比做一个积木城堡,视图是观察城堡的不同角度,图就是构建城堡的积木,包括例图,类图,对象图,等等
- 类图最常用
- 模型元素:顾名思义,就是项目中的元素,指UML图中的一些概念,如类,对象,消息等,这些元素在不同的视图中必须统一,不能有歧义
- 就是一个概念,基本用不到
- 通用机制:UML提供的通用机制为模型元素提供额外的注释、信息和语义
- 新手基本用不到
类图以及类图使用到的元素
类图最常用,只讲类图,其他的自己网上找教程。
类本身
-
例子
-
定义方式
类的成员属性:可见性 名称:类型[=默认值]
类的成员函数:
可见性 名称(参数) :返回值类型
- ”可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)3种,在类图中分别用符号+、-和#表示。
- 类型”表示属性的数据类型
类之间的关系
关联
-
关联
但凡两个类或者对象有关系,就可以定义为关联关系,万能关系
- 画法:用一条线连接两个类,如果是单向的关系,可以加上箭头,上面可以加上declare解释两者关系【可有可无】。如果是双向关系,可以不加声明。
-
自关联:
自己关联自己,常见情况是包含,如一个文件夹node节点,内部包含子文件夹节点,就是node包node。
- 画法:跟关联一样,只不过是自己指自己
-
多重性关联
在关键的基础上添加了数量信息
+ 画法:跟关联一样,只需要添加上数量信息
-
聚合
顾名思义,一堆东西聚集在一起,就叫聚合。聚合是指成员对象是整体对象的一部分,但是也可以脱离整体对象单独存在。- 类比一下就像是一群学生组成了一个班级,班级不在了不影响学生单独存在,学生和班级的关系就是聚合,班级类中包含学生类,但是如果没有班级类,也可以new一个学生类实例
- 画法:线头的起始端加上空心菱形,表示聚合
- 类比一下就像是一群学生组成了一个班级,班级不在了不影响学生单独存在,学生和班级的关系就是聚合,班级类中包含学生类,但是如果没有班级类,也可以new一个学生类实例
-
组合
组合关系与聚合关系的区别,从名字上就能表现出来,聚合是聚在一起,散开依旧可以单独存在。但是组合是几个部分组合到一起形成一个整体,散开无法单独存在,上面我们谈到聚合用了一个学生和班级的例子,组合关系的话更像是器官和学生,没有学生,嘴巴也就没有单独存在的意义- 画法:实心棱形起点,箭头终点
一般聚合关系的部分类会单独实例化然后作为参数传给整体类,而组合关系的部分类会作为整体类的一个成员类,直接在整体类的内部进行实例化。
依赖
依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
画法:虚线,由依赖类指向被依赖类
泛化
泛化(Generalization)关系也就是继承关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
- 画法:泛化关系用带空心三角形的直线来表示。
接口与实现
对应到C++中就是虚函数,在基类中只进行了接口定义,在子类中进行了功能实现。
- 画法:在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。