一、UML图的基本知识
这里介绍比较常用的几种UML图:
结构型UML:
1. 类图
类图共三层,分别是:
- 类的名称,如果是抽象类,则为斜体显示
- 类的特性,通常是字段或属性
- 类的操作,通常是方法或行为
- 其中“+”表示public,“-”表示private,“#”表示protected
- 如果是接口的话,在类名上方有<>字样
- 1. 关联:实线箭头,表示 成员变量
是一种拥有的关系,它使一个类知道另一个类的属性和方法
【代码体现】:成员变量
public class Person {
//头部是人的一个属性
public Head head; // 作为一个成员的变量
public Person() {
// TODO Auto-generated constructor stub
}
}
public class Head {
public Head() {
// TODO Auto-generated constructor stub
}
}
解释:Head是作为Person类的一个内部属性来使用,一旦实例化了Person类,同时也实例化了一个Head实例,所以他们的依赖性更强。
与依赖最大的区别是:依赖时是在类的内部具体方法中使用到另外一个类,而关联则是作为内部属性来用,依赖关系仅当具体方法被调用时才会实例化,比如刚才的Person只有打电话时才调用Phone实例化,而关联是在new一个Person时就同时实例化了一个Head类来作为Person的内部属性.
- 2. 泛化【继承】:空心三角形+实线,表示继承
class PhoneSystem{
}
class IOS extends PhoneSystem{
}
class Android extends PhoneSystem{
}
-
3. 实现:空心三角形+虚线, 接口实现
是一种类与接口的关系,表示类是接口所有特征和行为的实现
- 4. 依赖:虚线箭头,表示 方法中的局部变量或其他
是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
【代码表现】:方法中的局部变量、方法的参数或者对静态方法的调用
public class Person {
public void Call(){
Phone phone = new Phone(); // 作为内部方法的一个局部的变量
}
}
public class Phone {
}
- 5. 聚合:空心菱形+实线箭头,箭头指向个体。表示弱拥有关系,部分可以离开整体而单独存在
是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
public class PersonGroup {
public Person person; // 作为一个成员的变量
//将person作为构造方法的参数传进去
public PersonGroup(Person person) {
// TODO Auto-generated constructor stub
this.person = person;
}
}
public class Person {
public Person() {
// TODO Auto-generated constructor stub
}
}
- 6. 组合(合成):实心菱形+实线箭头,表示强拥有关系,体现了严格的部分与整体的关系,生命周期相同
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【代码体现】:成员变量
public class Person {
public Foot foot; // 作为成员变量,脚不能脱离人类而生存
public Person() {
// TODO Auto-generated constructor stub
//在构造方法中实例化
foot = new Foot();
}
}
public class Foot {
public Foot() {
// TODO Auto-generated constructor stub
}
}
- 7. 各种关系的强弱顺序:
泛化 = 实现 > 组合(强拥有) > 聚合(弱拥有) > 关联 > 依赖
下面这张UML图,比较形象地展示了各种类图关系:
2. 构件图
构件图也叫作组件图,构件图用于描述系统中某一模块
基本的语法:
1、构件图用于描述系统中某一功能模块。
2、构件图之间可以提供服务和获得服务。
3、构件图常见的类型有五种:
1、可执行的:表示像exe这类可执行文件及模块。
2、文档:像java这类文件。
3、表:像关系数据库中的表形式。
4、文件:普通的文件。
5、库:像C语言中的函数库,Java里面的API接口库。
3. 部署图
部署图和网络拓扑图相似,都是在物理层次上做整体的系统规划,但是部署图功能更强大,可以继续细化设计
基本的语法:
一个例子:
行为型UML:
活动图、状态机图、顺序图都是分析业务使用的流程图
4. 活动图
-
开始状态和结束状态(一个开始态、一个或多个结束态)
-
一个活动(Activity即一个步骤):圆角矩形
- 条件判断:分支菱形(每条分支上使用
[条件]
阐述条件) -
合并分支:合并分支菱形(前面若有分支线路,后面可能合并)
总结:
动宾表达活动:
5. 状态机图
针对某个事务的状态变化来展示流程
对比于活动图:
通过活动顺序来展示状态流程
-
一个开始状态、1个或多个结束态
-
活动图和状态机图的区分
-
请假实例
实例
- 状态的确定精确与否,是衡量状态机图好坏的标准。
-
多级审批情况
对应活动图:
6. 顺序图
一个例子:
7. 用例图
用例图是描述用例、参与者以及它们之间关系的图。
用例图是从用户的角度来描述对信息系统的需求,分析产品的功能和行为。
用例图由如下几个概念组成:
参与者actor:角色,系统的用户;
系统边界system scope:确定系统的范围,边界是一个方框,用例在边界内,参与者在边界外;
用例use case:系统提供的服务;
关联association:参与者与用例间的关系。
用例与用例的三种关系:
1. 包含关系(include)
包含关系描述的是一个用例需要某种功能,而该功能被另外一个用例定义,那么在用例的执行过程中,就可以调用已经定义好的用例。表示符号:<<include>>
2. 扩展关系(extend)
用一个用例(可选)扩展另一个用例(基本例)的功能,将一些常规的动作放在一个基本用例中,将可选的或只在特定条件下才执行的动作放在它的扩展用例中。表示符号:<<extend>>。
3. 泛化关系
子用例继承了父用例所有的结构、行为和关系,是父用例的一种特殊形式。
--------------------------- end ---------------------------
项目推荐:
Java微服务实战296集大型视频-谷粒商城【附代码和课件】
Java开发微服务畅购商城实战【全357集大项目】-附代码和课件
-----------------------------------------------------------------------------