qml radiobutton 状态改变事件_行为建模之状态表达

在行为建模中,必须考虑两种不同的状态描述:(1)系统执行其功能时每个类的状态;(2)系统执行其功能时从外部观察到的系统状态。

类状态具有被动和主动两种特征。被动状态只是某个对象所有属性的当前状态。例如,类Player的被动状态将包含Player当前的position和 orientation属性,以及和游戏相关的Player的其他特性(例如,用来显示magic wishes remaining的属性)。对象的主动状态指的是对象进行持续变换或处理时的当前状态。类Player可能具有如下的主动状态:移动、休息、受伤、疗伤、被捕、失踪等。事件(有时称为触发器)才能迫使对象做出从一个主动状态到另一个主动状态的转移。

下面将讨论两种不同的行为表现形式。第一种显示一个类如何改变基于外部事件的状态,第二种以时间函数的形式显示软件的行为。

分析类的状态图。UML状态图就是一种行为模型,该图为每个类呈现了主动状态和导致这些主动状态发生变化的事件(触发器)。下图举例说明了SafeHome安全功能中ControlPanel类的状态图。

aad2ffc8a13264e118b38a9fd52e0c7f.png

ControlPanel类的状态图

图中显示的每个箭头表示某个对象从一个主动状态转移到另一个主动状态。每个箭头上的标注都体现了触发状态转移的事件。尽管主动状态模型在提供对象的“生命历史”信息方面非常有用,但也能提供另外一些信息以便更深入地理解对象的行为。除了说明导致转移发生的事件外,分析师还可以说明守卫和动作。守卫是为了保证转移发生而必须满足的一个布尔条件。例如,图中从“读取”状态转移到“比较”状态的守卫可以由检查用例来确定:

if (password input = 4 digits) then compare to stored password

一般而言,转移的守卫通常依赖于某个对象的一个或多个属性值。换句话说,守卫依赖于对象的被动状态。动作是与状态转移同时发生的,或者作为状态转移的结果,通常包含对象的一个或多个操作(职责)。例如,和输入密码事件相关联的动作是由validatePassword()操作的,该操作访问password对象并通过执行按位比较来验证输入的密码。

顺序图。第二种表现行为的方式在UML中称作顺序图,它表明事件如何引发从一个对象到另一个对象的转移。一旦通过检查用例确认了事件,建模人员就创建了一个顺序图,即用时间函数表现如何引发事件从一个对象流到另一个对象。事实上,顺序图是用例的速记版本。它表现了导致行为从一个类流到另一个类的关键类和事件。

下图给出了SafeHome安全功能的部分顺序图。每个箭头代表了一个事件(源自一个用例)并说明了事件如何引导SafeHome对象之间的行为。时间纵向(向下)度量,窄的纵向矩形表示处理某个活动所用的时间。沿着纵向的时间线可以展示出对象的状态。

8a21b2ba0965bd84efd301686cb0ffd5.png

SafeHome安全功能的顺序图(部分)

第一个事件系统就绪来自于外部环境并且把行为引导到对象Homeowner。房主输入一个密码,查找请求事件发送到System,它在一个简单的数据库中查找密码并向ControlPanel(现在处在比较状态)返回(找到或没有找到)结果。有效的密码将促使系统产生密码正确事件,该事件通过激活请求事件激活传感器。最终,通过控制把成功激活事件返回到房主。

一旦完成了完整的顺序图,就把所有导致系统对象之间转移的事件整理为输入事件集合和输出事件集合(来自一个对象)。对于将要构建的系统而言,这些信息对于创建系统的有效设计非常有用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值