人机交互与界面设计材料.doc_第1页
人机交互与界面设计材料.doc_第2页
人机交互与界面设计材料.doc_第3页
人机交互与界面设计材料.doc_第4页
人机交互与界面设计材料.doc_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

第6章 人机交互界面表示模型图6-1 中国象棋分解图|运行中国象棋退出走棋*打谱当前方走对弈方走拾取棋子放置棋子加速减速暂停恢复Task 中国象棋对弈GOAL:中国象棋 : GOAL:运行 |: *GOAL:走棋 ACTION:自动记录棋谱 : GOAL:当前方走 : OPRATOR:拾取棋子 OPRATOR:放置棋子 GOAL:对弈方走 OPRATOR:拾取棋子 OPRATOR:放置棋子 *GOAL:打谱 : OPRATOR:加速 OPRATOR:减速 OPRATOR:暂停 OPRATOR:恢复 GOAL:退出表 6-5 UAN描述的任务“文件拖入垃圾箱”的多通道实例任务:drag and drop a file in the recycle bin用户行为界面反馈界面状态2D鼠标语音then highlight(icon)show_outline(icon)then highlight(bin)then hide(icon) show_bin_full()if intersect(icon,x,y)icon=selctedif intersect(bin,x,y)if intersect(bin,x2,y2)Mouse_down(x,y)drag_icon(x,y)mouse_up(x,y)PronouceMove_to_recycle_bin6.1.4 任务模型ConcurTaskTrees任务模型表示法(Concurrent Task Tree Notation)12,13,它是一种基于图形符号的,采用层次的树状结构来组织并表示任务模型的方法。下面首先介绍ConcurTaskTrees中任务种类和暂态关系的含义及其图形符号。1.任务分析任务分析是一个以人们的行为为出发点的分析过程,它分析人们完成任务的方法:他们要做的事、要起作用的事和想要知道的事1。任务分析的一个重要方法是任务分解,即需要考察将一项任务分成为若干子任务的途径以及这些子任务执行次序的方法。任务分解使得任务的执行过程层次化,即一个任务的执行被委托给它下一层的子任务来完成,这些子任务之间的关系及其执行的顺序成为了解一个任务执行过程的重点。考虑一个用户交互过程,对其进行任务分析的目的和重点在于得到交互任务及其子任务的一个层次体系,以及一些描述子任务执行的顺序和条件的解决方案1。这个方案必须能够恰当地捕获用户的交互意图,能够如实地反映交互过程,并把它准确地表达出来,同时它不能曲解交互过程下蕴涵的业务要求。这样一个层次体系以及方案就是一个任务模型。表达越准确,则由任务模型生成的用户界面越能够越贴近实际的交互需求,符合一般的交互习惯,同时不会改变业务规则。2.任务的种类在ConcurTaskTrees任务表示法中,依据任务的抽象层次和任务执行过程中参与角色的不同,对任务的类型进行了归类,总共提供了5种记号,分别代表不同种类的任务:(1) 抽象任务(Abstract Task),代表一个复杂抽象的任务,通常用来表示由其它种类的任务任意组合而成的任务。(2) 用户任务(User Task),代表一个只能有用户参与的任务,通常用来表示和用户感知或者认知行为相关的任务。例如,用户阅读系统的反馈的信息提示,然后决定下一步的操作。(3) 交互任务(Interaction Task),代表执行过程中需要用户与系统进行交互的任务。例如用户在线注册填写面板。(4) 系统任务(Application Task),代表由系统来执行而不需要用户参与交互的任务。例如,系统处理用户提交的注册信息,然后将处理结果显示给用户。3. 暂态关系符号ConcurTaskTrees任务模型表示法定义了丰富的暂态关系用以表示任务之间在执行过程的相互联系和制约作用。这些关系都有相应的图形符号:(1) Choice:t1 t2 tn从任务t1,t2 ,tn之中选择一个且只能选择一个执行,且在一次执行过程中,一旦选定了一个任务则其它任务将不能被执行。(2) Concurrent(Independent Concurrency):t1 | t2 | | tn任务t1,t2 ,tn可以并发的执行,任务之间的执行开始和结束没有任何的限制。(3) 带信息交换的Concurrent:t1 | t2 | | tn任务t1,t2 ,tn可以并发的执行,而且允许任务之间进行信息交换。(4)Disabling:t1 t2一旦任务t2 开始执行,则中断并终止任务t1的执行。(5)Enabling:t1 t2 tn任务t1,t2 ,tn必须按顺序执行,且任务ti+1不能开始执行直到ti已经执行完成,对于i1,2,,n-1。(6)带信息交换的Enabling:t1 t2 tn任务t1,t2 ,tn必须像Enabling关系那样按顺序执行,而且允许任务之间进行信息交换(7)Independence:t1 |=| t2任务t1和t2 可以按任意的顺序执行,但当一个开始执行后,另一个任务则不能开始执行,除非已经开始的任务执行完成。4 单用户任务模型单用户任务模型在ConcurTaskTrees中表示为一棵树。如图1.1所示的任务模型,表示了用户使用自动取款机(ATM)的过程。该模型出自CTTE的一个示例。在模型中,树中的每个节点代表一个任务,任务可以被分解为更为具体的子任务,并用该节点的子节点来表示。根节点代表的任务抽象层次最高,叶子节点代表的任务最为具体。拥有相同父节点的兄弟节点之间的关系由暂态关系符号来表示。暂态关系符号决定了兄弟任务在某个时刻的相互之间的制约关系,并且决定了这组任务所能有的执行顺序,如前面所述。任务还具有不同的种类,以示区别不同任务执行过程中参与的角色的不同,以及对交互要求的高低,如前面所述。例如,在该模型中,抽象任务EnableAccess被分解为三个具体的子任务InsertCard,RequirePassword,InsertPassword,这三个任务在Enabling关系的限定下必须顺序执行。交互任务InsertCard和InsertPassword需要用户和系统进行交互,而系统任务RequirePassword则不需要用户的参与。基于任务表示目前已有相应的基于模型驱动的用户界面生成工具用于自动界面的生成,如:CTTE/TERESA和Dygimes。他们采用任务模型作为输入,支持由任务模型生成用户界面。1) CTTE/TERESA环境CTTE(ConcurTaskTrees Environment)10,14,25是一个集成了设计、编辑、测试、分析和调试ConcurTaskTrees任务模型等功能于一体的环境,如图1.2所示。它由CNUCE的HCI小组开发实现,最初被用于测试ConcurTaskTrees任务模型表示法,后来被广泛用于ConcurTaskTrees的设计和分析中。TERESA(Transformation Environment for interactive Systems representAtions)20, 26是一个由CTTE衍生出的工具。它支持基于ConcurTaskTrees任务模型生成适应跨平台要求的用户界面。利用TERESA由任务模型生成用户界面,需要经历以下几个步骤:首先利用CTTE设计构建ConcurTaskTrees任务模型。然后基于此模型生成针对特定平台的系统任务模型(System Task Model),以适应特定平台的要求。然后基于系统任务模型生成活动任务集(Enabled Task Sets,ETS),再由ETS得到表现任务集(Presentation Task Sets,PTS),这是可以同时映射到用户界面上的一组任务。然后再由表现任务集生成抽象用户界面(Abstract User Interface,AUI)和具体用户界面(Concrete User Interface,CUI)。2) Dygimes原型系统Dygimes系统(Dynamically Generating Interfaces for Mobile and Embedded Systems)21,27,如图1.3所示,是另一个基于模型驱动的用户界面生成系统,主要面向于嵌入式系统和移动计算设备的用户界面。6.2 结构模型上一节介绍了用任务分析或用户行为的方法描述人机对话的过程,本节主要介绍用结构化的方法来描述人机交互的一般过程,重点讨论状态转换网络及其扩展方式,它是一种图示化的结构,在本节的最后,简单地介绍了形式化语言的描述产生式规则,这种结构的方法从理论上可以引导界面设计者及界面工具的设计者进行有效的设计。6.2.1 产生式规则产生式规则是一种形式化语言,这些规则可用于描述人机交互界面。产生式规则的一般形式是:if condition then action这些规则可以表示为不同的形式,如condition actioncondition:action所有的规则都是有效的,并且系统不断用它来检测用户的输入是否与这些条件相匹配。若匹配则激活相应的动作,这些动作可以是执行应用程序的一个过程,也可以是直接改变某些系统状态的值。一般来说,组成界面描述的产生式规则很多,规则定义的顺序并不重要,只要与规则中的条件相匹配,就可以激活相应的动作。产生式规则系统可以是事件引导的,也可以是状态引导的,或者两者都有。1 事件引导的系统考虑下面的产生式集合,实现用户在屏幕上绘直线。Sel-linestart-line C-point start-linerest-line C-point rest- linerest-line D-point rest- line此例中产生式规则的条件和动作部分,都以事件的方式进行表示,形式上都比较简单,当然支持复杂的交互任务的产生式规则可能要复杂的多。事件主要有三种类型:l 用户事件(user event),Sel-line表示从菜单中选择line命令,C-point 和D-point表示用户在绘图平面上单击和双击鼠标。l 内部事件,用于保持对话状态,如start-line 表示开始画线后的状态,rest- line表示选择了第一个点之后的状态。l 系统响应事件,以尖括号表示可见或可听的系统响应,如,把菜单项line 高亮度显示,表示在屏幕上显示直线, 表示橡皮筋绘制方式打开,表示橡皮筋绘制方式关闭。在上面的产生式规则中,第一条规则表示选择画线命令后,系统状态进入了开始画线状态,接着把line菜单项高亮度显示;第二条规则表示,用户在开始画线状态时,在绘图区域单击鼠标则系统表示已定义了一个点,此时橡皮筋绘图方式打开;第三条规则表示在定义了一个(或多个)点后,用户单击鼠标可以连续地定义点;第四条规则表示双击鼠标则结束画线的交互过程。对话控制由一块系统内存专门存放一系列的事件,如果来自用户的事件与系统内存中内部事件合并后与某条产生式规则匹配,则激活该条规则。所有与用户相关的事件都由对话控制根据输入设备的动作来产生相应的用户事件,如用户单击了一下鼠标,则用户事件(如鼠标单击)被加入内存,系统响应如被调出并根据显示控制器做出相应的动作。若某个规则被激活,则与该条件相吻合的所有事件都被从系统内存中删除,并加入相应的动作事件,例如,若用户选择了Line,则用户事件Sel-line加入到系统内存,这就是说第一条规则被激活,Sel-line事件被从系统内存中删除,并代之以start-line和,最后,显示控制器删除并完成一个显示动作。这时只有start-line事件留在系统内存中,只有用户做其它动作才能激活其它规则。对话控制主要负责事件的产生和规则的匹配,可以看到在每一时刻系统内存中会保存一些内部事件,当产生一个事件时,可能是用户事件(如单击鼠标),也可能是内部事件(如时钟事件等),对话控制就要将所有的产生式规则与事件集合进行匹配,这个过程是复杂的而且是耗时的,当产生式很多并且产生式规则的条件复杂时,匹配算法的效率就显的更为重要,因此需要设计好的数据结构和匹配算法来提高匹配规则的效率,例如可以将规则和事件进行分组和分层。2 状态引导的系统状态引导的系统与事件引导的系统有很大的不同,在系统内存保存的不再是动态的随时进出的事件,而是一些表示系统的当前状态的属性,这些属性在不同的时刻有不同的值,在上面的例子中,为了实现画线的操作,系统有下面五个属性。Mouse:mouse-null, select-line, click-point, double-clickLine-state:menu, start-line, rest-lineRubber-band:rubber-band-off, rubber-band-offMenu:highlight-null, highlight-line, highlight-circleDraw:draw-nothing, draw-line第一个特征Mouse有4个不同的状态mouse-null(鼠标空闲),select-line(选择线命令),click-point(单击鼠标),double-click(双击鼠标),当用户对鼠标进行操作时Mouse自动设置成相应的状态;第二个特征Line-state用于保持当前会话的状态,分别是menu(可选命令状态),start-line(开始绘制线),rest-line(已经定义点);后三个属性用于控制系统响应,其中Rubber-band表示橡皮筋绘制的开和关状态,Menu表示任何项也没有选中(highlight-null)、选中绘直线命令(highlight-line)或选中绘圆命令(highlight-circle),Draw表示什么也不画状态(draw-nothing)或画直线状态(draw-line),显示控制器根据上面的状态做出相应的显示控制。状态引导的系统的产生式规则有点类似前面介绍的事件引导的产生式规则,但也有不同,如下所示:Select-linemouse-null start-line highlight-lineClick-point start-linemouse-null rest-line rubber-band-onClick-point rest- linemouse-null draw-lineDouble-click rest-linemouse-null menu draw-line rubber-band-off当产生式规则的条件和状态匹配时将激活该产生式规则,对于某一特定的属性,如果前面的状态需要改变成新的状态时才需要在产生规则的后面标注,例如,在第二条规则中,规则指定 Line-state 属性应设置成rest-line ,因为原来的start-line值将丢失,而在第三条规则中,没有提及rest-line值,因为它已默认,Line-state 属性的值继续保留为 rest-line。属性的永久特性有时会引起一些奇怪的错误,因此在上述的规则集中,每一条产生式规则都要求将鼠标的状态设置为 mouse-null , 否则,当用户单击了鼠标,激活了第二条规则,如果不立即将鼠标的属性设置为mouse-null,则会立即激活第三条规则,此时系统的状态和第三条规则的条件是匹配的,并且会反复的一直执行下去。3 混合引导系统从产生式规则处理的简单性来考虑,要么使用单一的事件引导的系统,要么使用单一的状态引导的系统,从上面的实例中可以看到,有的对话过程比较适合于事件引导方式,有的对话过程适合于状态引导方式,当然也可以将两者结合起来,例如采用下面的形式:event: condition action 来描述一个产生式规则,事件用来计划产生式规则,如果条件不满足,即当前系统内存中的状态和产生式的规则不匹配,则无法激活规则,另外当状态改变时,产生式规则中的action本身也可以产生新的事件,从而可以激活另一条规则。 使用产生式系统可以较容易地表示并发的对话元素,即在某个时刻同时有几个事件发生,激活不同的产生式规则。下面的例子使用混合的事件/状态产生式系统描述如图6-2所示的粗体/斜体/下划线对话框。图6-2 粗体/斜体/下划线对话框 文本样式 系统有三个属性:Bold:off, on Italic:off, onUnderline:off, on根据用户点击鼠标的位置不同,可能产生三个事件:select-bold, select-italic, select-under,该对话过程有下面六个产生式规则定义。select- bold:select-under:Bold = onselect- bold:Bold = onBold = offselect-italic:Italic = offItalic = onselect-italic:Italic = onItalic = offselect-under:Underline = offUnderline = onselect-under:Underline = onUnderline = off这些规则描述得非常仔细,与状态转换网络不同,规则的数目线性的增加。如果有n个转换开关,则会产生n个规则。可以通过增加下列规则:escape-key: reset-action 来简单的处理Esc键,这里reset-action 的作用是设置所有的状态为初始状态,因为给规则的激活条件是空,所以在对话的任何时候,用户按Esc,对话都回到初始状态,当然这样只是一种简单的处理方式,实际的交互系统对Esc键的处理要复杂的多。产生式规则比较适合于描述并发的操作,而对于顺序的对话就不太适合,如在上面的绘制连续折线的实例中,为了追踪顺序的操作,用一个状态变量来表示操作的步骤,这种顺序对话的描述既难于分析也显得比较笨拙。6.2.2状态转换网络状态转换网络(STN)的基本思想是定义一个具有一定数量的状态的转换机,称之为有限状态机(FSM),FSM从外部世界中接收到事件,并能使FSM从一个状态转换到另一个状态。这里介绍两种最基本的状态转换网络,状态转换网络(State Diagrams)和扩展状态转换网络(State Charts),后者是前者的一个扩展,因此详细的介绍后者。6.2.2.1传统状态转换网络状态转换网络的主要组成部分是状态和代表状态改变和转换的箭头,状态转换网络实际上是一个有向图,图的节点代表状态,图中的有向边代表一个状态到另一个状态的转换,交互任务在状态转换网络中表现为从任务的起始状态,经过一系列中间状态的转换,达到任务结束的状态这样一个完整转换路径上的状态转换序列。状态可以用不同类型的图形符号表示,包括圆、矩形、圆角矩形等,不同的符号代表不同的状态,如用圆角矩形来表现系统的状态,如图6-3所示系统状态转换网络符号。状态图 6-3 状态转换网络符号状态可以定义为在给定时间、方法和行为的情况下,与用户环境相关的一组环境变量或属性集。状态转换网络则用于图形化地显示状态以及任何时刻在状态之间发生的交互。如图6-4所示的简单状态转换网络,包括一个源状态、一个目标状态,以及这两个状态间的转换。 源状态目标状态转换图 6-4 简单状态转换网络当发生一个外部或内部事件时,系统就会从一个状态转换到另外一个状态,这称为状态转换。外部事件主要由用户操作外部输入设备来产生,内部事件可以是系统产生的事件,如时钟事件,也可以是为了改变系统的状态和行为而产生的事件,如当一个任务完成后可以激活另一个任务等,一个状态转换与一对状态相关联。一般的系统具有很多个状态,两个状态之间可以存在一个状态转换,假设系统由n个状态组成,状态之间的转换最多可能有n*(n-1) 个,如图6-4所示的状态转换网络中有3个状态,因此最多可能有6个状态转换,事实上一般系统状态中状态转换数要远远小于最多状态转换数,如图6-4中只标出了4个状态转换。 状态1状态2状态3图 6-5 简单的三状态FSM在状态转换网络中,如果两个状态A到状态B不存在状态转换,则说明由状态 A在任何情况下都不能转换到B,如图6-5中状态3可以转换到状态1,但不可能转换到状态2,而状态1可以转换到状态2,但不能直接到状态3。在实际的系统中,由于交互任务比较多,而且每个交互任务相对可能比较复杂,组成系统的状态很多,可能有几百个,甚至能达到上千、上万个状态,状态转换的数目就更多了。基本状态转换网络中的状态转换仅描述了发生一个事件而使系统从一种状态转换成另一种状态,但是并没有说明这种转换需要的条件,即当在某一状态时,什么条件可以允许产生这样的转换,另外当系统在改变状态时将执行什么动作,如进行相应的业务处理、驱动外部设备等,也没有说明。为了能更完整的描述这两种情况,可以在描述状态转换时增加两个额外的选项:选项条件(conditions),表示导致状态的改变的条件;选项动作(actions),表示系统在改变状态时将执行什么动作。带条件和动作的状态转换网络如图6-6所示。源状态目标状态条件动作图 6-6 带条件和动作的状态转换网络现在来分析一下带条件的状态转换网络,当系统在某一种状态时S时,如果满足条件C1,系统将发生状态转换T1,而转换到状态E1,当满足条件C2,系统发生状态转换T2,而转换到状态 E2,如图6-7a所示的条件转换网络,现在将条件C1、C2和状态融合则得到如图6-7b所示的基本的状态转换网络。从这里可以看到,带条件的状态转换网络是将状态中表示触发条件的部分抽取出来,这样可以大大减少状态的数量,而条件触发实现时还是比较方便的,但在实现时还要增加对触发条件的管理。图6-7a 带条件的状态转换网络 T2C2 T1C1SE1E2 图6-7b 带条件的状态转换网络S+C1S+C2E1E2 下面给出一个关于传统状态转换网络的实例,图6-8中是一个基于鼠标画图工具,图中涉及到了状态、转换、条件、动作等元素。它有一个菜单(有三个选项“arc”和“line” 和“curve”)和一个绘图平面。若选择“arc”则要求你确定三个点:第一个点是圆心,第二个点表示圆弧的起点,第三个是圆弧的重点。第一个点确定后,系统就在圆心和当前鼠标位置之间画一条“橡皮圈”线,第二个点确定后就根据圆心位置和圆弧起点和鼠标画出一个橡筋圆弧,确定第三个点后绘制出了一个圆弧。 “line”选项是画直线(polyline),也就是说,用户可以选择任意点,然后系统将其连接成直线。双击鼠标确定最后一个点,在连续的鼠标点之间由“橡皮圈”相连。“curve”选项是绘制多点曲线,用户可以选择多点,用这些点做控制点绘制多点的曲线。绘制结束后都汇聚到系统的结束状态,系统应用过程中一般会有两种情况,一种是当命令结束时,进入开始状态,图中所示的情况,另一种情况是当命令结束是,会重复原来的命令,这种情况就会从各自的结束状态直接进入选择命令的状态,图中所示的虚线表示的情况。每个圆角矩形表示一种状态,如“Menu”表示系统正在等待用户选择“Circle”或“Line”的一种状态,“Circle 2”表示用户进入选择圆心后正在等待确定圆周上一个点的状态。状态之间是一些有向的线段,表示触发转换的事件和条件以及转换发生时的动作。例如,状态“Menu”是等待用户选择一个菜单项,即产生事件select arc或者select curve,若选择了画圆弧,还需要满足一个条件C1,图中已经注明C1表示Not drawing line,指的是只有在没有划线或者划线过程已经完成的情况下,才可以完成从状态“Menu”到状态“Acr1”的一次转换,同时执行动作highlight arc,将Arc菜单项显示为高亮。状态“Arc1”是系统等待用户选择另一个点的位置,单击鼠标后系统转至“Arc 2”状态,并画出橡皮圈(在圆心和第二个点之间)。从此状态开始用户单击其它点,可以画出一个圆弧,然后移至“Finish”状态。因此,一个STN可以表示用户的一系列动作及系统的响应。实际交互设计种,应用的状态转换图还会有更复杂的情况,如对每一的状态都有一些公共的出口,如果在任何状态下,按ESC键表示交互任务的结束,返回到选择菜单状态,如在任何状态种,可以进入状态栏等修改绘制图形的一些属性,而这些属性往往比较多,如果全部放在状态图里,会使状态转换图变的很复杂,实际实现时,我们每个状态实现为一个对象,把这些图形属性可以作为对象的属性处理,提供统一的接口用于处理类似“ ESC”这样的状态事件。公共状态1公共状态1公共状态1状态1状态1状态1状态1状态1状态转换网络比相应的文本解决方案更易于设计、理解、修改和文档化,它给出了对行为的精确的、甚至是格式化的定义。但是,传统的状态转换网络在过去几年里一直没有大的变化,在今天的交互系统应用中仍然存在着一定的局限性。其中一个最大的缺陷是需要定义出系统的所有状态,这对于小型的系统是没有问题的,但是在一个较大的系统中,系统会很快崩溃,状态的数目是呈指数级增长的,同时状态的增长直接导致了状态转换网络过于复杂、无法实际应用。另外,大的状态转换网络的设计和修改依靠手工来完成也是不现实的,最好有特定的工具来自动完成,另外由于状态转换网络本身是一种结构模型,用户的交互行为在状态转换网络中是一条转换路径,不能直观地反映人的总体交互行为,所以用于对用户交互过程的设计不如行为模型直观方便。为了解决状态爆炸的问题,可以采用面向对象方法来为每个类定义单独的状态转换网络。每个类都有一个简单的、易于理解的状态转换网络,这种方法很好地消除了状态级数爆炸的问题。6.2.2.2扩展状态转换网络1 层次状态转换网络“Start”和“Finish”状态并不是一个实际状态,它只是为了将一些小的对话连接成更大的对话。例如“drawing tool”有一个主菜单,它有三个子菜单:Graphics子菜单(如画图和直线)、Text子菜单(如增加标签)和Paint子菜单(如徒手画图)。可用层次STN来描述如图6-9所示,类似前面的STN,但是附加了复合状态,如图中矩形框所示。每个矩形框表示相关子菜单的所有STN。假设图6-8中的STN表示的是Graphics子菜单。弹出 graphics子菜单选择 graphics主菜单graphics 子菜单弹出text 子菜单选择 texttext 子菜单弹出 paint 子菜单选择 paintpaint 子菜单图6-9 分层的状态图实例从主菜单开始去分析该框图。假设用户选择了“graphics”,则系统弹出“graphics”子菜单,并进入其状态。然而这不是真正的单一状态,如图6-8所描述的那样,而是进入了子对话的 “Start”状态,即“Menu”状态,然后可以选择画图还是画直线。点击“Finish”从子对话中退出,进入外层的状态网络。 层次元素的使用不改变对话基本描述法的功能,但它却能简单地说明一个大的复杂的系统,从最高级的主菜单到击键或击鼠标这样的小动作。2 State chartsHarel状态转换网络是状态转换网络的一个扩展,与传统状态转换网络相比,增加了很多的特性。下面结合图6-10中“电视控制面板”的实例来对这些特性进行详细地介绍:图6-10是一个电视控制面板的状态转换网络,该控制器有个按钮标记为ON、OFF、MUTE、SEL 和RESET。电视机可以处于开机或待机状态(Standby)。图6-10 Harel状态转换网络实例“电视控制面板”Standby OnOff1342MUTESELSELSELSoundChannelHONTV_onANDRESETOFFSEL假设从待机状态开始,按ON或RESET打开电视,按OFF则关机并返回到待机状态;若电视处于开机状态,则用户可以用MUTE按钮去控制声音,用SEL按钮去控制频道(四个频道循环切换)。声音和频道子对话看起来有点像一个状态转换网络,但是中间的细线及AND表明这两个子对话可以同时进行,也就是说,可以以任意次序按MUTE或SEL。对整个状态转换网络而言,Sound和Channel是两个子层次,分别用一个小的状态转换网络来表示,完成独立的功能。Sound和Channel共用On和Off两个通用的状态转换,从而减少了状态转换网络中状态转换的数目。在Harel状态转换网络中加入了AND关系,即在同一个高层状态下的子状态可以同时处于激活状态,这些子状态可以是同步的。在本例中,中间的细线及AND按钮表明子状态Sound和Channel可以并发执行。3 取消和帮助 “取消”和“帮助”可以帮助解决工作过程中出现的一些问题,如用户错误地选择了某个选项后而想返回到主菜单。例如在使用“drawing tool”工具过程中,如果错误地选择了“circle”,则必须选择两个点,才能继续往下走,而不能取消当前的错误选择,这种情况是不太方便的。解决的办法是增加一个ESC键,使得用户在任何时候,任何地方,按一下该键就可以返回到主菜单状态。这看起来相当简单,只需增加一条语句,然而要将其增加到STN,却要对每种状态都增加一条弧线,使其能返回到主菜单状态。进一步说,这会使层次结构系统的对话产生混乱。带有取消功能的“drawing tools”如图6-11所示。图6-11 带有取消功能的状态图Normal FinishESCNormal FinishNormal FinishESCESC弹出 graphics子菜单选择 graphics主菜单graphics 子菜单弹出text 子菜单选择 texttext 子菜单弹出 paint 子菜单选择 paintpaint 子菜单每个子菜单状态均有两个出口,一是“normal Finish”,表示该条路径经过子对话后正常结束;二是“ESC”表示用户点击ESC键。“ESC”始终处于激活状态,无论用户是画线还是画圆,只要按下ESC键,系统就会立刻返回到主菜单状态。“帮助”系统在某些方面类似于“取消”,在任何状态下都可以被调用。然而与“取消”不同,当用户结束“帮助”查询后希望回到原来的工作点,如图6-12所示。图6-12 带有帮助功能的状态图按下HELP按钮按下HELP按钮从菜单出发draw circle单击在圆周上rubber band单击在中心点Circle1Finish Circle2帮助子系统帮助子系统6.3 行为模型和结构模型的转换一般来说行为模型主要对设计起指导作用,在此基础上,设计人员再进行结构模型(如状态转换网络等)的创建,这个过程很大程度上取决于设计人员的经验和对行为模型的理解,本节主要介绍一种从行为模型到结构模型的一种转换思想和算法,以实现两种模型间的自动的转化工作。6.3.1 整体框架对两种模型进行转换,首先在图6-17中给出一个基本的模型转换的整体框架,在这个框架中,体现出了进行转换的基本思想和意义。整个框架分为三个部分。1、 行为模型部分主要使用了前面介绍的G-U-L模型,在这一层将产生一个基本的预测性的行为模型。2、 结构模型部分主要是采用层次状态转换网络,它涉及到的元素有状态、转换、事件、层次结构。本节中所用的状态转换网络在转换中未考虑条件和同步,目的是为了简化转换工作。3、 用户部分包含两种用户,领域专家(Domain Expert)和设计者(Designer)。G-U-L模型的创建主要是由领域专家和设计者合作来完成的,然后通过模型转换算法转换成为结构模型,最后提供给设计者使用。其中的专家和设计者并没有明显的界限,设计者也可以是一个专家。6.4.2 转换算法1. 基本思想前面介绍过G-U-L以层次化结构对任务进行建模,包括目标(包括循环属性)、行为、关系。而状态转换网络表示的是状态之间的转换,也采用层次化表示,涉及到的主要是状态、转换、事件、行为。在G-U-L中体现的层次关系转换到状态转换网络中也体现出层次的关系,G-U-L中的每个目标都对应一个状态转换网络。如果一个目标下层有子目标,对子目标来说,它所对应的状态网络应该嵌套在上层目标对应的状态网络中。在产生的状态转换网络中,有两类事件起作用,一类是外部由用户激活的事件,如“按下鼠标” 事件、“点击键盘” 事件等;另一类是内部由目标产生的内部事件,这里只定义了“目标正常结束”,表示目标正常结束时产生的事件。“目标操作失败”,表示目标执行失败时产生的事件,在右图6-18 中描述了一个目标层次中产生事件的过程。在进行从G-U-L到状态的转换时,这些事件只是形式上的一个定义,没有具体的实现过程,如要在某一层出现的第i个外部事件用“外部事件i”来代替,而由某个目标Ti执行时产生的内部事件也仅仅用类似于“Ti正常结束事件”来表示,而具体的事件还需要由状态网络进行,系统实现时通过专门的事件管理器来定义和管理。对G-U-L中的行为在转换后就成为对应的状态转换网络中的一个行为。2. 基本步骤对转换后的数据,存储的是状态转换网络中表示转换的弧,如下图6-19所示:出发状态目的状态触发事件父状态行为图6-19 状态转换网络中弧的表示结构其中的触发事件就是触发从出发状态到目的状态转换的事件;父状态表示的是当前弧所在状态网络的上层状态,可以是一个抽象出来的状态名;下面简单介绍一下进行转换的基本步骤:(1)读取存储G-U-L模型的数据文件,进行解析,定义一个数组stn用于存储状态网络中的弧。获取G-U-L模型中的最高目标,设为G0,然后调用(2)中的Translate函数,在Translate执行完毕后,stn中便存储了转换后的状态网络的数据。main()定义一个存储弧的数组stn读取G-U-L文件GOAL G0”: 允许关系处理 case “|”: 交替关系处理 case “”: 禁止关系处理 /对所有的子目标进行递归调用 for(int I;I(允许Enabling):设目标G下的子目标关系为(G0,G1),在这种关系中完成目标G的路径只有一条,当G0成功结束后才允许G1执行,这是一个顺序执行的过程。在转换成状态转换网络后如图6-22所示。从状态S0在外部事件激发转换至S1,在S1状态等待“G0正常结束事件”发生后转换至S2;然后在S2处等待“G1正常结束事件”转换至S0,这样表示目标G执行完毕,同时发生动作“产生G正常结束事件”,处理转换过程中存储所有的弧。这种约束关系允许同一层次下有多个目标存在,如(G0,G1,Gn),这些目标都是顺序执行。图6-23 “交替”关系状态网络G0正常结束事件S2G1正常结束事件G0正常结束事件 外部事件0S0S3S4S1产生G正常结束事件产生G正常结束事件G01常结束事件 外部事件1l |(交替Interleaving):设目标G下的子目标关系为|(G0,G1),表示两个目标之间一种任意的组合来执行完成。在转换到状态网络后,如图6-23所示,有S0-S1-S4-S0和S0-S2-S3-S0两条途径可以完成目标G的一次执行。从S0状态,如果产生“外部事件0”,依次等待“G0正常结束事件”、“G1正常结束事件”并最终回到S0状态,同理,若产生“外部事件1”,则会沿着另一条路径回到S0。记录下所有状态转换的弧。在有交替关系的层次中最多只允许有两个状态存在。 l (禁止Deactivation):设目标G下的子目标关系为(G0,G1),一旦G1任务被执行,G0便无效(不活动)。这个关系在转换到状态网络以后与前面不同的是,在状态S2被“G1正常结束事件”激活以后,不会再回到S0,而是转到了一个新的状态F。在有禁止关系的层次中最多只允许有两个目标状态存在。一个典型的例子是G0=”运行”,G1=”退出”。在执行退出以后整个程序结束,也就无法再回到运行状态了。S0G0正常结束事件产生G正常结束事件外部事件1 外部事件0G1正常结束事件产生G正常结束事件FS2S1图6-24 “禁止”关系状态网络4.实例应用根

温馨提示

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

评论

0/150

提交评论