当前课程知识点:软件工程 > 第10章 行为建模 > 10.3 顺序图风格 > 讲义视频
交互是指对象为实现某个目标
而在彼此之间传递消息的行为
交互行为建模
目标就是为了描述对象之间
如何进行协作
在UML中
定义了多种交互图
其中 应用最广的就是顺序图
有时 我们也将其称为
时序图 序列图
在使用UML的过程中
顺序图往往是和用例建模
绑定使用的
我们可以用用例图来表达
单个情景实例的行为
也就是说
每一个用例它的交互过程
都对应一个顺序图
顺序图能够很清楚的表达
对象间如何协作
完成用例所描述的
那些交互功能
顺序图表示的是为完成用例
而在系统边界输入输出的数据
以及消息
当然 顺序图也可以推进到
系统的内部
表示系统内部对象间的
消息传递
因此 它的常用做法是
我们在用例建模期间
用顺序图来表示参与者和系统
在系统边界发生的交互活动
随着设计活动的深入
我们已经有了系统内部的
类的结构和对象之间的
交互行为的设计之后
可以再用顺序图
进一步丰富 打开系统内部的
对象之间的交互活动的展开
这里我们给出了一个用顺序图
来建模用例交互过程的实例
左边是用文本形式
描述的交互活动
右边是用用例图
来描述的相应的交互活动
对比两种表示方法
我们可以看到自然语言是
一个详细的交互过程的说明
而右边用例图给出的
图示化的消息交互过程
则非常清晰的表示了
二者之间交互的消息
以及他们之间发生的次序
和所牵涉到的是系统本身
还是用户与系统双方
所以我们可以看到
顺序图的使用
会使得系统的建模
更为清楚 简洁
通过顺序图的建模
我们可以逐步的
对之前的用例描述进行扩展
细化和查缺补漏
顺序图能够贯穿在
软件开发周期的不同的阶段
服务于不同粒度的建模
不同目标的建模
分析阶段的顺序图
我们并不包含系统的设计对象
也不关注系统的消息的
参数和它的类型
更关注的是消息本身的目的
和消息的内容
在获取到初步的用例描述之后
我们将很容易从中间提取
顺序图的建模元素
比如在用例描述的主体
我们就可以将它提取为
参与交互的对象
这里包括参与者Customer
和提供搜索支持的
界面类 Search page
以及返回的结果
Search Results Page
以及在后台提供的服务的
目录系统和结果封装的实体类
在这个建模的过程中
我们能够得到
用例交互它的交互流程
首先是从界面外边的Customer
提交了搜索请求
搜索页面在对搜索请求
进行简单的语法验证以后
将向后台的实体对象
发出按作者搜索
这一请求
按作者搜索这一请求之后
建立一个搜索结果的实体
并将其返回给结果显示页面
当搜索出错的时候
将显示出错信息
这样一个过程通过在
顺序图中的横向和竖向的
这样的建模元素的布局
我们很清楚的看到各自的职责
以及他们之间交互的次序
顺序图的建模意义在于
我们可以通过顺序图
来描述算法的逻辑
在抽象层次上
能够逐步逼近软件的代码表示
高质量的顺序图
是代码的抽象
因为我们无需描绘
每一行代码的信息
而且顺序图是与编程语言
无关的一种表示
可以通过不同的编程语言
来使一些对应的算法逻辑
我们可以通过绘制顺序图
来描述高于编码抽象层次的
业务逻辑
也就是说
无需编码的这样的内容
我们也可以通过顺序图
来表达出来
顺序图的绘制
可以通过团队协作完成
由于顺序图能够在同一个页面上
显示多个对象和类实例的行为
它加宽了我们建模的视野
可以同时描述多个对象的行为
顺序图的建模过程中
我们要把主要的注意力
集中在关键的交互上面
而要把无关的
或者是不重要的细节忽略掉
比如 如果我们顺序图
建模的主要目的是为了
描述业务逻辑
那么就没必要包括对象
和数据库之间的详细的
频繁的交互
可能只包括向保存 删除
这样的消息就足够了
甚至我们可以简单的假定
持久化问题已经被妥善的处理
而不用考虑持久性相关的
细节的每一个操作
在顺序图的建模过程中
我们需要优先考虑
使用的是参数的名字
而不是参数的类型
比如 我们将消息格式定义为
addDeposit amount target
要比addDeposit Currency
Account
传递更为丰富的信息
因为有前者的定义
我们知道要存款
那么我们需要知道
存款的数额和目标帐户
而后者我们知道addDeposit
它带有一个现金类
和一个帐户类的 这样的参数
它并不能传递足够的
关于领域的 业务的信息
关于参数的类型
我们最好是帮他放到UML的
类图中定义
这个建模风格
给出的只是一个建议
而不是一个严格的规定
也就是说 当我们需要表示
这里要传递的是某种类型的
对象的时候
指明参数的类型
作为占位符也是可以的
在顺序图建模的时候
我们不要对明显的那些
返回值做建模
添加返回消息
比如在这个图中
创建安全登录对象
SecurityLogon
这个行为会导致生成一个
新的顾客对象
这个返回值是不明显的
而且 我们需要返回
新建的顾客 他的ID号
因此 我们需要对它进行建模
给出了一个返回消息
返回theCustomer的ID
而向订单对象发送请求
计算总数
那么它的返回值
就是一个显而易见的返回消息
我们就无需再对它进行建模了
我们应该时刻记住的是
返回消息returnMessage
它实际上是
同步消息的一个部分
异步消息的返回值
是另一个异步消息
希望大家能够注意
在顺序图中由于它表达的是
系统的动态的交互行为
因此 往往会涉及到
时间约束的表示
在这里时间约束
我们是通过定义约束表达式
并把它放在对应的消息之间
来表达
比如在这个图中
我们想表示的是
消息A和消息B二者之间
发生的时间间隔不能超过2秒
大家可以思考一下
在这个图中
为什么没有激活期的表示
对 因为激活期在这里
并不能帮助我们表示
A和B两个消息之间
它的约束条件是什么
激活期它表达的是对象
它拥有控制线索的时间
但并不能严格的区分
两条消息之间的绝对时间约束
控制焦点的建模是一个可选项
也就是说 我们可以不画出
对象的控制焦点和激活期
但是 通过画出控制焦点
我们可以更明确的
说明一个消息的
开始和结束位置
比如在图中
对象1调用了对象2的操作1
然后对象2在执行操作1期间
又返过来调用了对象1的操作2
这个方法
通过增加控制焦点的嵌套机制
我们就可以更精确的说明
消息的开始和结束位置
仿佛是一个消息调用的压占机制
激活期表示的
就是对象在执行动作的期间
时间段
它和控制焦点实际上是
同样的一个概念
只是说法不同 叫法不同
我们也提到了在顺序图中
递归的消息调用
可以采用嵌套的
控制焦点来表示
这里就是一个单个对象
对自身操作的递归调用
比如首先由对象C1
调用了C2的Oper这个方法
然后 Oper2在执行Oper的过程中
又调用了自己的Opre方法
这样我们就可以采用
嵌套的控制焦点
这样的方式来表达
对多个对象之间相互递归调用
也采用类似的方法
从这里我们可以看到
对象C1调用了C2的Oper1方法
C2又在执行Opre1的过程中
调用了C3的Opre2方法
C3在执行Opre2的过程中
又调用了C2的Opre1方法
从我的解释大家可以看出
其实对每一个消息调用来说
它的拥有者都是消息的接收方
也就是说C2要对外提供
Oper1服务
C3对外提供Oper2服务
C2在提供Oper2的调用的过程中
又被返过来引用了
自身的Oper1服务
通过顺序图建模
我们可以帮助分析人员
对照检查每个用例中
所描述的用户需求
是否已经落实到一些对象
去实现
它能够提醒分析人员
去补充遗漏的对象类或者操作
帮助分析人员
发现哪些对象是主动对象
哪些对象是被动对象
通过一个特定对象的
群体的动态行为的建模
我们能够更好地理解
对象之间的交互活动
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)