- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 第七章 状态图 现在要开始学习的是如何随时间变化的UML动态元素。本章的主要内容是: ● 什么是状态图。 ● 事件、动作和监视条件。 ● 子状态:顺序的和并发的。 ● 历史状态。 ● 为什么状态图很重要。 在前—章的最后曾提到,这一章要开始学习你在前面没有遇到过的另一类UML元素。这个新类被称为行为元素,它们能够展示UML模型部件如何随时间变化。事物的一个普遍的现象是随着时间的流逝,都要经历变化。任何计算机系统也是如此。当系统与用户(也可能是其他系统)交互的时候,组成系统的对象为了适应交互要经历必要的变化。如果要对系统建立模型,那么模型中必须要反映出这种变化。本章将学习这类元素中的一种:状态图。 7.1 什么是状态图 一种表征系统变化的方法可以说成是对象改变了自己的状态(state)以响应事件和时间的流逝。下面是几个简单的例子: 当你拉下电灯的开关时,电灯改变了它的状态,由关变为开。 当你按下远程遥控器的调频按钮时,电视机的状态由显示一个频道的节目变为显示另一个频道的节目。 经过一个适宜的时间后,洗衣机可以由洗涤变为漂洗状态。 UML状态图能够展示这种变化。它描述了一个对象所处的可能状态以及状态之间的转移,并给出了状态变化序列的起点和终点。 状态图也被引用为状态机(state machine)。 状态图与类图、对象图和用例图有着本质的不同。前面章节介绍过的这3种图能够对一个系统或者至少是一组类、对象或用例建立模型。而状态图只是对单个对象建立模型。 通常状态名的首字母要大写,并且最好给状态一个以“ing”为结尾的名字。(例如“Dialing”、“Faxing”)。当然有时也无法起这样的名字(例如“Idle”)。 7.1.1 符号集 下图显示了圆角矩形代表一个状态,状态间带箭头的实线代表状态的迁移(转移)。箭头指向目标状态。图中的实心圆代表状态转移的起点,公牛眼形圆圈代表终点。 7.1.2 在状态图标中增加细节 UML提供了在状态图标中增加细节的选项。类似于类的图标可以被分成3个区域(名字,属性和操作区域),你可以把状态图标也分成3个区域。最上面的区域保存状态名(不管分不分区都得有状态名),中间 区域保存状态变量,下面区域保存的是活动。下图说明了状态图标中的细节。 状态变量,像计时器或者计数器—样,有时很有用途。活动是由事件和动作组成:3个常用的事件和动作是入口动作(entry),即系统进入该状态时要发生的动作;出口动作(exit),即系统离开该状态时要 发生的动作;动作(do)是系统处于该状态时要发生的动作。还可以增加其他的动作或事件。 传真机例子可以用来说明状态变量和活动。当它发传真时,换句话说就是当它处于Faxing(发传真)状态时,传真机记录下发送传真的日期和时间(用状态变量“Date”和“Time”来表示),并且记录接收者的电话号码和名字(用状态变量“Phone Number”和“Owner”来表示。在这个状态下,传真机参加给传真“增加日期戳(adding a datestamp)”和“时间戳(timestamp)”的活动,以及增加电话号码和接收者姓名到传真机中。这个状态下的其他活动是机器拉进传真页,逐页传真,完成传输任务。 在Idle状态下,传真机要显示出当前的时间和日期。下图显示了传真机的状态图。 7.1.3 增加转移的细节:事件和动作 可以对状态转移线添加一些细节。可以指明引起转移发生的事件(触发器事件)和引起状态变化所需执行的计算(动作)。添加的事件和动作写在转移线上,触发器事件和动作名之间用反斜杠隔开。有时一个事件会引起没有相关动作的状态转移,或者有时一个转移是由于某个状态完成了它的活动所引起(而不是由于事件引起)。这种类型的状态转移被称为无触发器转移。 图形用户界面(GUI)是一个可以说明状态转移细节的例子。在这里,假设GUI可以处于以下3种状态之一: Initializing(初始化)。 Working(工作)。 Shut Down(关闭)。 当打开PC电源的时候,自启动发生。因此Turning the PC on(打开PC)是一个触发器事件,它导致了GUI的状态转移到Initializing状态,而Bootup(自启动)是一个在转移过程中执行的动作。
文档评论(0)