五第四章 动态建模.docx
《五第四章 动态建模.docx》由会员分享,可在线阅读,更多相关《五第四章 动态建模.docx(20页珍藏版)》请在冰豆网上搜索。
![五第四章 动态建模.docx](https://file1.bdocx.com/fileroot1/2023-1/8/c8580fb3-33bc-41ad-b7bf-cc5cbb2d843f/c8580fb3-33bc-41ad-b7bf-cc5cbb2d843f1.gif)
五第四章动态建模
第四章动态建模
系统的动态行为是指对象是如何通过通信来进行协作的,以及系统中的对象是如何在系统的生命周期内改变状态的。
交互(Interaction):
为产生某种功能而在一组对象之间进行的通信过程。
描述交互的动态图:
·状态图(StateDiagram):
可以描述一个对象在其生命周期中拥有哪些状态,该对象在这些状态下的行为,以及什么样的事件会导致状态发生改变。
·交互图(InteractionDiagram):
可以描述对象之间是如何进行交互和通信的。
包括顺序图(SequenceDiagram)、通信(协作)图(CommunicationDiagram)、交互概观图(InteractionOverviewDiagram)以及时序图(TimingDiagram)。
其中,顺序图和通信图都可以显示交互。
但是顺序图的焦点在时间上,而通信图的焦点在空间上。
交互概观图显示了一些作为一个较大交互流的部分內容的交互图。
时序图显示沿着一个精确时间轴的交互。
·活动图(ActivityDiagram):
是另外一种显示交互的方法,但是活动图的主要焦点是工作。
4.1对象之间的交互
两个对象之间的交互是通过一个对象向另一个对象发送消息来实现的。
消息的类型:
·简单消息:
一个平直的控制流。
简单消息显示了控制是如何从一个对象传递到另一个对象的,这个过程中并没有描述任何有关对象之间通信的细节信息。
·同步消息:
一个嵌套的控制流,一般是作为操作调用来实现的。
只有在处理该消息的操作结束之后,调用者才能恢复继续执行。
·异步消息:
异步的控制流。
对象之间的异步消息表明了不等待语义;发送者不必等待该消息处理完就可以继续执行。
图4.1消息类型注解
4.2状态图
4.2.1状态和转换
⒈状态和状态转换的概念
一个对象的状态是该对象在此之前所执行的所有活动的结果,通常是由对象的属性值所决定的,并且会链接到其他对象。
有关对象状态的例子:
·货物(对象)已经付款(状态);
·小轿车(对象)静止不动(状态);
·机器的引擎(对象)在运转(状态);
·Jim(对象)担任销售员的角色(状态);
·Kate(对象)结婚了(状态)。
当一个事件发生时,对象就可能会改变状态。
对象的动态行为可以表现在两个方面:
交互和内部状态的变化。
⒉状态图的组成部分
·起始点(初态)(InitialState)
·结束点(终态)(FinalState)
·状态(State)
·状态转换(StateTransition)
·导致状态发生转换的事件
状态转换激发(Fire)或状态转换被触发(Triggered)
图4.2货物对象的状态图
图4.3电梯对象的状态图
⒊状态的组成部分
图4.4状态的三个部分:
状态名、状态变量和活动
⒋活动组成
在活动组成中可能会使用的三个标准事件:
entry,exit和do。
活动组成的形式语法(FormalSyntax)是:
event-nameargument-list‘/’action-expression
图4.5一个名为login的状态
⒋状态转换
图4.6不带显式事件的状态转换
用于确定一个状态转换的形式语法是:
event-signature‘[’guard-condition‘]’‘/’action-expression‘^’send-clause
其中,event-signature的语法定义为:
event-name‘(’parameter‘,’,...‘)’
并且send-clause的语法是:
destination-expression‘.’destination-event-name‘(’argument‘,’…‘)’
Event-Signature(事件签名)
event-signature包括一个事件名(event-name)和相关的参数。
参数列表的语法是:
Parameter-name‘:
’type-expression,Parameter-name‘:
’type-expression…
图4.7状态转换上所附的事件带有一个参数floor
带event-signature的状态转换的例子如下:
draw(f:
Figure,c:
Color)
redraw()
redraw
print(invoice)
图4.8GUI的状态和状态转换
Guard-Condition(保护条件)
图4.9guard-condition:
[timer=time-out]
带一个guard-condition的状态转换的例子如下:
[t=15sec]
[numberofinvoices>n]
withdrawal(amount)[balance>=amount]
图4.10带保护条件的GUI的状态图
Action-Expression(动作表达式)
图4.11在Idle状态和Onfirstfloor状态之间的状态转换上有一个guard-condition和一个action-expression。
带有action-expression的状态转换的例子如下:
increase()/n:
=n+1/m:
=m+1
add(n)/sum:
=sum+n
/flash
Send-Clause(发送语句)
send-clause是动作的特殊情况。
它是一个用于在两个状态的转换过程中发送消息的显式语法。
该语法包括一个destination-expression和一个event-name。
例如,下面的action-expression:
[timer=Time-out]/godown(firstfloor)
可以被转换成如下的send-clause:
[timer=Time-out]^self.godown(firstfloor)
其他带有send-clause的状态转换的例子如下:
out_of_paper()^indicator.light()
left_mouse_btn_down(location)/color:
=pick_color(location)^pen.set(color)
4.2.2事件
事件是指发生的某件事情,它可以导致产生某一动作。
图4.12Digital_watch类及其相应的状态图
在UML中有以下四种类型的事件:
·条件变为真:
这种事件在图形上显示为一个状态
转换上的guard-condition条件。
·接收到一个显式的来自其他对象的信号:
在图形上显示为状态转换上的一个event-signature。
·接收到操作调用:
对象调用了另一个对象中的操作。
在图形上显示为状态转换上的一个event-signature。
·指定的一段时间的消耗:
在图形上显示为状态转换上的一个时间表达式。
错误也是一种事件
例如:
《error》out_of_memory
类可以接收或发送消息。
信号也是普通的类,但只用于发送信号。
信号类可以使用《signal》构造型来构造。
输入信号Input可以是下述任意一种类的对象:
Keyboard,LeftMouseButton,RightMouseButton,VoiceRecognition
图4.13带抽象父类的信号类层次结构
JavaImplementation
图4.14一个数字手表的状态图
publicclassState
{
publicfinalintDisplay=1;
publicfinalintSet_hours=2;
publicfinalintSet_minutes=3;
publicintvalue;
}
publicclassWatch
{
privateStatestate=newState();
privateDigitalDisplayLCD=newDigitalDisplay();
publicWatch()
{
state.value=State.Display();
LCD.display_time();
}
publicvoidmode_button()
{
switch(state.value)
{
caseState.Display:
LCD.display_time();
state.value=State.Set_hours;
break;
caseState.Set_Hours:
LCD.display_hours();
state.value=State.Set_minutes;
break;
caseState.Set_minutes:
LCD.display_time();
state.value=State.Display;
break;
}
publicvoidinc()
{
case(state.value)
{
caseState.Display:
;
break;
caseState.Set_hours:
LCD.inc_hours();
break;
caseState.Set_minutes:
LCD.inc_minutes();
break;
}
}
图4.15一个设备使用状态的状态图
4.3在状态图之间发送消息
图4.16遥控器对象(RemoteControl)向CD播放机对象(CDPlayer)发送消息
图4.17状态图之间的消息发送
4.3.1子状态
一个状态可以包含一些嵌套的子状态(Substate)。
这些子状态可能是与子状态(And-substate),也可能是或子状态(Or-substate)。
图4.18或子状态
图4.19与子状态
图4.20描述设备使用状况的嵌套状态图
4.3.2历史指示器
历史指示器(HistoryIndicator)用来保存内部状态。
图4.21一个安装程序
图4.22GUI的Working状态中的子状态
4.3.3UML2.0中的新变化
入口(entrypoint)
出口(exitpoint)
图4.23UML状态图中的入口和出口