(五)第四章 动态建模_第1页
(五)第四章 动态建模_第2页
(五)第四章 动态建模_第3页
(五)第四章 动态建模_第4页
(五)第四章 动态建模_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 动态建模系统的动态行为是指对象是如何通过通信来进行协作的,以及系统中的对象是如何在系统的生命周期内改变状态的。交互(Interaction):为产生某种功能而在一组对象之间进行的通信过程。描述交互的动态图:· 状态图(State Diagram):可以描述一个对象在其生命周期中拥有哪些状态,该对象在这些状态下的行为,以及什么样的事件会导致状态发生改变。· 交互图(Interaction Diagram):可以描述对象之间是如何进行交互和通信的。包括顺序图(Sequence Diagram)、通信(协作)图(Communication Diagram)、交互概观图(I

2、nteraction Overview Diagram)以及时序图(Timing Diagram)。其中,顺序图和通信图都可以显示交互。但是顺序图的焦点在时间上, 而通信图的焦点在空间上。交互概观图显示了一些作为一个较大交互流的部分內容的交互图。时序图显示沿着一个精确时间轴的交互。· 活动图(Activity Diagram):是另外一种显示交互的方法,但是活动图的主要焦点是工作。4.1 对象之间的交互两个对象之间的交互是通过一个对象向另一个对象发送消息来实现的。消息的类型:· 简单消息:一个平直的控制流。简单消息显示了控制是如何从一个对象传递到另一个对象的,这个过程中并没

3、有描述任何有关对象之间通信的细节信息。· 同步消息:一个嵌套的控制流,一般是作为操作调用来实现的。只有在处理该消息的操作结束之后,调用者才能恢复继续执行。· 异步消息:异步的控制流。对象之间的异步消息表明了不等待语义;发送者不必等待该消息处理完就可以继续执行。同步消息异步消息简单消息立即返回的同步消息图4.1 消息类型注解4.2 状态图4.2.1 状态和转换 状态和状态转换的概念一个对象的状态是该对象在此之前所执行的所有活动的结果,通常是由对象的属性值所决定的,并且会链接到其他对象。有关对象状态的例子:· 货物(对象)已经付款(状态);· 小轿车(对象)

4、静止不动(状态);· 机器的引擎(对象)在运转(状态);· Jim(对象)担任销售员的角色(状态);· Kate(对象)结婚了(状态)。当一个事件发生时,对象就可能会改变状态。对象的动态行为可以表现在两个方面:交互和内部状态的变化。 状态图的组成部分· 起始点(初态)(Initial State)· 结束点(终态)(Final State)· 状态(State)· 状态转换(State Transition)· 导致状态发生转换的事件状态转换激发(Fire)或状态转换被触发(Triggered)UnpaidPaid

5、删除货物对象付款创建货物对象图4.2 货物对象的状态图Onfirst floorMovingupMovingdownMoving tofirst floorIdlearrivedarrivedarrivedgo upgo upgo downtime-out图4.3 电梯对象的状态图 状态的组成部分状态名状态变量活动图4.4 状态的三个部分:状态名、状态变量和活动 活动组成在活动组成中可能会使用的三个标准事件:entry, exit和do。活动组成的形式语法(Formal Syntax)是:event-name argument-list /action-expression LoginLogi

6、n time = Current timeentry/type“login”exit/login(user name, password)do/get user namedo/get passwordhelp/display help图4.5 一个名为login的状态 状态转换Startingapplicationsdo/loadapplicationsStarting OSdo/load OSBootdo/run biosprogram图4.6 不带显式事件的状态转换用于确定一个状态转换的形式语法是:event-signature guard-condition/ action-expres

7、sion send-clause其中,event-signature的语法定义为:event-name(parameter, .)并且send-clause的语法是:destination-expressiondestination-event-name(argument,)Event-Signature(事件签名)event-signature包括一个事件名(event-name)和相关的参数。参数列表的语法是:Parameter-name:type-expression, Parameter-name:type-expression Onfirst floorMoving tofirst

8、floorIdlearrivedarrivedarrivedgo up (floor)go up (floor)go down (floor)time-outMoving updo/moving to floorMoving downdo/moving to floor图4.7 状态转换上所附的事件带有一个参数floor带event-signature的状态转换的例子如下:draw (f : Figure , c : Color )redraw ( )redrawprint ( invoice )Initializingdo/bootupWorkingShutting Downturn PC

9、onshut down图4.8 GUI 的状态和状态转换Guard-Condition(保护条件)Onfirst floorMoving tofirst floorarrivedarrivedarrivedgo up (floor)go up (floor)go down (floor)timer = time-outMoving updo/moving to floorMoving downdo/moving to floorIdletimer = 0do/increase timer图4.9 guard-condition:timer = time-out带一个guard-conditio

