您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > (五)第四章动态建模
第四章动态建模系统的动态行为是指对象是如何通过通信来进行协作的,以及系统中的对象是如何在系统的生命周期内改变状态的。交互(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电梯对象的状态图OnfirstfloorMovingupMovingdownMovingtofirstfloorIdlearrivedarrivedarrivedgoupgoupgodowntime-outUnpaidPaid删除货物对象付款创建货物对象⒊状态的组成部分图4.4状态的三个部分:状态名、状态变量和活动⒋活动组成在活动组成中可能会使用的三个标准事件:entry,exit和do。活动组成的形式语法(FormalSyntax)是:event-nameargument-list‘/’action-expression状态名状态变量活动图4.5一个名为login的状态⒋状态转换图4.6不带显式事件的状态转换LoginLogintime=Currenttimeentry/type“login”exit/login(username,password)do/getusernamedo/getpasswordhelp/displayhelpStartingapplicationsdo/loadapplicationsStartingOSdo/loadOSBootdo/runbiosprogram用于确定一个状态转换的形式语法是: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()redrawprint(invoice)OnfirstfloorMovingtofirstfloorIdlearrivedarrivedarrivedgoup(floor)goup(floor)godown(floor)time-outMovingupdo/movingtofloorMovingdowndo/movingtofloor图4.8GUI的状态和状态转换Guard-Condition(保护条件)图4.9guard-condition:[timer=time-out]OnfirstfloorMovingtofirstfloorarrivedarrivedarrivedgoup(floor)goup(floor)godown(floor)[timer=time-out]Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerInitializingdo/bootupWorkingShuttingDownturnPConshutdown带一个guard-condition的状态转换的例子如下:[t=15sec][numberofinvoicesn]withdrawal(amount)[balance=amount]图4.10带保护条件的GUI的状态图Initializingdo/bootupWorkingShuttingDownturnPConshutdownScreensaving[timeout]keystrokeormousemovementAction-Expression(动作表达式)图4.11在Idle状态和Onfirstfloor状态之间的状态转换上有一个guard-condition和一个action-expression。带有action-expression的状态转换的例子如下:increase()/n:=n+1/m:=m+1add(n)/sum:=sum+n/flashOnfirstfloorarrivedarrivedgoup(floor)goup(floor)godown(floor)[timer=time-out]/godown(firstfloor)Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerSend-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类及其相应的状态图Displaydo/displaycurrenttimeSetminutedo/displayminutesSethoursdo/displayhoursmode_buttonmode_buttoninc/hours:=hours+1inc/minutes:=minutes+1mode_buttonDigital_watchmode_button()inc()类状态图在UML中有以下四种类型的事件:·条件变为真:这种事件在图形上显示为一个状态转换上的guard-condition条件。·接收到一个显式的来自其他对象的信号:在图形上显示为状态转换上的一个event-signature。·接收到操作调用:对象调用了另一个对象中的操作。在图形上显示为状态转换上的一个event-signature。·指定的一段时间的消耗:在图形上显示为状态转换上的一个时间表达式。错误也是一种事件例如:《error》out_of_memory类可以接收或发送消息。信号也是普通的类,但只用于发送信号。信号类可以使用《signal》构造型来构造。《signal》Input{abstract}device:Devicetime:Time《signal》Mouse{abstract}up:Booleandown:BooleanxPos:IntyPos:Int《signal》Keyboardcharacter:Charup:Booleandown:Boolean《signal》VoiceRecognitioncommando:string《signal》RightMouseButton《signal》LeftMouseButton输入信号Input可以是下述任意一种类的对象:Keyboard,LeftMouseButton,RightMouseButton,VoiceRecognition图4.13带抽象父类的信号类层次结构JavaImplementation图4.14一个数字手表的状态图Displaydo/displaycurrenttimeSetminutedo/displayminutesSethoursdo/displayhoursmode_buttonmode_buttoninc/hours:=hours+1modulo24inc/minutes:=minutes+1modulo60mode_buttonSenddo/send(input)tocorrespondingclassIdleInputpublicclassState{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;brea
本文标题:(五)第四章动态建模
链接地址:https://www.777doc.com/doc-3111592 .html