版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章动态模型之
状态图、顺序图、协作图和活动图§4.1状态图(StatechartDiagram)状态图:描述了一个特定对象在其生存期间的所有可能状态以及引起状态跃迁的事件。其中:1.“事件”是引起状态跃迁(转移)的内部消息2.“状态图”主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件(event),以及因状态转移而伴随的动作(action);3.所谓对象可以是类的实例、用例的实例或整个系统的实例.大多数面向对象技术用状态图描述单个对象(类的实例)在其生命周期中的动态行为;4.状态图是对某个类对象的补充;5.状态图在检查、调试和描述类的动态行为时非常有用;6.状态图是UML中对系统的动态行为建模的5个视图之一一、状态图中的基本元素基本元素包括:状态、关系(转移)、判断、事件和动作。
1.状态(State)状态:是指在对象的生命期中的某种状况,在此期间对象将满足某个条件、或执行某个动作、或等待某个事件。说明:每个对象都有状态,一个状态表示该对象执行了之前活动后的结果。其中:状态可以细分为不同的类型:
⑴初态:⑵终态:
说明:一个状态图只能有一个初态。但终态可以有一个或多个,也可以没有终态。
⑶一般状态:
活动格式:
do/执行的动作
entry/执行的动作:入口动作
exit/执行的动作:出口动作例如:或状态名状态名活动表说明:
①
当进入这个状态时首先执行“entry”动作,所以一个状态只能有一个“entry”动作。习惯上把它放在其他动作的最前面。
②当退出这个状态时再执行“exit”这个动作,所以一个状态只能有一个“exit”动作。习惯上把它放在其他动作的最后面。③“do”动作顺次执行,执行完所有动作(不包括“exit”这个动作)后等待事件发生。⑷组合状态(compositestate)组合状态:一个含有“子状态(substate)”的状态子状态:嵌套在另一个状态中的状态
WXYAB例如:⑸历史状态(historystate)历史状态:是一个伪状态(pseudostate),其目的是记住从组合状态中退出时所处的子状态。当再次进入组合状态时,可直接进入这个子状态,而不是再次从组合状态的初态开始。HH*其中:历史状态用符号或表示:是浅(shallow)历史状态的符号,表示只记住最外层组合状态的历史H设置方法:在该状态的Specification对画框中的General页面选择
State/activityhistory。:是深(deep)历史状态的符号,表示可记住任何深度的组合状态的历史。H*设置方法是在该状态的Specification对画框中的General页面同时选择:
State/activityhistory和Substate/activityhistory。说明:需要注意的是,如果一个组合状态到达了其终态,则会丢失历史状态中的信息,就好像还没有进入过这个组合状态一样2.关系
状态与状态之间的关系是标有“事件”字符串的单向关联关系。也可以没有“事件”。3.并发和同步4.判定一个判定是一个状态同两个以上状态之间的一种关系,工作流在此处分支转移。判定符号:例如:二、事件(event)“事件”是引起状态跃迁(转移)的内部消息。(前面给出的)或者说是指已发生并可能引发某种活动的一件事其中:事件产生的原因有调用、满足条件的状态的出现、到达时间点或经历某一时间段、发送信号等。事件的语法格式:
•事件名:包括“调用事件”、“变化事件”、“时间事件”名称
•参数列表传送的数据列表或是表达式
•监护条件:当该事件发生时,是否跃迁到下一个状态条件表达式
•动作表达式:当事件发生,监护条件成立时所执行的动作。事件名(参数列表)[监护条件]/动作表达式
1.调用事件(Callevent):
•“调用(Call)”
是指在一个过程的执行点激发一个操作,它将一个控制线程暂时从调用过程转移到被调用过程。
•调用事件(Callevent)
指的是一个对象对调用(Call)的接收,这个对象利用状态转换而不是利用固定的处理流程实现操作。说明:调用事件分为同步调用和异步调用两种;如果调用者需要等待操作的完成,则是同步调用;反之则是异步调用。调用事件的语法格式如下:过程名(实参列表)[监护条件]/动作表达式例:设有登录窗口和Login类,Login类中暂时没有属性
其描述“准备登录”状态到“登录”状态过程的状态图:123456******其描述“准备登录”状态到“登录”状态过程的状态图:例:设有登录窗口和Login类,Login类中有属性
123456******
2.变化事件(ChangeEvent):变化事件指的是依赖于特定属性值的布尔表达式的条件满足时,状态发生改变。变化事件用关键字“when”表示,其语法格式如下:
when(布尔表达式)[监护条件]/动作表达式例:基于上例,Login类中增加属性LoginTimes用来记录登录次数则描述“等待登录”到“准备登录”状态过程的状态图为:
3.时间事件(timeevent):
时间事件指的是满足某一时间表达式的情况的出现,例如到了某一时间点或经过了某一时间段.
时间事件用关键字“after/when”表示,其语法格式如下:after(时间表达式)[监护条件]/动作表达式例:基于上例,Login类中再增加属性CountTime用来记录等待时间(秒).
则描述“等待登录”到“终止状态”状态过程的状态图为:OK例1:基于类Login的对象进行登录之状态图例2:杀毒软件的定时杀毒过程可用状态图描述如下:例3:BOOLCEditDlg::OnInitDialog(){
CDialog::OnInitDialog();
//TODO:Addextrainitializationhere
EditRes.Open(CRecordset::snapshot,NULL,CRecordset::none);m_er1=EditRes.m_R1; m_er2=EditRes.m_R2;m_er3=EditRes.m_R3; m_er4=EditRes.m_R4;
UpdateData(FALSE);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCEditDlg::OnCancel(){ //TODO:Addextracleanuphere
EditRes.Close();
CDialog::OnCancel();}voidCEditDlg::OnUpButton(){ //TODO:Addyourcontrolnotificationhandlercodehere
if(!EditRes.IsBOF())EditRes.MovePrev(); m_er1=EditRes.m_R1; m_er2=EditRes.m_R2;m_er3=EditRes.m_R3; m_er4=EditRes.m_R4;
UpdateData(FALSE); }voidCEditDlg::OnDownButton(){ //TODO:Addyourcontrolnotificationhandlercodehere
if(!EditRes.IsEOF())EditRes.MoveNext();m_er1=EditRes.m_R1;m_er2=EditRes.m_R2;m_er3=EditRes.m_R3;m_er4=EditRes.m_R4;
UpdateData(FALSE);}voidCEditDlg::OnOK(){ //TODO:Addextravalidationhere
UpdateData();//将编辑框中的值赋给对应变量m_erl--m_er4
EditRes.Edit();EditRes.m_R1=m_er1; EditRes.m_R2=m_er2;EditRes.m_R3=m_er3; EditRes.m_R4=m_er4;
if(EditRes.CanUpdate()) {
EditRes.Update();
AfxMessageBox("修改成功!");}
EditRes.Close();
CDialog::OnOK();}CDialog::OnCancel()CDialog::OnOK()!EOF!BOF!BOF!EOF!EOFdo/close()注:作为课后练习,建议课后用
Rose
重新构造该图三、状态图的用途及建模技术问题:在对对象(类、用例)建模时,在什么样的情况下使用状态图呢?回答:对反应型对象建模一般使用状态图。反映型对象通常具有如下特点:
(1)响应外部事件,即来自对象语境外的事件;例如,窗口中的菜单和按钮命令
(2)在对某事件做出反映后,它又会变回空闲状态,等待下一个事件;
窗口菜单选择退出IdleWorking例如:
(3)具有清晰的生命期,可以被建模为状态、跃迁和事件的演化;
例如,时间事件或变化事件的发生
(4)当前行为和过去行为存在着依赖关系。例如,“目标状态”返回到“源状态”在使用状态图对系统反映型对象建模时,可以参照以下步骤进行:
(1)识别一个要对其生命周期进行描述的参与行为的类;
(2)对状态建模,即确定对象可能存在的状态;
(3)对事件建模,即确定对象可能存在的事件;
(4)对动作建模,即确定当转变被激活时,相应被执行的动作;
(5)对建模结果进行精化和细化。状态图作用是辅助确定类中的:
(1)属性、方法
(2)方法和方法之间的关系
(3)对方法中的算法设计也起着指导作用说明:在实际建模应用中状态图用的并不多,使用较多的有:时序图、协作图和活动图;但学习、建立和理解状态图对基于事件驱动的程序设计和对程序的分析、调试是很重要的。§4.2顺序图(sequencediagram)
顺序图:也称时序图,它是一种描述对象之间按照时间顺序进行交互的图,它由一组相互协作的对象以及它们之间可发送的消息组成,它强调消息之间的顺序。顺序图组成:主要有横向和纵向两个轴。其中:横向轴排列的是参与交互的对象,纵向轴表示时间。例如:
对象时间说明:1.对象间的排列顺序并不重要,但一般把表示参与者的对象放在图的两侧,主要参与者放在最左边,次要参与者放在最右边(或表示人的参与者放在最左边,表示系统的参与者放在最右边);2.纵向轴按时间顺序列出各对象所发出和接受的消息。顺序图建模元素:对象(object)生命线(lifeline)控制焦点(focusofcontrol)或激活期(activation)消息(message)其中:
1.对象的命名方式主要有以下三种:其中:第一种命名方式包括对象名和类名;第二种命名方式只显示类名不显示对象名,即表示这是一个匿名对象;第三种命名方式只显示对象名不显示类名,即不关心对象属于什么类。
2.消息包含普通消息、调用消息、异步消息和返回消息等多种(1)普通消息(Simple)
(2)调用消息(Procedurecall)
调用消息:指发送者把控制传递给消息的接收者,然后停止活动,等待消息接收者放弃或返回控制。调用消息的表示符号如下图所示:①调用消息可以用来表示同步的意义,事实上,在UML规范说明的早期版本中,就是采用“同步消息”这个术语的。②一般地,调用消息的接收者必须是一个被动对象(passiveobject),即它是一个需要通过消息驱动才能执行动作的对象。③另外调用消息必有一个配对的返回消息,为了图的简洁和清晰,与调用消息配对的返回消息可以不用画出。说明:(3)异步消息(Asynchronous)异步消息指发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接收者返回消息或控制异步消息的表示符号如下图所示:说明:异步消息的接收者和发送者是并行工作的。(4)返回消息(Return)
返回消息的表示符号如下图所示:说明:如果是从调用(同步)消息返回,则返回消息是隐含的,所以返回消息可以不用画出来。对于非调用(同步)消息,如果有返回消息,必须明确表示出来。
ROSE中顺序图消息图形符号列表:英文名称中文名称符号simple普通消息synchronous同步消息balking阻止消息timeoue超时消息Procedurecall调用消息asynchronous异步消息return返回消息对象的创建和撤销
1.对象的创建(两种形式)
如果对象在图的顶部(默认位置),说明对象在交互开始之前就已经存在了(关联)。如果对象是在交互过程中创建的,那末应当位于图的中间(依赖)2.对象的撤销建立时序图遵循的指导性的原则:
(1)确定交互的语境语境:可以是系统、子系统和用例等
(2)确定参与交互作用的角色—对象,根据对象的重要性,将其从左向右的方向放在时序图中。
(3)设置每个对象的生命线。一般情况下,对象存在于交互的整个过程,但它也可以在交互过程中创建和撤销。
(4)从引发某个交互的信息开始,在生命线之间按从上向下的顺序画出随后的消息。
(5)如果需要设置时间或空间的约束,可以为每个消息附上合适的时间和空间约束。
(6)给某控制流的每个消息附上前置或后置条件,这可以更详细地说明这个控制流。例1:基于“学生成绩管理系统”之“登录”语境建立顺序图控制焦点的嵌套:Tools
Options
Diagram设置了“显示”中的“控制焦点”+“分级消息”后的视图:例2:基于“图书馆管理系统”之“登录”、“借书业务”语境建立顺序图借助上述顺序图的进一步分析和设计,可将概念层类图细化为如下说明层类图:注意:不完备界面设计登录界面:借书业务界面:§4·3协作图(CollaborrationDiagram)消息消息流图形表示为:
显示两个对象之间的信息流:协作图:描述系统成份如何协同工作,它强调参加交互的各对象的组织结构。·协作图组成:主要由对象、关联和消息流3种成份组成。其中:关联就是关联关系,其图形符号为:·建立协作图遵循的指导性的原则:
(1)确定交互过程的语境(上下文))。
(2)识别参与交互过程的对象。
(3)确定对象之间的链(Link),以及沿着链的消息。
(4)从引发这个交互过程的初始消息开始,将随后的每个消息附到相应的链上。顺序图到协作图自动转换:
BrowseCreate
CollaborrationDiagram或F5协作图到顺序图自动转换:
BrowseCreate
SequenceDiagram或F5例:顺序图和协作图的比较
1.顺序图和协作图都属于交互图,都用于描述系统中对象之间的动态关系。
2.顺序图和协作图在语义上是等价的,两者之间可以相互转换,但两者并不能完全相互代替。
3.两者强调的重点不同。顺序图强调的是消息的时间顺序;协作图强调的是参与交互的对象的组织。
4.顺序图可以表示某些协作图无法表示的信息,同样,协作图也可以表示某些顺序图无法表示的信息。说明:可根据交互图补充提取类操作。活动图:是状态图的扩展,其扩展包括以下两方面:内部增加以下等元素:动作状态(原有“状态”)和“活动状态”;对象及与对象的关联(用依赖关系)外部增加有:泳道(不同对象的活动区)●说明:活动图同状态图一样也是一种特殊的状态机,
整个活动图起始于起始状态●终止于结束状态§4.4活动图(ActivityDiagram)一、组成元素1.动作状态动作状态:表示活动图的原子动作,即:结构上不能再被分解,工作上不能被中断的状态。动作状态的图形符号为:如:说明:动作状态是构造活动图的最小单位(原子动作),不能再分解;动作状态是不可以中断的状态;
动作状态是瞬时行为,它所占用的处理时间极短,有时可以忽略不计;动作状态不能同对象直接建立联系,即不可以创建、撤销一个对象;动作状态不可以有入口动作、出口动作和子状态机
2.活动状态活动状态:是非原子的,也即是可以分解的,可被中断的状态。说明:
(1)活作状态是可以被中断的状态;
(2)活动状态可以有入口动作、出口动作、状态动作和子状态机
(3)活作状态可以同对象直接建立联系,即活动状态可以创建、撤销一个对象。活动状态的图形符号为:
如:3.跃迁跃迁:由一个状态转向下一个状态,不需要事件的触发。用关联线表示:4.分支(Branch)分支:规定了基于布尔表达式的替换路径。图形表示为:5.分叉和汇合(ForkandJoin)分叉:分叉表示将单一的控制流分成两个或多个并发的控制流汇合:代表了两个或多个并发(异步)控制流的同步,联结有多个输入跃迁和一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度某餐饮管理有限公司特许经营合同
- 2024年度某旅游公司导游试用期劳动合同
- 车身市场需求与消费特点分析
- 2024年度建筑工程施工设备采购合同
- 纸制旗帜市场发展现状调查及供需格局分析预测报告
- 2024年度建筑工程施工专业分包合同
- 纺织品测试机市场需求与消费特点分析
- 2024年度工地食堂健康餐食推广与运营承包合同
- 2024年度新能源汽车专利许可合同
- 2024年度企业招聘与人才测评服务合同
- 2024中华人民共和国学前教育法学习解读课件
- 高考倒计时 二百天大有可为-高三冲刺班会
- 集装箱清洗服务合同
- 低空经济发展研究报告(2024年)-和君咨询
- 2023年中国邮政集团有限公司贵州省分公司招聘考试真题
- 江苏大学《模拟电子技术B》2022-2023学年第一学期期末试卷
- 2025年九省联考新高考 物理试卷(含答案解析)
- 2024时事政治考试题库(基础题)
- 期末考试-公共财政概论-章节习题
- 《学会专注高效学习》初中主题班会课件
- 律师谈案技巧培训课件
评论
0/150
提交评论