当前课程知识点:软件工程 >  第10章 行为建模 >  10.2 顺序图建模 >  讲课视频

返回《软件工程》慕课在线视频课程列表

讲课视频在线视频

下一节:讲义视频

返回《软件工程》慕课在线视频列表

讲课视频课程教案、知识点、字幕

交互是指对象为实现某个目标

而在彼此之间传递消息的行为

交互行为建模

目标就是为了描述对象之间

如何进行协作

在UML中定义了多种交互图

其中应用最广的就是顺序图

有时我们也将其称为

时序图 序列图

由此我们可以看到

位置顺序图的过程

就是在顺序图的顶端

绘制矩形框

定义参与交互的类对象名字

在每个对象下面

位置数值的虚线

表示该对象的生命线

在对象间添加箭头

来表示对象间发生的

各种类型的消息

跟踪对象间控制流的转换

生命线上可以添加竖直的矩形

定义该对象的激活期

表明该对象在哪一个时间段

正在执行某一项操作

根据需要我们再可以添加

框的组合和关联

表示复杂的控制结构

这里我们给出了一个针对刚刚

介绍的绘制顺序图过程的

一个实例

首先我们画出参与这次交互的

所有的参与者的对象

包括来自外部的参与者Customer

来自系统内部的订单Order

和菜单管理员Menu Manager

画出这三个对象的生命线

然后标出参与这些对象

之间交互的消息 用箭头表示

顺序图的起始

是一个没有发起对象的消息

hunger

这里每个消息代表的操作

都是属于操作的接收方的

也就是说

相当于发起消息的这一方

要调用消息接收那一方的

对象的一个操作

沿横轴方向表示的是

参与这次操作的对象

沿纵轴方向表示的是一个时间轴

自上而下发生的次序

由早到晚

我们还可以看到

这里我们添加了一个

循环控制结构Loop

它的循环的条件

是直到用户点菜完毕

我们还有一些嵌套发生的

在订单上的交互消息

包括检查某一个菜

是不是还有

及它要给自己添加一个

新的菜单项

这样的操作是指向自身的一个

自返的一个消息

在最下边我们还有一个

添加了外部引用的

完成订单 付款 这样的一个框

很明显这个框的内部的

内容的定义来自另外一个顺序图

这就是一个简单的顺序图

建模过程的实例

UML2.0中引入了组合框的概念

来表达更为复杂的控制结构

通过把顺序图中的

一部分交互内容放入框中

并在左上角注明

该控制结构的类型

在方括号中加上控制条件的定义

我们就能够表达选择 循环

并发等更为复杂的控制逻辑

比如下边左图中

当左上角标明是opt结构的时候

表明这是一个单条件的

选择结构

当条件满足的时候

执行框中的交互活动

中间 当左上角标签为alt的时候

表示选择执行线上或者线下的

交互活动

线上线下都有各自的控制条件

只有当控制条件满足的时候

才能够执行相应部分的内容

当把标签alt换成par的时候

表示这是一个

并发执行的控制逻辑

也就是虚线上下的部分将并发完成

右边的图中

表示的是一个循环控制结构

当条件满足的时候

框中的内容将循环执行

从这里我们可以看出

框是一种表达能力很强的

建模机制

通过引入框

我们能够更好的去表达

某一个控制单元的反复执行

选择执行和并发执行

这里我们给出了一个简化的

控制结构建模的例子

在这个例子中

我们主要涉及两个参与者

一个是person

一个是银行ATM机

在整个的顺序图

我们把它放入了一个框中

用左上角的sd withdrawal

来表明这是一个顺序图

SD表示

withdrawal表示取款过程

在这个例子中

包括一些控制操作符

首先由用户启动这个序列

第一个操作符Loop(1,3)

是一个循环操作符

1和3分别表示循环执行的

最少次数和最多次数

因为是最少一次

所以在检测条件之前

这部分内容至少要执行一次

在循环内

用户输入密码 系统验证

密码不正确的话

该循环将会持续

但是 如果超过3次

无论怎样该循环都会结束

下边的操作符

是一个可选的操作符

表示如果密码正确

那么执行这个操作符的内容

否则 将跳过这一段内容

执行后面的部分

在这个操作的结构内部

还包括了一个并行的操作符

如图表示

操作符是可以嵌套的

在并行操作符部分有两个分区

一个是让用户输入帐号

另一个是让用户输入数额

由于这两个分区是并行的

所以 我们并没有规定

按什么次序

输入这两部分的内容

并发并不意味着

物理上的同时执行

其实就是这两者之间

没有一个严格的次序关系

如果它们确实是独立的动作

那么 就可以交叉执行

如果是顺序的动作

也可以按照任意的次序发生

一旦并行操作符的两个动作

都被执行完成

那么 并行操作也就执行完毕

我们进行继续下一部分的内容

通过这样的控制结构

我们可以看到

原本只能由单层的一个顺序图的

控制顺序

就变成了可以交叠的

多层次的顺序

