- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 状态图
在一个交互中,可能发送给单个对象一个或多个消息,并且,这些消息以特定的顺序被接收。但是,在另外的交互中,同一个对象可能接收完全不同的消息。根据各个交互的详细情况,特定消息发送到对象的顺序也可能根据情况的不同而改变。通过考虑对象能够参与的所有可能的交互,我们可以看到,在一个对象的整个生存期中,它必须能够合理地响应次序变动范围相当大的消息。
在第8章,我们已经看到,对象图不是用来详细说明系统所有可能的状态的。首先,的确存在着太多的状态,不能用文档穷举;其次,除了要知道可能的状态是什么,我们还需要知道哪些状态是不可能,或者不合法的。出于完全相同的原因,顺序图和协作图也不是用来描述对象能够参与的所有可能交互的视图。
对这两种情况,解决方案是相同的,即使用表示法的更抽象的形式详细说明系统,而不是举例说明。在UML中,对象的行为规格说明是通过为对象定义状态机来给出的。状态机说明了对象对它在生存期期间可能检测到的事件的响应。在UML中,状态机通常是用一种称为状态图的图来文档化的。
交互图和状态机给出的是系统动态行为的两个互补的视图。交互图显示了在较短的一段时间在系统中的对象之间传递的消息,通常是在单个用户产生的事务期间,因此这些图必需描述很多对象,即特定事务中所涉及的那些对象。另一方面,状态图自始至终在一个单个对象的整个生存期中跟踪该对象,指定该对象能够接收的所有可能的消息序列,以及它对这些消息的响应。
10.1 依赖状态的行为
许多对象展现出了依赖状态的行为。不严密地说,这意味着对象在不同时间将对相同的刺激做出不同的响应。例如,考虑一个简单的CD播放机的行为,播放机包括一个装CD的抽屉,如果当前有播放的CD,就放在抽屉里。还包括一个界面,界面包含三个按钮,标明“装入(load)”、“播放(play)”和“停止(stop)”。如果当前抽屉关着,装入按钮使之打开,如果是打开的,则使之关闭。停止按钮使播放机停止正在进行的播放。如果没有正在播放的CD时,按下停止按钮不起作用。最后,播放按钮播放抽屉中的CD,如果按下播放按钮时抽屉是打开的,则先关闭抽屉后再开始播放。
这个CD播放机至少在两个方面表现出了依赖状态的行为。例如,如果抽屉开着,按下“装入”按钮将关闭抽屉,而抽屉关着的时候,按下“装入”按钮将打开抽屉。另外,如果正在播放CD,按下停止按钮就停止播放,但是如果没有播放CD,按这个按钮没有作用。
在这个例子中,我们可以标识CD播放机能够处于的至少三个不同状态。按下“装入”按钮引起的不同结果表明我们需要区别“打开(open)”和“关闭(closed)”状态,而按下“停止”按钮的不同结果表明存在第三个状态,可能标记为“正在播放(playing)”,它不同于上面任一个状态。同样值得注意的是,CD播放机可以响应事件而改变状态。例如,重复地按下“装入”按钮将引起CD播放机在打开和关闭状态之间转换。
这个例子中的三个状态符合CD播放机的实际状态中可观察到的差异确实令人愉快,但是情况并不总是如此。区分状态的基本原则是,处于一个特定状态的对象,对至少一个事件的响应和它处于其他状态时对该事件的响应不同。因而识别的状态可能对应于容易发现的对象的外部特征,也可能并不与之对应。
用于行为建模的状态的概念应该区别于第2章所讨论的状态,在第2章,对象的状态被定义为在给定时间其属性的值的整体。状态的行为概念比这个更广泛:在两个时间一个对象的属性很可能不同,可是却处在相同的行为状态。对此,CD播放机的“关闭”状态可以提供一个例子:抽屉中有或者没有CD可以被认为是CD播放机不同的属性值,但是在任一情况下我们都可以认为播放机处于关闭状态。
行为状态的识别并不是一个严格的过程。状态的不同,是通过处于不同状态的对象对事件的响应不同来区分的,但是什么看作是不同的响应,在某种程度上却是一个需要判断的问题。行为状态的重要特性是,第一,一个对象有若干个可能的状态,并且在任何给定时间恰好处于这些状态中的一个。第二,对象可以改变状态,通常,它在给定时间所处的状态会由它的历史决定。最后,在不同时间,一个对象可能依赖其状态对同一刺激做出不同的响应。
10.2 状态、事件和转换
状态图(statechart diagram,通常简称为statechart),显示一个对象可能的状态,它能够检测到的事件,以及它对这些事件的响应。因此,为了构造一个对象的状态图,我们必须首先至少暂时地确立对象能够处于什么状态以及它能够检测什么事件。比如CD播放机的例子,我们已经标识了打开、关闭和正在播放状态,这将作为开发状态图的基础。
用软件的术语,经常假定,对象检测到的事件就是发送给它的消息。然而,在刚开始设计时不必要这么具体:需要的只是对象能够检测到的外部事件这个更一般的概念。在CD播放机的例子中,能
文档评论(0)