10、n的状态转换的例子如下: t = 15 sec number of invoices > n withdrawal ( amount ) balance >= amount Initializingdo/bootupWorkingShutting Downturn PC onshut downScreensavingtime outkeystrokeormouse movement图4.10 带保护条件的GUI 的状态图Action-Expression(动作表达式)Onfirst floorarrivedarrivedgo up (floor)go up (floor)go do

11、wn (floor)timer = time-out / go down (first floor)Moving updo/moving to floorMoving downdo/moving to floorIdletimer = 0do/increase timer图4.11 在Idle 状态和On first floor 状态之间的状态转换上有一个guard-condition和一个 action-expression。带有action-expression的状态转换的例子如下:increase ( ) / n : = n+1 / m : = m+1add (n) / sum : =

12、sum + n/ flashSend-Clause(发送语句)send-clause是动作的特殊情况。它是一个用于在两个状态的转换过程中发送消息的显式语法。该语法包括一个destination-expression和一个event-name。例如,下面的action-expression: timer = Time-out / go down ( first floor )可以被转换成如下的send-clause: timer = Time-out self.go down ( first floor )其他带有send-clause的状态转换的例子如下:out_of_paper ( ) in

13、dicator.light( )left_mouse_btn_down ( location ) / color := pick_color ( location ) pen.set ( color )4.2.2 事件事件是指发生的某件事情,它可以导致产生某一动作。Displaydo/displaycurrent timeSet minutedo/displayminutesSet hoursdo/display hoursmode_buttonmode_buttoninc/hours := hours + 1inc/minutes := minutes + 1mode_buttonDigit

14、al_watchmode_button()inc()类状态图图4.12 Digital_watch类及其相应的状态图在UML中有以下四种类型的事件:· 条件变为真:这种事件在图形上显示为一个状态转换上的guard-condition条件。· 接收到一个显式的来自其他对象的信号:在图形上显示为状态转换上的一个event-signature。· 接收到操作调用:对象调用了另一个对象中的操作。在图形上显示为状态转换上的一个 event-signature。· 指定的一段时间的消耗:在图形上显示为状态转换上的一个时间表达式。错误也是一种事件例如:errorout

15、_of_memory类可以接收或发送消息。信号也是普通的类,但只用于发送信号。信号类可以使用signal构造型来构造。signalInputabstractdevice: Devicetime: TimesignalMouseabstractup: Booleandown: BooleanxPos: IntyPos: IntsignalKeyboardcharacter: Charup: Booleandown: BooleansignalVoice Recognitioncommando: stringsignalRight MouseButtonsignalLeft MouseButton

16、Senddo/send(input) to corresponding classIdleInput输入信号Input可以是下述任意一种类的对象:Keyboard, Left Mouse Button, Right Mouse Button, Voice Recognition图4.13 带抽象父类的信号类层次结构Java ImplementationDisplaydo/displaycurrent timeSet minutedo/displayminutesSet hoursdo/display hoursmode_buttonmode_buttoninc/hours := hours +

17、 1 modulo 24inc/minutes := minutes + 1 modulo 60mode_button图4.14 一个数字手表的状态图public class State public final int Display = 1; public final int Set_hours = 2; public final int Set_minutes = 3; public int value;public class Watchprivate State state = new State ( );private DigitalDisplay LCD = new Digita

18、lDisplay ( ); public Watch ( ) state.value = State.Display ( ); LCD.display_time ( ); public void mode_button ( ) switch ( state.value ) case State.Display : LCD.display_time ( ); state.value = State.Set_hours; break;case State.Set_Hours : LCD.display_hours ( ); state.value = State.Set_minutes; brea

19、k; case State.Set_minutes : LCD.display_time ( ); state.value = State.Display; break;public void inc ( )case ( state.value )case State.Display :;break;case State.Set_hours :LCD.inc_hours ( );break;case State.Set_minutes :LCD.inc_minutes ( );break;使用中维修中闲置报废修好损坏多余重新使用不能修好超过年限图4.15 一个设备使用状态的状态图4.3 在状态

20、图之间发送消息On/StopOn/PlayOffOffOnOn ()Off ()Play ()Stop ()Remote ControlOn ()Play ()Off ()Stop ()Off()/Stop()CD PlayerOn ()Off ()Play ()Stop ()图4.16 遥控器对象(Remote Control)向CD播放机对象(CD Player)发送消息待命启动加热计时关机加热开机关机暂停温度计时控制器电烤箱加热( )加热( )关机( ) 计时器5分钟关机( )加热( )关机( )温度120温度140图4.17 状态图之间的消息发送4.3.1 子状态一个状态可以包含一些嵌套的子状态(Substate)。这些子状态可能是与子状态(And-substate),也可能是或子状态(Or-substate)。ForwardBackwardRunning图4.18 或子状态ForwardBackwardHigh speedLow speedRunning图4.19 与子状态待机提速运行减速使用中启动开机到达运行速度停机速度=0图4.20 描述设备使用状况的嵌套状态图4.3.2 历史指示器历史指示器(History

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论