对我们未来建模更为复杂的

控制逻辑

有很强的表达能力

这里我们给出的是一个

对控制逻辑定义的新的例子

在这个例子中

我们根据订单的

每一个订单项的额度

来确定是由谁来送货

对于那些价值

大于1万美元的货物

我们选择

careful:Distributor

对于普通的货物

我们选择常规的Distributor

这样 我们就可以通过

对额度的控制

来选择送货人员

当一个顺序图的交互过程

过于复杂 步骤繁多的时候

或者当我们需要引用其它的

外部图报的时候

可以采用用ref, reference

来标注的框图的外部引用

比如 在这个图中

取款项我们将刚刚的介绍的

验证帐户密码和取款流程

单独定义为一个外部的顺序图

然后 在整个的取款顺序图中

引用这两个片断

从而简化我们的取款过程的

顺序图的定义

当我们要引用其它的

外部图表的时候

也可以采用这种机制

在定义框这一种建模机制之前

我们是采用不完整的箭头

和加标注的方式

来表达类似的场景

大多数情况下

对象的生命周期是

贯穿一个场景执行的始终的

但是 也有两种情况

我们需要对对象的创建和撤销

进行特殊的处理

比如在图中我们看到

new标明的一个新建对象的

一个消息

在它的末端

我们添加了一个新的

表示对象的方框

这种情况下 表示这个对象

是在场景中建立出来的

它出现的位置

要比其它的对象相对较低

而对象的撤销

是指在对象的生命线底部

用一个X表示

这个对象在场景

还没有执行完的时候就要被撤销

在java中

我们没有明确的撤销对象的操作

是要通过垃圾回收机制来处理

因此 在图中表示的

只是一个对象生命周期

结束的一个逻辑

这里我们给出的是一个

银行系统交易验证的交互流程

在这个过程中

我们首先创建一个交易对象

交易对象创建之后

它又将创建一个

交易的协调器

然后 交易协调器负责

创建一个信用交易检查器

以及担保交易检查器

两个新的对象

完成本次交易的验证之后

这两个新创建的

交易检查器对象将被撤销

验证成功之后

我们再对交易的协调器

进行循环的处理

是不是所有的交易都已经做完

当和本次交易的

相关的所有检查

都做完之后

返回验证的结果

然后交易的协调器也将被撤销

在返回之后本次交易结束

交易也将被撤销

所以

这就是一个在交互过程中

动态创建和撤销相应对象的过程

这里我们给出了一个

电话通信的简单的

交互过程的顺序图

大家可以看一下

在这个顺序图的描述中

是否存在什么问题

主要从文法以及场景的

可行性方面来考虑

对之前的建模

我们可以进行进一步的细化

这是我们给出的一个可能的

修改方案之一

由于在一个交换机上

存在着多个线程

因此我们在创建一次会话之后

是需要等待相应的会话结束的

而不能再发出一个

异步消息之后

就转移了控制的线索

这样我们很难找出上这个交互

是和其中哪一个对象完成的

当然 就算是我们作出

这个修改以后

也还是存在很多问题

比如说我们这里只定义了

拨号时间少于30秒的时候

就得到应答的情况

而没有给出时间超过30秒之后

应该怎么处理

而且 会话对象中

并没有明确说明计费功能

如何实现等问题

因此 在现实生活中

对顺序图进行建模

要考虑的方面

是根据我们当时的上下文

要进行比较多的细化

以及相应控制流程的考虑

由于顺序图它是在

对系统的控制流程进行建模

因此 通过分析顺序图的

控制流的布局

我们就可以推断出

这个系统采用的是集中控制

还是分布控制

比如左图

它最左边的对象发出很多的命令

给其它的对象

所有的对象的返回结果

也交由左边的这个对象

来响应和处理

因此我们可以看出

这种布局的顺序图

它是采用集中控制的方式

而右面的图可以看出

左边的对象它将消息分布给

下发给后边的对象来完成

对象之间层层嵌套

因此 它的控制流

是分布到各个后续的

对象身上完成的

是一种典型的分布式

控制流程的布局

这是一个典型的

集中控制的计价系统的顺序图

从中我们可以看出

几乎所有的控制命令

都是从订单这一对象发出的

它一直属于活动期

而且它要等待与所有的对象

交互的命令返回结果

再进行下一步的交互流程

每一个订单项Order Line

以及每一种

所购的商品aProduct

以及相应的aCustomer

都是直接和这个

Order对象相交互

同一个控制流程

我们可以采用完全不同的

控制策略

比如在这里分布控制的

计价系统的顺序图的表现

是说由订单把计算价格的命令

发给每一个订单条Order Line

由Order Line自行

和每一个产品

以及相应的Customer发生交互

这样 每一条目的价格

是分开计算的

最后只是汇总一下

因此 它是采用分布控制的

机架系统

也就是说Order Line

承担了一部分控制功能

减轻了Order的控制职责

是我们建议的分布式的

顺序控制的一个布局

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲课视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。