软件建模
目的:uml9种图描述出你要实现的软件系统功能、架构、关联关系
UML9种图
- 用例图(静态图 - 角色拥有的功能)
- 类图(静态图 - 面向对象类功能设计(JAVA-继承、封装、多态))
- 时序图(动态图 - 时间推移消息发送)
- 对象图(静态图 - 对象与对象之间的关系(对象是类的实例个体))
- 组件图(静态图 - 软件模块或者物理结构之间的联系)
- 部署图(静态图 - 物理硬件部署关系(网络拓扑))
- 活动图(动态图 - 事件发生过程)
- 状态图(动态图 - 对象状态切换过程)
- 协作图(动态图 - 时间推移消息发送)
4.状态图(State Diagram)- 动态图
作用:描述对象所有的可能状态,和他们之间状态切换的联系
5. 活动图 (Actitivity Diagram) - 动态图
作用:按照用例图的方式描述用例之间的关系
6. 时序图(Sequence Diagram) - 动态图
作用:参与者(角色)与系统对象之间有序交互的过程描述,强调消息如何在对象之间发送和接受过程
7. 协作图(Communication Diagram) - 动态图
作用: 与时序图相似,用于描述对象间动态协作关系,类图和时序图的集合,重点描述对象和对象之间的通信过程
8. 组件图(Component Diagram) - 静态模型
构件图
作用: 描述代码结构的图,描述各个代码构件之间的联系
9.部署图(Deployment Diagram) - 静态模型
作用:描述系统的物理部署过程,比如计算机设备以及他们是如何进行连接的
软件开发流程
软件工程导论概述-软件开发流程
1. 软件过程
为了获取高质量软件所需要完成的一系列任务框架,它规定的是如何更好的完成各项工作的步骤
1. 瀑布模型(线性模型)- 主流
特点:
阶段间具有顺序性和依赖性
优点:
可以强迫开发人员使用规范化的方法进行实现;严格规定每个阶段需要产出的文档
需求分析—》概要设计—》详细设计—》编码阶段—》测试阶段
1.需求分析:(产出结果:需求分析说明书)
理解客户需求,能够拆除具体要实现的功能和内容有些什么
2.概要设计:(产出结果:技术设计方案、概要设计实现方案—用什么技术完成什么功能)
结合已有的技术去分析业务的需求应该怎么实现
详细设计:(产出结果:用户操作界面设计图(UI)、UML工程文档、数据库设计sql代码)
原型设计图(用户操作界面)、用户操作的流程(UML设计-时序图)、面向对象设计(UML-类图、对象图、协作图)、数据库设计(PowerDesigner)
编码阶段:(代码、打包的软件)
分工、分模块、定计划
测试(入网安全证明、测试用例输出文档)
黑盒测试、白盒测试 (压力、网络安全…)
2. 快速原型模型
以原型界面驱动软件开发
适用一些功能简单、开发量小的软件系统就可以适用
3. 增量模型 - 企业开发主流
每个项目都是一个增量,不需要从新设计推翻之前的流程
4. 螺旋设计、喷泉模型(XXXXX)
UML设计使用的工具
MS visio
在线工具(免费)
https://boardmix.cn/
https://app.diagrams.net
1.用例图
作用:
表示一个系统中用例与参与者关系之间的图
它描述了系统中相关的用户和系统对不同用户提供的功能和服务
1.元素
1.角色(参与者)
是与系统主题交互的外部实体单元,描述一个或一组与系统产生外部交互的用户或事物
2.用例:(功能、模块)
描述的被角色或者事物能够访问的功能内容(一些列操作的集合)
2. 联系方法
1.角色与角色之间的泛化关系:
泛化代表的是抽象的概念,指向的方法:具象的事物指向—>泛化抽象的事物,更具系统的设计进行泛化
依赖关系—包含
是用例间设计时应该含有的功能使用incloude描述,指向方法A功能包含— << incloude >> --> B功能
依赖关系—拓展
是对用例的扩张对功能行为的增强,除必要功能之外添加的功能就要使用扩张
用例泛化
和角色相似,将具象化的用例和抽象的用例连接,有继承的概念实现,具象化的用例是在父类用例的基础上做修改
3.案例
描述一个企业管理系统功能,
所有的员工都有打卡、查看计划功能,
但是经理拥有管理员工信息、定制计划功能;
老板拥有所有员工和经理的功能
提升题目:
基于上一个题目,员工对于计划功能只有查看计划的权限,
但是经理有计划新增、修改、删除功能;
老板提出要求说计划可以从别的系统导入
按照该需求设计
4.用例图描述
当我们绘制完成一个用例图后,需要进行用例描述,让阅读用例的开发者更清楚事件过程描述
用例图需要描述的内容:
1.用例名称:描述用例图的寓意或者实现的目标,一般为动词或宾语短语
2.用例编号:实现多个用例图的快速索引查找
3.参与者:参与的角色有哪些
4.用例描述:简单一句话概括什么人在什么系统能做什么事情
5.触发器:触发用例的时机节点描述
6.前置条件:用例执行前的系统状态过程描述
7.基本事件流:将常规的用例活动以时间过程的方式描述清楚
8.扩展事件流:一般描述基本事件流中错误或业务异常的流程
9.结论:在什么时候用例结束
10.数据需求:用例过程中会有些什么数据交互
11.业务约束:描述业务中的约束条件
在案例中的用例描述
关键词 | 描述值 |
---|---|
用例名称 | 企业员工操作管理系统 |
用例编号 | CXK001 |
参与者 | 员工、经理、老板 |
用例描述 | 描述三个参与者对于系统功能权限的描述 |
触发器 | 参与者登录后使用管理系统 |
前置条件 | 参与者需要登陆系统 |
基本事件流 | 1.员工登录系统可以进行打卡,同时可以查看现在指定的计划内容 2.经理登录系统对员工的信息、计划可以进行管理分发 3.老板可以查看员工的所有信息且进行管理,能够对所有人的计划进行定制或查看 |
扩展事件流 | 1.员工登录系统,权限不足无法对对应的业务功能进行操作,返回到登录页面 |
结论 | 员工登录系统后对计划或者打卡功能操作以及管理员工信息操作结束,用例完结 |
数据需求 | 1.员工信息 2.打卡记录 3.计划信息 |
业务约束 | 不同的角色所操作的功能内容不同 |
2.时序图(序列图)
1.什么是时序图
时序图(Sequence Diagram)又名序列图
它描述的是对象与对象之间发送信息的时间顺序显示多个对象之间的动态协作关系
2.元素
5种元素内容:
- 角色(参与者-Actor)
- 对象(Object)
- 生命线(LifeLine)
- 控制焦点(Activation)
- 消息(Message)
1.角色
角色:用小人图标表示,可以描述人或系统等事务,一般作为时序图触发的起点
2.对象
对象图在时序图的上方顶部,以一个矩形框的方法描述
对象描述的内容在UML设计中有三种:
1.对象和类名
写法: 对象名:类名
能够通过描述具体对象间调用关系体现除类与类之间的关联,后续可以关联类图
2.类名
写法: 类名
只突出类与类之间调用过程关系,描述了一类事物之间包含的调用协调过程
3.对象名
写法: 对象名
突出具体对象之间的调用协调关系
3. 生命线
每个对象矩形框下方都会有一条虚线,虚线描述的就是该对象的时间生命线,线从上至下描述的是时间的从过去到未。
4.控制焦点
每个对象交互时在时间线上发生的事情或某段时间执行的操作,用长条矩形描述
5.消息
对象之间发送的信息
消息有三种类型:
1.同步消息
画法:实线+实心箭头
发送对象发送消息给接受者,接收者必须给发送者一个响应(回复),否则发送者将一直等待
注意:同步过程将会出现对象必须要等待另一个对象返回结果才能继续操作
2. 异步消息
画法:实现+大于符号箭头
消息的发送者将消息发送之后,然后继续执行自己的活动
3.返回消息
画法:虚线+小于符号箭头
返回消息表示从过程调用返回
4.自关联消息
画法:分同步异步的方式来画,消息发送和接受都是自己
当调用过程中出现消息是发送给自己对象的功能完成的话就可以使用自关联描述
3.组合片段
组合片段用来解决交互执行的条件和方式,允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。
组合片段有13种:
类型 | 名称 | 描述 |
---|---|---|
(必学)Opt | 选项 | 包含一个可能发生或不可能发生的序列 |
(必学)Alt | 抉择 | 包含一个片段列表,这些列表包含备选信息序列,在任何场景下只能发生其中的一个序列 ,第一个片段Alt和else片段配合,临界点需要描述一个表达式,当表达式的结果发生变化时选择对应的序列进行操作 |
(必学)Loop | 循环 | 片段重复一定次数,可以在临界点描述重复的条件,Loop片段要有Min和Max属性,如果不描述这两个属性就是无限循环 |
(必学)Par | 并行 | 并行处理,多个事件片段可以交错执行 |
抉择
并行
3. 类图(面向对象设计)
作用:表示各个类之间的静态关系视图,类图是一种编程模型图
类的组成
类名、属性(字段)和行为(方法)
类图中的修饰符
四种访问修饰符
public (公共的) 所有人都可见: 类图中用“+”
private (私有的)只有自己可见: 在类图中用“-”
protected(受保护的)自己以及子类:在类图中用“#”
default(默认的)不使用访问修饰符:在类图中用“~”或者不写
属性字段类型
文字类型:
(1)String:字符串
(2)char:字符
数值类型:
(1)int:整数类型
(2)double:浮点类型(小数类型)
其他:
(1)日期:Date
(2)布尔值:boolean
(3)对象类型:Object
(4)数组集合:Array
方法描述
有参方法
如:吃东西的描述:给某个人食物就能吃这个行为可以使用
+eat(food)
无参方法
如:跑步是不需要外部条件就可以完成的行为
+run()
有返回值方法
如:计算两个数之和会得到一个结果,结果就是通过计算过程返回的数据
- sum(num1:int,num2:int) : int
修饰符 方法名(参数列表):返回值类型
无返回值方法
无返回值方法,描述的行为注重的过程并没有结果
如:描述走路这个行为
+run():void
修饰符 方法名(参数列表):void
类之间的关系
有6中关系:
- 关联:实线
- 聚合:菱形空心实线箭头
- 组合:菱形实心实线箭头
- 继承:三角空心实线箭头
- 实现:三角空心虚线箭头
- 依赖:虚线小箭头
1.关联关系(Association)
单向关联:如只有A关联B,B不关联A
双向关联:AB两者相互关联
双向关联案例:司机可以租车和车子等待被人租赁,两个类是双向关联的,实线上两侧写上1.
单向关联案例:企鹅会受到气候的影响改变生活的方式,但是气候不会因为有企鹅而发生改变,这就是单向关联
2.依赖(Dependency)
描述:如果一个类的改动会影响到另一个类,则两个类之间存在依赖关系,一般而言,依赖关系是单向的,如果依赖是双向的考虑使用关联关系描述
案例:车子依赖汽油,而汽油不依赖与车子出现
3.聚合(aggregate)
描述的是:多变群
描述是整体与部分的关系,当某个实体聚合为另一个实体时,该实体还可以是另一个实体的一部分。
空心菱形+实线箭头
4.组合(Combination)
描述的是:多组一
也是描述整体与部分的关系,组合要比聚合更加严格,当某个实体组合成另一个实体时,二者具有相同的生命周期
5.继承泛化(Generalization)
描述的是一个抽象的东西被不断具象化的描述过程,与继承是同一个概念
6.接口实现(Realization)
什么是接口:
只描述特有的行为,让类来实现
类会去实现公共的接口方法行为,在每个类中出现不同的行为效果
4.状态图
概述:
状态图(State diagram)
用来描述特定对象在其生命周期中国的各种状态以及状态之间切换的转换过程。
注意:在状态图描述时一定要清晰你描述的状态特指的对象是谁
作用:
1.清晰的描述状态之间切换的关系以及顺序
2.理解清楚业务调用过程逻辑,知道顺序与状态切换的因果关系
3.清楚理解状态切换时必要的行为内容
1. 常用元素
1.1 初始状态(圆形或空心圆)
是必须要拥有的,因为所有的业务都有触发点,且只有一个
1.2 终结状态(实心圆加一个空心外环)
是非必要拥有的,但是可一个状态图可能会有多个终结状态
比如:订单可能有销毁也可能完成支付
1.3 状态框
指在对象的生命周期中某个条件或者状况,状态是对象执行了一系列活动的结果
1.4 状态转移(实心三角箭头描述)
从一个状态到另一个状态之间的连线,转移上要表示出转移的事件表达式(行为过程描述)
2. 状态图有无终止符分类
1. 无终止状态
2.有终止状态
状态图案例:张三在ATM机取钱的过程(观察视角:ATM机)
5. 活动图
简介
活动图(Activity Diagram)对系统的动态行为建模的另一种图形,描述的是活动行为的顺序,展现从一个活动到另一个活动的控制流程,活动图本身就是一种流程图。
1.常用元素
1.1 动作状态
动作状态一般在活动图中是不可再拆分的原子操作,且是不可中断的动作行为,动作行为之后会转换为另一种行为
画法:
圆角矩形描述动作状态
特点:
- 1.动作状态是原子性的
- 2.动作状态所处的时间很短
- 3.要有入状态和出状态
- 4.不能有入动作和出动作,只要箭头指向就可以
1.2 初始节点
空心圆,标记业务的起点,有且只有一个初始状态。
1.3 终结节点
空心圆环,表达的业务流程的终止,可以有一个或多个
1.4 判断、合并
(1) 判断流程
根据判断进行决策,根据决策执行不同的流程。
(2)流程合并
两条或多条流程指向节点,节点又指向终结节点或其他行为节点。
1.5 分叉、结合
(1)分叉
表示一个流程分成多个并行子支流完成事务
(2)结合
将多个执行流汇总到一个行为结果上,只有当所有的分支流程完成执行才能完成结合,从而继续往下执行
1.6 转换
当一个活动结束时,控制流会马上传递给下一个活动节点,用一条直线带箭头描述
1.7 泳道
用于隔离不同对象或角色间行为操作的内容,可以直观地看出每个角色在此活动中做了什么操作,注意,泳道不能重复描述
(1)垂直泳道
2泳道:用户、系统
用户登录系统填写成绩退出系统
(2)水平泳道
活动在操作过程中会出现角色变换,一般水平泳道配合垂直泳道实现。
也可以区分活动的阶段
6. 组件图
组件图(Component Diagram)又称为构件图,描述的是软件系统中遵从实现一组接口的物理的、可替换的软件模块。
构建图 = 构建(Component) + 接口 (interface) + 关系(Relationship)+ 连接器(Connector)
1. 常用元素
1. 构件(Component)
系统设计中的一部分模块,隐藏了模块实现的内容,对外提供了一组接口,组件具有可替换性,也就代表着组件之间是非耦合的
组件类型
- 源代码组件:一个或多个源代码文件或包组成的组件
- 二进制组件:一个目标码文件或者静态库文件
- 可执行组件:在机器上可以运行的程序单元
构件画法区分
UML2.X,画法,现在大部分构件图中出现的构件元素画法,省去构件中提供给外部或者外部发送给给构件的接口块。
2. 接口(interface)
接口类型:
- 提供接口:组件提供出去给其他组件方便调用的接口
- 需求接口:需要使用外部组件的内容或数据
提供接口
需求接口
组件链接
3. 端口(port)
端口,表明组件对外部提供交互的节点,因为组件可以提供一种或多种服务,为了提供可见性描述,需要用端口的方式描述不同的功能。
画法:
对外暴露的端口使用正方形连接接口。
端口连接画法:
需要暴露端口的画法一般出现在组件对外提供多个服务接口时,或者组件需要通过外部组件获取多种服务时,才需要这么画。
一对多组件链接的画法
组件的依赖关系
(1)组件和组件之间的依赖关系
虚线箭头指向的方式,需求方指向服务提供方
(2)组件和接口之间的依赖关系
类似于描述,组件接口和需求接口的行为
如上图所示效果,可以使用依赖关系描述
组件包(组件块)
组件之间存在包含关系时,可以使用如下描述。
组件块暴露服务端口的方法
组件块中子组件之间可以正常链接
7. 部署图
1.概述
部署图描述了一个系统运行时硬件节点,节点中软件、硬件之间交互连接关系图。
部署图包括两种元素:
- 1.节点:比如硬件物理主机、路由器等等
- 2.连接:网络、请求、线路
2. 作用
部署图主要的目的是在物理的层次上做整体的系统规划
- 描述硬件拓扑关系
- 2.描述部署的软件中硬件之间的关联
- 3.描述硬件交互关系
3. 常见元素
1. 节点
节点类型有两种:处理节点(处理器)、服务节点(设备)
处理器
指本身具有计算能力并且能够执行各个软件的节点,比如服务器。处理器是具有数据、业务的处理能力。
设备
指本身没有处理功能的节点,比如:打印机
2. 关联关系
表示两个节点之间的硬件连接,一般描述的就是网络、线路、光缆等之间的连接
画法: 实现连接即可
4.案例介绍
描述多门店的销售主机与服务器各个服务组件之间的连接关系
分布式微服务部署模式
分布式微服务:会将分布式运行中的各个模块以独立运行的服务模块、IP、端口规定,各个服务模块之间相互调用达到分布式场景下微服务间协同运行的效果。
SpringCloud
- SpringCloud 奈飞(收费)
- SpringCloud Alibaba(阿里巴巴团队)
- dobue
- SpringCloud serverMS
8. 协作图
协作图:合作图,是动态图。强调的发送和接收消息之间对象的组织结构,一个协作图显示了一系列的对象和在这些对象之间的联系
从上图分析可看出:
协作图和时序图的描述方法类似(对象+时间+消息)
消息用数字标记描述消息发送的顺序
8.1 特点
协作图没有生命线的概念,只是描述各个对象间消息的关系
协作图突出的组织结构
协作图描述的是对象之间的连接和消息发送关系
协作图描述的消息发送的关系
8.2 常用元素
(1)对象
为了完成特定功能出现的行为集合或者参与者,比如:电商平台、人、蔡徐坤
(2)链路
表示对象与对象之间的独立连接,表示一个或多个相连的线或弧
弧线代表自调用
(3)消息
描述系统的行为方法,是从一个对象向另一个对象发送消息,可能是一种方法也可能是操作的指令;消息由发送者、接受者、活动内容组成
案例讲解
描述管理员结账的过程
1.登录系统
2. 返回-登录成功后
3.查看结账的信息
4. 结账的信息需要从数据库核对
5. 数据库核对确定信息后
6.管理员结账
7.系统记录结账内容
8.结账完成
(1)时序图画法
(2)协作图画法
协作图画图步骤
- 确定交互过程中要参与的对象
- 确定对象和对象之间的链路关系
- 每个消息发送时候要根据链路关系绘制,且注意消息发送方向