一、基本介绍
- UML(Unified modeling language) 统一建模语言,是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。
- UML本身是一套符号的规定,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等
二、UML的分类
- 用例视图:用例图
- 设计视图:
- 类图(核心)
- 对象图
- 进程视图:
- 时序图
- 协作图
- 状态图
- 活动图
- 实现视图
- 构件图
- 拓扑图
- 部署图
三、UML类图
1、定义
用于描述系统中类(对象)本身的组成和类(对象)之间的各种静态关系
2、类图实例
3、关系分类
- 依赖
- 泛化(继承)
- 实现
- 关联
- 聚合
- 组合
4、关系详解
1、依赖关系
-
在类中如果用到了其他类,那么这个类和当前类就存在依赖关系,包括参数的依赖、变量的依赖、返回值的依赖等等
-
总结
- 类中用到
- 类的成员属性
- 方法的返回类型
- 方法的接受参数类型
- 方法是使用到
Driver 类中使用到了Car类,所以Driver和Car是依赖的关系
2、泛化关系
- 是一种继承关系,表示一般与特殊的关系,它指定了子类如何继承父类的所有特征和行为。
- 总结
- 泛化关系就是继承关系
- 如果A类继承了B类,那么A和B存在泛化关系
Student 和Teacher是Person的一种,Person是它们的父类,所以学生和老师也有Person的共性
3、实现关系
- 是一种类与接口的关系,表示类是接口所有特征和行为的实现。
- 总结
- 实现关系就是类和接口的实现关系
- 如果A类继承了B类,那么A和B存在实现关系
Car是汽车的接口,宝马和比亚迪都实现了Car的接口,所以他们存在泛化的关系
4、关联关系
- 实际上就是类和类之间的联系,是特殊的依赖关系
- 导航性:
- 双向关系
- 单向关系
- 多重性
- 1 表示有且只有一个
- 0... 表示0个或者多个
- 0,1 表示0个或者1个
- n...m 表示n个到m个
- m...* 表示至少m个
Person 和身份证是一对一的关联关系,不属于整体和部分的关系
5、聚合关系
- 表示整体和部分的关系,整体和部分可以分开,特殊的依赖关系
- 导航性:
- 双向关系
- 单向关系
- 多重性
- 1 表示有且只有一个
- 0... 表示0个或者多个
- 0,1 表示0个或者1个
- n...m 表示n个到m个
- m...* 表示至少m个
电脑由鼠标和显示器组成,它们之间是可以分开的,分开以后可以独立存在
6、组合关系
- 表示整体和部分的关系,整体和部分不可以分开,特殊的依赖关系
- 导航性:
- 双向关系
- 单向关系
- 多重性
- 1 表示有且只有一个
- 0... 表示0个或者多个
- 0,1 表示0个或者1个
- n...m 表示n个到m个
- m...* 表示至少m个
头由嘴组成,俩者不可分开,不可以独立存在
四、类图实例
四、其他
1、聚合和组合关系的区别
聚合其实是关联的一个特例,表示了两个对象之间“part of(部分-整体)”的关系,是一种弱关联,部分的生命周期可以超越整体。在UML中,用整体端有空心菱形箭头的双向关联修饰聚合。聚合的示例如下图:
组合其实是一种强形式的聚合,它具有强的拥有关系,整体与部分的生命周期是一致的。“部分”生存在整体中,它们与“整体”一起消亡。
“部分”对象依赖于“整体”对象,这种依赖性表现在两个方面:
- “部分”对象一次只能属于一个组合对象;
- 当组合对象销毁时,它的所有从属部分必须同时销毁。
- 整体的重数必须是0或1。“部分”不能在整体间进行共享。在UML中,用整体端有实心菱形箭头的双向关联修饰组合。
上图中,邮件和它的标题及正文之间的关系作为组合关系建模可能是合理的,因为一旦邮件被删除,就既不存在标题,也不存在正文体了,而它们存在时属于唯一的一个邮件。而邮件与附件之间的关系不太可能是用组合恰当的建模,因为在同一时间,同一个附件可以属于多个邮件,其次,很有可能附件可以保存,因此它们的生命周期将超过所附属的邮件的生命周期。