文章目录
- 系统中,各个对象、角色并不是孤立的,它们相互之间通过传
递消息进行交互。 - 交互是系统的一种动态行为特征。
- 这些动态行为表现出协作、消息传递、时间性、顺序性、事件发生、状态转换等各方面的特征,
- 作为系统分析和设计,如何更直观地用图形来表示这些动态行为特征,是相当重要的工作内容。
- UML的状态图、活动图
- 顺序图和通信图,
- 可很好地实现系统的动态建模,清晰地描述系统的动态行为特征
【任务7-1】状态图的基础知识
- 软件中每一对象,
- 在某一时刻,都处于某种特定状态
- 这种状态就是对象接受上一个动作或事件之后的结果。
- 当作用于某对象的某个动作或事件发生了
- 该对象的状态会发生变化,转为另一状态
任务描述
- 任一系统中的对象,在它生命周期中某个时间段或某一时刻,
- 总处某一状态,
- 系统分析员在对系统分析建模时,最先考虑的不是基于活动之间的控制流,
- 而往往是基于状态之间的控制流,
- 因为系统中对象的状态和状态变化最易被发现和理解
- 房间的灯,最易发现的就是灯是亮,还是灭
- 灯亮是因为打开了灯的开关,灯灭是关闭了灯的开关。
- 系统分析员在软件建模时,最佳的方法
- 用UML状态图来分析、展示系统对象状态和状态变化
- 因此,状态图是系统分析建模的一种常用工具和方法。
- 绘制状态图前,掌握状态图的基本知识,
- 状态图中涉及的一些基本组成要素,
- 然后结合具体的项目绘制合理的、清晰的状态图。
- 本任务将需要完成
- 了解状态图的概述
- 了解状态图的组成要素
任务实现
1.状态图的概述
-
也称状态机图,一个状态图显示一个状态机
-
描述系统状态及状态转换的UML图形
-
所有系统对象都有状态
-
状态是对象执行一系列活动
- 或某事件发生所产生的结果。
-
当某一事件发生,对象状态将发生变化,从一个状态转移成另一个状态。
-
状态图通过建立对象的生命周期模型来描述对象随着时间变化的动态行为。
-
表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作( Action)。
-
重点在于描述状态图的控制流。
-
通过状态图可以了解一个对象所能到达的所有状态,以及对象受到某个事件对其状态的影响,展示了对象的状态随时间、事件发生而产
生的变化,还能说明事件是如何改变对象的状态的。 -
图7-1
- 电话机状态图,
- 描述电话机的初始、摘机、拨号、听、说、挂机和终止等各种状态的变化
- 状态图描述对象的状态与状态转换,适合以下两种类型的应用。
任务7-2绘制状态图
- 状态图是描述对象状态和状态变迁的工具
- 不是所有系统在建模时都一定要绘制状态图
- 根据实际情况决定是否要绘制状态图
- 下列情况可选择为系统绘制状态图
- 系统建模对象状态多于3
- 有大量信息,常要对这些信息增、删、改等操作的类
- 边界类较多较复杂时
- 如,各种功能界面多且复杂时
- 系统是实时应用系统时。
任务描述
- 先介绍状态图中主要组成要素的绘制
- 以“ eshop购物商城”为例,绘制订单状态图。
任务实现
1.状态图主要组成要素的绘制
- 每个状态图的构成不一定完全相同,具体的组成要素由对象在处理过程中的状态和状态转换实际情况来决定的。
- 根据上章节的状态图的基础知识的介绍,
- 状态图中出现的组成要素有:
- 初始状态、
- 终止状态、
- 一般状态、
- 复合状态、
- 转换、事件、动作、监护条件、判定和同步
(1)创建状态图
- 创建项目、创建状态图模型、创建状态图
- ①打开或创建项目
- 在EA主界面“文件”中选“打开项目
- 打开现有的项目 eshop.EAP(项目创建见第四单元的绘制用例图)。
- 2 创建状态图模型。
- 打开EA的 eshop,右侧项目浏览器区域中,
- 右击“ eshop”项目,选“增加”→“使用向导添加新模型…”命令
- ,如图7-9
任务7-5 顺序图的基础知识
- 系统地动态建模包括状态图、活动图,交互图
- 接下来学习交互图
- UML2.X定义4种交互图,
- 顺序图、通信图、时间图和交互概览图
- 最广泛的是顺序图和通信图
任务描述
-
要了解汽车,首先要了解汽车的主要结构组成,
-
如发动机、轮胎。
-
要真正了解汽车,须了解汽车为什么能运行,
- 各部分如何实现交互,
- 各组成部分如何配合协调从而形成一个整体的、正常运行的系统。
-
前面的项目中已了解了类图和对象图,
- 只是从静态结构的角度了解了系统
-
系统对象并不孤立的,对象和对象之间有交互的,
-
还需了解对象之间如何交互,
- 包括哪些对象参与交互,
- 对象之间交互的消息是什么,
- 这些消息是按什么顺序传递的等,
- 这就要用到交互图
- 顺序图作为一种重要交互图,对系统的动态建模起着不可忽视作用
- 顺序图建模前
- 首先须掌握顺序图的基本知识,
- 尤其顺序图中涉及的一些基本组成要素,
- 然后才能结合具体的项目绘制合理的、清晰的顺序图
- 因此,本任务将需要完成如下内容。
- 顺序图的概述。
- 顺序图的组成要素。
实现
1.顺序图的概述
- 也称序列图
- 顺序图描述对象之间传递消息的时间顺序,表示用例中的行为顺序,强调消息交互的时间顺序,是常见的交互图
- UML中,顺序图将交互关系表示为一个二维图
- 横轴是对象轴,交互的对象或角色排列在横轴上。
- 纵轴是时间轴,时间沿垂直向下延伸,交互的消息按时间顺序从上向下排列。
- 空调制冷遥控的顺序图。
- 横轴上使用者、遥控器和空调机等3个交互对象
- 纵轴上,从上向下按时间先后排列
- “按下制冷按钮”
- “发出制冷信号”
- “启动制冷”
- “制冷指示灯亮”
- “吹出冷风”等
- 用户: 顺序图可以帮助他们进一步了解业务细节。
- 分析人员: 进一步明确事件处理流程。
- 开发人员: 进一步了解需要开发的对象和这些对象的操作。
- 测试人员:帮助他们设计测试用例
2.顺序图的组成要素
- 顺序图
- 含对象、生命线、**期和消息
(1)对象
- 对象指系统中存在消息交互的元素,
- 可是类对象、参与者或组件
- 每一个对象都有对象名,以便唯一标识一个对象。
- 对象名的命名规几种形式:
- 对象名:类名
- :类名
- 对象名
- 顺序图的对象图标,根据对象的类型不同可能不一样
- 参与者 实体类对象 边界类对象 控制类对象和一般类对象
- 提供不同的对象图标,
- 但都可设置转换成统一的通用图标,即矩形框,对象名在矩形框中
- 对象下部有一条被称为“生命线”的垂直虚线
- 如图7-76,表示不同图标的对象
- 顺序图中,对象有两种:
- 系统在运行初始就已存在的对象,这种对象图标位于顺序图顶部
- 系统在运行过程中创建的,这种对象图标位置不在顶部
- 现在很多建模软件针对这两种对象,
- 其图标位置没有区别,都放在顶部
(2)生命线
- 生命线是垂直的虚线
- 生命线与对象结合在一起,称对象的生命线。
- 生命线是一条时间线,从顺序图顶部向下延伸,
- 所用时间取决于交互持续的时间,
- 生命线表现对象存在的时间段
- 如图7-75和图7-76中向下垂直延伸的虚线就是各个对象的生命线。
(3)**期
- 也称控制焦点,表示对象执行相应操作的时间段。
- UML中,**期使用位于对象生命线上的小矩形表示,
- 这个小矩形也称**条,如图7-75
- 3个对象的生命线上的小矩形条,就表示这个对象的**期。
- **条的长度表示对象被**(即执行操作)的持续时间,
- 只粗略地表示时间的相对长短,并没有精确地、定量
- **期没有明确对象操作的具体开始时间和结束时间,
- 一般从对象发出第一条消息开始,到接收最后一条消息结東。
- **期是一种大概地、相对地表示一般意义上的持续时间。
(4)消息
- 实现对象之间通信的规约。
- 可是信息的传递,也可是操作的调用
- 消息是从一个发送对象向另一个或多个接收对象发送信号,或由一个调用对象调用另一个或多个被调用对象的操作
- 如过程调用、线程的内部通信、事件发生,都通过消息来实现的
- 消息传递中,接收对象在接收消息时通常会产生一个动作,引发目标对象的状态改变或者其他相关对象的状态改变
- 这些动作如以下几种
- 调用 调用某个对象的操作,也可自身调用
- 返回。即给调用者返回一个值
- 发送。即向对象发送一个信号
- 创建。即创建一个对象。
- 销毁即销毁一个对象,也可以是自身销毁。
- 顺序图中,用从一条生命线到另一条生命线的箭头线来表示消息。
- 消息在图中生命线的上下位置决定了它的传递时间的先后
- 消息可以用消息名及参数来标识,也可不带参,
- 消息也可带有顺序编号,编号体现消息的时间先后
- 5个消息都有顺序编
- message1有参数,其他消息不带
- 不同图标区别不同的消息特征
- 特征包括异步、同步、返回,自身
- 异步消息:发送对象不考虑接收对象是否做好了接收准备都可以发送的消息称为异步消息
- 发送对象发送完消息后,继续自己的活动,不等待接收对象的消息返回。
- 用带开叉箭头的实线表示,箭头线从发送对象指向接收对象
- message1
- 同步消息:当发送对象要发一个消息时,
- 需接收对象已经做好接收准备时才能发送的消息称为同步消息。
- 最常见的情况就是调用
- 即发送对象在执行某个操作时调用接收对象的一个操作
- 实心箭头的实线,箭头线从发送对象指向接收对象。
- messages4
- 返回消息:接收对象给发送对象返回的消息。
- 用带开又箭头的虚线表示
- 箭头线从接收对象指向发送对象。
- message3和 message5
- 自身消息:消息发送方与接收方是同一对象
- 对象自身调用或
- 对象内的一个方法
- 调用另一方法,就是自身消息
- message2就是自身消息
【任务7-6】绘制顺序图
- 在系统的动态行为建模中,
- 如果强调对象间消息传递的时间顺序时,一般用顺序图。
- 在一个复杂系统中,对象之间消息传递复杂
- 在顺序图建模时并不能包罗万象
- 也不可能用一个顺序图来展示系统的所有消息传递,
- 实际动态行为建模中,往往针对一些核心的用例行为顺序图的建模
任务猫述
- 绘制顺序图时,涉及对象、生命线、**期和消息等组成要素
- 先顺序图中这些主要组成要素的绘制
- 以“eshop购物商城”为例
- 绘制会员编辑购物车的顺序图
- 本任务完成的具体内容如下
- 顺序图主要组成要素的绘制。
- 绘制会员编辑购物车的顺序图。
任务实现
1.顺序图主要组成要素的绘制
- 顺序图的组成要素包括对象
- 生命线、**期和消息。
- 生命线是与对象结合在一起,也称为对象生命线,因此,不需单独介
绍生命线的绘制。 - **是通过消息发送和接收的发生而**对象,也不需单独介绍**期。
- 在绘制实际项目案例的顺序图之前,
- 只需先熟练掌握三个方面的实践操作技能
- :创建顺序图;
- 创建和设置对象;
- 绘制和设置消息。
(1)创建顺序图
- 先创建项目、创建顺序图模型、创建顺序图
- 创建项目与创建顺序图模型步骤,与绘制状态图中的创建项目与创建状态图模型的步骤相似,不过在此处,模型的名称修改为“顺序图模型”,其余的操作步骤一样。
- 下面只作创建顺序图
- 项目浏览器区域中,右击“顺序图模型”,选择“添加图”,进入“新建图”
- “图”输人框,修改顺序图名称(如“顺序图组成要素示例图”),
- 图的类别区域选择UML Behavioral"”的“ Sequence”
- 单击“确定”按钮,完成顺序图的添加,如图7-79
(2)创建和设置对象
- 顺序图中,参与交互的对象可以是参与者(Actor,也称角色),可以是普通的类对象。
- 针对这些交互对象,都提供不同图标,
- 而且不同类型的类对象,也提供了不同的图标,
- 如一般类对象的图标、实体类对象图标、
- 边界类图标和控制类图标都不同
- 对象的图标是带有生命线的。
①参与者对象。
- 左侧工具箱栏中“ Interaction”下的“ Actor图标(参与者),
- 其拖至中间的绘图区域,
- 自动进入参与者的特性编辑界面,
- 在“特性”→“通用”中输入参与者的名称,
- 如“刘备:会员”,如图7-80。
- 然后单击“确认”按钮完成参与者的添加,如图7-81
- 选中参与者,拖动调整以改变图标大小、位置和生命线的长度。
- 参与者作为顺序图中的一种对象,也可用一般对象的图标表示,即使用矩形框表示。
- 右击参与者“刘备:会员”,选择“高级”→“用矩形框表示法”,如图7-82
- 即可将参与者的图标改变为矩形框,如图7-83
②类对象。
- 类对象图标
- 一般类对象图标、实体类对象图标、边界类图标
- 控制类图标
- 顺序图的绘制界面,选左侧工具箱栏中不同的对象图标,如图7-84
- Lifeline"。为一般类对象图标,
- “ Boundary”为边界类对象图标,"
- Control”为控制类对象图标
- Entity”为实体类对象图标。
- 其拖至中间的绘图区域,设置相应的对象名,即可创建不同图标
的类对象,如图7-85, - “:商品”为一般类对象,
- “:购物车页面”为边界类对象,
- “:编辑购物车”为控制类对象,
- “:订单”为实体类对象。
- 也可修改为一般类对象的矩形框图标,
- 右击对象,选择“特性”,进入对象的特性编辑界面,
- 将右侧上面的“构造型”栏中内容清空,如图7-86,
- 单击“确定”,即可改为矩形框图标。
(3)绘制和设置消息
-
图7-77为例,介绍消息绘制和设置
-
左側工具箱“Interaction Relationships”下“ Message",
- 从“对象1”拖至“对象2"
-
即可在两个对象间绘制表示消息的箭头线,方向从“对象1”发送至“对象2”
-
快捷连接方式绘制消息的箭头线。
- 单击“对象1”,选择右上角的快捷连接图标1,
- 将其拖至“对象2”,如图7-87,释放鼠标,即可完成两个对象间的消息箭头线的绘制,如图7-88
- 7-88看出,“对象1”和“对象2”间的消息是有顺序编号但没有消息名的异步消息。
- 双击箭头线,或右击表示消息的箭头线,
- 然后选择“特性”,进入消息的特性编辑界面,如图7-89
- ①在“签名”区域的“消息”输入栏可以输入消息或操作的名称
- 输入消息或操作的参数,如a,如图7-90
- “返回值”输入消息或操作的返回值的数据类型,若没有返回,则输入void
- ④在“控制流类型”区域的“同步”栏中选“同步”或“异步”
- 如果消息是从接收对象返回到发送对象的返回消息
- 除了绘制消息箭头线的方向是从接收对象指向发送对象外,
- 还应该在消息特性界面的“控制流类型”区域中,选择“是返回”按钮,这样箭头线就会变成箭头虚线
- 如果某个对象的自身消息,选择工具箱栏中“ Interaction Relationships”"下的"Self-Message图标,
- 然后,在中间绘图区域单击该对象即可完成自身消息的绘制。
- 希望显示消息的自动顺序编号
- 则在界面上方的菜单栏中“工具”→“选项”,
- 进入选项设置界面,如图7-92
- 在设置界面的左侧,选“图”→“顺序”,
- 右側选中“显示顺序编号”复选框,
- 单击“关闭”,
- 则会自动显示消息的顺序编号。