《软件结构与实现.ppt》由会员分享,可在线阅读,更多相关《软件结构与实现.ppt(89页珍藏版)》请在三一办公上搜索。
1、人机交互技术编写组,1,第7章 软件结构与实现,人机交互技术编写组,2,内容提要,窗口系统对交互系统实现的支持窗口系统提供设备独立性和资源的共享,在窗口系统,程序员不用担心输入和输出设备的初始化,应用程序从窗口系统管理器接收事件请求流,完成相应的交互操作。用户界面管理系统UIMSUIMS是抽象层次更高的支持交互系统实现的开发环境,为交互系统实现提供更高层支持。支持复杂人机交互系统的实现的软件体系结构包括E-O模型Seeheim模型MVC模型智能体模型,人机交互技术编写组,3,7.1窗口系统,窗口系统强调为程序员提供硬件设备独立性,交互系统的实现建立在一个抽象的设备上,对抽象设备的操作通过设备驱
2、动程序转换成具体的设备上的操作,这可以使交互系统的开发变得简单,也使交互系统的移植非常方便。,人机交互技术编写组,4,7.1窗口系统,窗口系统为单一输入输出设备建立多个抽象设备来实现其资源的共享。每个抽象设备都可看作一个窗口的独立的输入输出设备,窗口系统为这些设备提供并发控制。从应用的角度看,每个应用程序独立地对设备进行操作,另一方面,窗口系统还为每个窗口提供一个抽象显示设备,这可以通过为每个活动的抽象显示设备建立一个窗口来实现。设备独立性和多任务管理是窗口系统的最重要的两个特性。,人机交互技术编写组,5,窗口系统结构,窗口系统一般有三种结构:在各个应用程序内部实现和管理多任务,由于每个应用程
3、序都需要处理复杂的多任务管理,并且移植起来不方便。在操作系统核心集中处理多任务管理,应用程序不再对多任务进行管理,由于过分的依赖操作系统,应用程序需要处理因操作系统的不同而引起的差异。多任务的管理可由独立的管理程序进行管理,应用程序通过调用该管理程序提供的接口来实现对多任务的管理和设备的独立性操作,该管理程序可以在不同的操作系统下运行,因而基于此管理程序开发的交互系统是最容易移植的。,人机交互技术编写组,6,一种客户/服务器结构,图7-1 客户/服务器结构,人机交互技术编写组,7,服务器端运行的三部分程序,资源管理器是整个窗口系统的核心,负责多任务的管理,并通过设备驱动程序来管理外部设备。设备
4、驱动程序负责外部设备的驱动,接受输入设备的输入,并将输入数据转换成统一的格式,通过设备驱动程序实现设备的独立性。抽象终端负责和客户应用程序的接口,对每个应用程序由窗口管理程序为其分配一个抽象终端。,人机交互技术编写组,8,工作方式,当外部设备产生一个输入请求,如鼠标单击某一个窗口内的一点,资源管理程序从设备驱动程序获得鼠标数据,产生鼠标驱动事件,并将该事件分发给与该窗口相对应的抽象终端,与抽象终端相对应的应用程序接受事件并进行相应的处理。实现时,客户程序和服务器程序可以在一台机器上,也可以分布在不同的机器上。,人机交互技术编写组,9,设计交互应用程序,在客户/服务器结构中,交互系统的应用程序通
5、过调用服务器端一个独立的管理程序来管理多任务和提供设备的独立性,相当于客户-服务器中结构中的客户。交互应用一般来讲是由用户驱动的,即用户从外部设备上输入数据,应用程序的动作由用户输入来决定,应用程序可以采用下面的两种控制流程实现用户的交互。,人机交互技术编写组,10,1.应用程序内部事件处理循环,人机交互技术编写组,11,事件处理循环的程序代码,while(1)read_event(myevent);switch(myevent.type)case type_1:do_type1_process();/*处理对应事件1的动作*/break;case type_2:do_type2_proces
6、s();break;case type_n:do_typen_process();break;,人机交互技术编写组,12,2.事件注册方式,窗口系统为每一个应用程序建立一个事件处理中心,事件处理中心负责事件的处理。应用程序将自己感兴趣的事件处理事先通过登记注册的方式通知事件处理中心,注册时同时告诉事件处理中心当事件产生时,应用程序需要进行的处理(回应过程)。当事件处理中心从窗口系统接收一个事件,分析这个事件属于哪个应用程序,然后把事件和控制转向该事件注册的回应过程,处理完后,回应过程把控制返还给事件处理中心,事件中心继续接收事件或者请求终止。,人机交互技术编写组,13,人机交互技术编写组,14
7、,2.事件注册方式,这种方式的好处是一般应用程序不需要设计事件处理循环,只关心应用程序需要处理哪些交互事件,当事件发生时应用程序如何处理。当应用程序不需要处理某个事件时,应用程序还可以随时取消注册。因为只处理注册的事件,事件处理中心处理事件的效率相对比较高。Java语言中图形界面的交互就是采用的这种事件注册方式,下面的程序清单7-2说明了应用程序如何通知注册事件,事件处理中心通过什么方式调用应用程序的回调函数。,人机交互技术编写组,15,程序清单7-2 quit.java import java.awt.*;import java.awt.event.*;class Quit extends
8、Frame implements ActionListener Button cancelButton,okButton;public Quit()cancelButton=new Button(Cancel);okButton=new Button(OK);setLayout(new FlowLayout();add(cancelButton);add(okButton);addWindowListener(new ProgramTerminator();cancelButton.addActionListener(this);okButton.addActionListener(this)
9、;,人机交互技术编写组,16,public void actionPerformed(ActionEvent event)Button clickedButton=(Button)event.getSource();if(clickedButton=cancelButton)setTitle(You clicked CANCEL);else/the event source is okButton setTitle(You clicked OK);class ProgramTerminator implements WindowListener public void windowClosin
10、g(WindowEvent event)System.exit(0);,人机交互技术编写组,17,public void windowActivated(WindowEvent event)public void windowClosed(WindowEvent event)public void windowDeactivated(WindowEvent event)public void windowDeiconified(WindowEvent event)public void windowIconified(WindowEvent event)public void windowOp
11、ened(WindowEvent event)public static void main(String args)Quit f=new Quit();f.setBounds(100,100,200,70);f.setVisible(true);,人机交互技术编写组,18,2.事件注册方式,在上面的程序中,当应用程序创建窗口对象时,通过addWindowListener方法通知事件处理中心该应用程序需要处理窗口关闭事件,并且当用户用鼠标器单击窗口右上角的小关闭按钮时,事件处理程序会自动调用ProgramTerminator的一个方法,结束当前的应用程序,在该程序中还用到了交互系统开发软件包中
12、的交互对象Button,在7.2节中将仔细讨论交互系统开发软件包,图7-4说明了程序初始的显示画面。,图7-4 Quit.java运行结果,人机交互技术编写组,19,7.2交互系统开发软件包,一般的窗口系统,输入和显示是分离的。交互系统开发软件包在支持窗口管理的基础上增加了另一种抽象,它把输入和输出的行为结合起来。从用户角度讲,图形用户界面WIMP非常重要的特征就是将输入和输出行为与屏幕上的一个独立的对象连接在一起。鼠标自硬件设备的输入(鼠标的移动)与显示屏上鼠标的输出(小的箭头光标或窗口内坐标的位置)是分离的。屏幕上光标的移动和鼠标的物理运动密切相关,即当鼠标在桌面上移动时,屏幕上的光标也跟
13、着移动。视觉上的光标与物理的设备都称为“鼠标”。,人机交互技术编写组,20,交互系统开发软件包,图7-5说明了如何将输入和输出通过一个按钮联系在一起。当用户移动鼠标到按钮时,屏幕的光标变换形状,提示用户可以单击鼠标,以选中按钮,如果此时用户按鼠标上的按键,屏幕上的按钮变亮,就像按下键盘上的某些键一样,让用户感到确实按下了屏幕上的按钮,释放鼠标键,屏幕上的按钮变暗,就像真正释放屏幕上的按钮。,人机交互技术编写组,21,人机交互技术编写组,22,输入和输出的融合,一般来说,窗口系统提供了上述简单的输入和输出的融合,复杂情况下输入输出的融合需要程序员来实现。为了帮助程序员实现输入和输出融合,需要在窗
14、口系统之上,提供更高层的对交互系统实现的支持交互系统开发软件包。交互系统开发软件包为程序员提供一组已经定义好的交互对象,也称为交互界面元素或窗口组件,程序员可以使用这些组件编写自己的应用程序。交互对象有预先定义好的行为,用户可以根据自己的需要选择使用。,人机交互技术编写组,23,对象之间的关系,为了提供交互对象灵活性,交互对象可以根据用户的需要进行定制,程序员可以根据自己特殊的要求调用交互对象。例如:当创建一个特别的按钮时,按钮上的标签可以是程序员设置的一个参数.较复杂的交互对象可以由较小的、简单的对象构建,整个应用可以看作是一组交互对象的集合,这些对象存在着一定的关系,交互对象的行为描述了整
15、个应用的语义。,人机交互技术编写组,24,交互对象和交互系统开发软件包的特性,这些组件可以被定义为一类交互对象,这类交互对象可以在一个应用中多次激活,不同的实例可以有微小的区别。复杂的交互对象可以由简单的交互对象构建。实例和继承是面向对象程序设计的基石,类可以看作交互对象的模板。,人机交互技术编写组,25,交互系统开发软件包的面向对象特性,交互系统开发软件包是面向对象的,但这并不意味着开发的应用程序所需要的语言必须支持面向对象的概念,也可以使用非面向对象的程序设计语言。程序员通过设置不同的实例属性的值来调整交互对象的行为和外观,这些属性可以在实例程序编译之前设置,如在程序Quit.java中两
16、个按钮交互对象cancelButton 和 okButton,这些按钮的显示文本在程序编译时已经设定。,人机交互技术编写组,26,Java语言中的交互系统开发软件包,抽象窗口工具包 AWT(Abstract Windowing Toolkit)它将交互对象,诸如:按钮、菜单、对话框等映射到相应的Java 的类Button、Menu、Dialog 程序员要么直接使用这些类,要么使用它们的子类。从某种意义上讲,这些类规范了交互对象的行为。利用子类可以很容易增设新的属性,人机交互技术编写组,27,JAVA软件包的事件处理机制,在AWT1.0,程序员需要通过继承按钮的子类来指定按钮的行为从AWT1.1
17、以后,程序员使用一种类似于传统的回调过程的方法来指定按钮的行为但这里注册的不再是一个回调函数,而是一个事件监听对象,如在Quit.Java中的用于处理窗口事件的ProgramTerminator的一个实例。,人机交互技术编写组,28,7.3 用户界面管理系统UIMS,比软件包更高层次的是用户界面管理系统UIMS(User Interface Management Systems)UIMS支持用户界面的表示、设计、实现、执行、评估和维护能够为用户提供一致的人机界面,以极其友好的方式与用户进行人机交互并能使开发者几乎随心所欲地使用此开发工具进行软件开发,人机交互技术编写组,29,UIMS,一个支持
18、交互系统开发的UIMS的概念结构,该结构把应用程序的语义与应用程序的表现部分分开;用来实现分离应用和表现,并保留应用程序和表示形式之间的内在关系的技术 支持一个运行的交互系统的管理、实现和评估的技术。,人机交互技术编写组,30,7.3.1 UIMS作为一个概念结构,对话的独立性是人机交互研究领域的主要问题,主要是强调业务(应用程序的语义)与提供给用户的界面的分离在第六章中从界面的表示模型的角度讨论了各种表示模型对对话独立性的支持情况本节将从系统结构的角度探讨如何实现对话的独立性。,人机交互技术编写组,31,对话的独立性的优点,(1)可移植性:因为应用程序的开发与依赖设备的界面的分离,使得应用程
19、序可以用于不同的系统。(2)可重用性:对话的独立性增加了元素可重用性,这样可以节省开发费用。,人机交互技术编写组,32,对话的独立性的优点,(3)界面的多样性:为了增强应用程序界面的灵活性,对应同一个应用可以开发不同形式、不同风格的界面,以适应不同用户和不同环境的需求。(4)定制界面:交互界面可以按设计员和用户的习惯方式和风格进行设计,以提高程序开发和使用的效率。,人机交互技术编写组,33,应用和界面的关系,对话的独立性要求应用和界面的分离,但是两者存在密切的联系界面表现是为应用服务的,应用所需要的外部数据就是用户通过界面输送的应用内部的数据和状态也是通过界面表现展现给用户的,人机交互技术编写
20、组,34,应用和界面的关系,在一个复杂的交互任务完成后,一般界面表现都要和应用进行通讯甚至在交互任务完成的过程中也需要和应用进行通讯界面需要从应用中获取要显示的物体的数据,人机交互技术编写组,35,交互系统中包含三个主要元素,应用层表现层对话控制(dialog control)其中对话控制负责应用程序和表现二者之间通信在事件注册方式,在应用程序外部实现对话控制 多数UIMS采用外部对话控制,因为这样能够更好支持应用程序和界面的分离。,人机交互技术编写组,36,7.3.2 UIMS的表示方法,UIMS的表示方法主要包含人机界面的规格说明和它与人的因素、应用程序及其数据结构的联系等。UIMS逻辑结
21、构模型中几个主要元素的表示方法,其中除了对话控制的表示方法比较成熟、研究成果丰富外,其它层次的表示方法尚有待发展。,人机交互技术编写组,37,表现层的表示方法,表现层的表示方法主要涉及用户输入输出信息的处理,需要解决的问题:处理和表示图形的输入输出;适应多媒体的需要,将输入输出信息扩充到视频、语音、动画、仿真等;适应智能人机界面规格说明的需要,即信息流的内外映射中如何包含简单的基于人机界面设计规格的决策,使一对一映射的关系扩充到多对一、多对多的映射关系。,人机交互技术编写组,38,对话控制的表示方法,基于语言的表示方法 界面设计者用一种专门的人机界面描述语言(user interface de
22、sign language,UIDL)来说明界面,语言的主要任务是说明界面对话控制的语法,即输入输出动作的合法顺序,人机交互技术编写组,39,人机界面描述语言的多种形式:菜单网络,是最简单的表示方法,可以支持菜单的层次或网络结构。菜单代表用户在某一时刻可能采取的所有输入。菜单项目和下一个显示的菜单之间的联系模拟应用程序对先前输入的响应。上下文无关文法,使用上下文无关文法来描述用户和程序之间的对话,且大多以编译器为基础,上下文无关文法如BNF,可以很好描述基于命令的界面,可是不太适合描述基于图形的交互。,对话控制的表示方法,人机交互技术编写组,40,对话控制的表示方法,人机界面描述语言的多种形式
23、(续):状态转换网络,在第六章已经详细介绍了该表示语言事件语言,在事件语言中,输入数据被认为是事件并立即送事件处理器这些处理器能产生输出事件,改变系统的内部状态,或调用应用子程序,类似事件对象模型。面向对象语言,提供一个面向对象的框架,设计者在该框架内编写界面程序,人机交互技术编写组,41,对话控制的表示方法,基于图形的表示方法 基于图形的UIMS让用户或至少部分地让用户使用鼠标器直接将对象放到屏幕上来定义界面,它把界面的图示表示作为最重要的一个方面,而图形工具是说明这种表示的最合适的方法。基于应用语义过程的表示方法 从应用语义过程规格说明自动生成界面,并且让设计者修改界面以改进它的性能。,人
24、机交互技术编写组,42,应用层的表示方法,目前应用界面模型和应用层的表示方法很不成熟,仍旧处于发展初期。作为可供使用的实用界面模型,至少必须包含如下三个内容:与用户和人机界面有关的应用数据结构的说明;人机界面调用的应用子程序的说明,例如子程序名、运算对象等,这实际上是定义了人机界面和应用程序之间的界面;必须列举应用程序对用户的限制,从而使人机界面排除许多可能引起语义错误的操作,避免对应用程序的破坏。,人机交互技术编写组,43,应用层的表示方法,对象算子表示对象对应于应用程序的数据结构算子对应于人机界面调用的应用子程序。基于关系和一阶逻辑的表示关系用来表示应用程序中的数据结构,而一阶逻辑模型用来
25、表示应用子程序。,人机交互技术编写组,44,UIMS总结,交互系统的三个主要元素的每一种元素说明方法都有几种不同的形式,分别有自己的特性和不同的适用性在一个UIMS中可以使用不同的表示方法,从而为程序员设计交互系统提供更多的方便和灵活性。,人机交互技术编写组,45,7.4交互系统的软件结构,为了支持复杂的人机交互系统的实现,从应用和界面的耦合程度来讲,交互系统常采用这样三种方式的结构:界面和应用明确的分离,如Seeheim模型,MVC模式;界面行为和应用语义处理不清晰的紧耦合,许多直接基于交互系统开发软件包开发应用系统都这种结构 介于上述两种模式之间的折中模式,如PAC模型。,人机交互技术编写
26、组,46,7.4.1 Seeheim模型,该结构是1985年在德国的Seehei举行的国际人机界面管理系统研讨论上首先提出的,人机交互技术编写组,47,Seeheim模型,Seeheim模型基于对话独立性的概念,即界面表现与应用通过一个控制单元实现松散耦合这一控制单元定义了界面表现与应用的关系,传输运行时往来的数据和控制Seeheim模型表明了人机交互中应该出现的逻辑部件,这些部件有不同的功能及不同的描述方法,人机交互技术编写组,48,表现部件,一般来说,表现部件处理用户界面的词法级内容,将输入输出数据的内部表示转送给对话控制部件。表现部件负责人机交互的外部表现:屏幕管理,如屏幕窗口大小布局等
27、;图形生成,如各种交互对象的绘制;输入设备管理,如对键盘、鼠标等设备的管理;,人机交互技术编写组,49,表现部件,表现部件负责人机交互的外部表现(续):词法反馈,简单的与应用无关的信息反馈,如简单的输入数据的错误检查;交互技术,一些特殊的交互的技术,如橡皮筋,网格,方向约束等;将输入数据(或用户动作)转换成内部形式。,人机交互技术编写组,50,对话控制,对话控制部件是用户和应用程序之间的协调器,控制两者对话的形式。用户通过表现部件提出请求,这些请求及数据的词法元素,经过对话控制部件的检验,传输给应用程序中对应的例程;应用程序将对请求的回答及其它新的数据请求传输给表现部件的对应部分。在对话控制中
28、应维持一定的状态,以执行对输入输出活动的控制或协调。,人机交互技术编写组,51,应用接口,应用接口部件是从界面的角度对应用程序的表述,是为了实现界面和应用程序通讯而定义的一组协议:应用程序所维护的数据结构的描述(或数据对象)。界面可使用的与应用程序相关的过程或方法应用程序的使用限制,它使界面可以检查输入的语义合法性,人机交互技术编写组,52,三个部件的关系,在界面设计时,这三部分可对应于词法、语法及语义阶段。在表现部件和对话控制部件之间的信息流是输入输出的词法元素,控制流则是对话控制部件在表现部件上所施加的控制,人机交互技术编写组,53,三个部件的关系,对话控制部件与应用接口间的信息流是有关输
29、入给应用的数据或从应用输出的数据,其控制流则是有关状态的控制和协调。对话控制部件主要在表示部件和应用接口之间进行格式转换、控制状态的转换等。,人机交互技术编写组,54,Seeheim模型的优缺点,由于它基于对话独立性原则,因而能使界面设计的结构比较清晰,适合界面与应用程序分别或并行执行。但这种模型只是人机对话系统的一个“执行”模型,并不能反映软件的整个生存期。其次它对于直接操作的图形用户界面设计并不是很合适,主要是因为直接操作需要一致的、连续的语义反馈以及相应用户的动作。Seeheim 模型没有显式的说明怎样由小的交互元素生成大的复杂的元素。,人机交互技术编写组,55,Seeheim模型的改进
30、,为了改进Seeheim模型,可以将用户分成两部分:交互对象库:其中交互对象库是一组界面元素及其操作对话管理部件:话管理部件包括对话控制机制及数据类型,人机交互技术编写组,56,7.4.2 MVC模型及Struts结构,MVC(model-view-controller)模型和实现MVC模型的Struts结构可以改进Seeheim 模型的缺点。MVC模型最初是在Smalltalk-80中被用来构建用户界面的,是目前广泛流行的一种软件设计模式。在J2EE应用体系结构中,MVC主要适用于交互式的Web应用,尤其是存在大量页面及多次客户访问及数据显示。,人机交互技术编写组,57,1.MVC模型,MV
31、C把一个应用的输入、处理、输出流程按照模型(model)、视图(View)和控制(Controller)的方式进行分离,形成模型层、视图层、控制层三个层次。,人机交互技术编写组,58,1.MVC模型,人机交互技术编写组,59,模型(model),模型负责业务流程/状态的处理以及业务规则的制定业务流程的处理过程对其它层来说是透明的,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心,模型包含完成任务所需要的所有的行为和数据。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。,人机交互技术编写组,60,视图(View)
32、,视图代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交给模型(Model)处理。如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。,人机交互技术编写组,61,控制(Controller),控制器将模型映射到界面中,处理用户的输入,每个界面有一个控制器。是一个接收用户输入、创建或修改适当的模型对象并且将修改在界面中体现出来的状态机。在需要时
33、还负责创建其它的界面和控制器。决定哪些界面和模型组件在某个给定的时刻应该是活动的,负责接收和处理用户的输入,来自用户输入的任何变化都被从控制器送到模型。,人机交互技术编写组,62,MVC的目的,MVC的目的是增加代码的重用率,减少数据表达、数据描述和应用操作的耦合度。使得软件可维护性,可修复性,可扩展性,灵活性以及封装性大大提高。由于数据和应用的分开,在新的数据源加入和数据显示变化的时候,数据处理也会变得更简单。,人机交互技术编写组,63,MVC的优点,可以为一个模型在运行时同时建立和使用多个视图 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态地打开或关闭、甚至在运行期
34、间进行对象替换 模型的可移植性,因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作,人机交互技术编写组,64,MVC模型的不足,增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率 视图与控制器间的过于紧密的连接。视图与控制器是相互分离、但又确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据,人机交互技术编写组,65,2.Struts结构,Struts的体系结构实现了MVC模式的概念
35、,它将这些概念映射到web应用程序的组件和概念中。,人机交互技术编写组,66,Struts结构,人机交互技术编写组,67,Struts结构对MVC模型的实现,视图(View)JSP页面和表示组件基于Struts的应用程序中的视图部分通常使用JSP技术来构建。每一视图都是采用了定制标签库的JSP页面,这些定制标签库由Struts Framework提供。全部表单元素都是用定制标签编码的,所以这些页面能够很方便地同控制器进行交互每个表单都通过映射JSP到servlet的请求这一方式指向控制器的特定入口点。,人机交互技术编写组,68,Struts结构对MVC模型的实现,控制器(Controller)
36、ActionServlet和ActionMapping 应用程序的控制器从客户端接收请求,决定执行什么业务逻辑,然后将产生下一步用户界面的责任委派给一个适当的视图组件。在Struts中,控制器的基本组件是ActionServlet类的servlet。这个servlet通过定义一组映射(由Java接口ActionMapping描述)来配置。每个映射定义一个与所请求的URI相匹配的路径和一个 Action类(一个实现Action接口的类)完整的类名,这个类负责执行预期的逻辑,然后将控制分派给适当的视图组件来创建响应。,人机交互技术编写组,69,Struts结构对MVC模型的实现,模型(model)
37、系统状态和商业逻辑JavaBeans 在struts中,模型分为两个部分:系统的内部状态、可以改变状态的操作(事务逻辑)。内部状态通常由一组ActinForm JavaBean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时从某个数据库获得数据。,人机交互技术编写组,70,Struts的特点,Struts是开放源代码的软件,开发者能更深入的了解其内部实现机制。Struts的优点主要集中体现在两个方面:Taglib:Taglib是Struts的标记库,灵活使用,能大大提高开发效率。页面导航:通过一个配置文件,可把握整个系统各部分之间的联系描述出来,这
38、对于后期的维护很有好处。Struts已逐步越来越多运用于商业软件,是一种非常优秀的J2EE MVC实现方式。,struts演示的基本构架和数据流程,人机交互技术编写组,72,7.4.3 E-O模型,E-O模型的事件、对象类型的类型和组织方式介绍基于E-O模型的软件结构。,人机交互技术编写组,73,E-O模型的逻辑结构,人机交互技术编写组,74,E-O模型组成,设备管理模块(Device Management Module,DMM)提供于各种交互设备的接口,并实现设备无关特性 事件管理子程序(Event Management Subsystem,EMS)读取输入设备的输入信息形成事件并进行统一的
39、管理,将反馈信息的事件解释为适当的输出指令并传给输出设备 对象管理子系统(Object Management Subsystem,OMS)创建、装载、保护用户界面中各类对象,并对对象进行管理,人机交互技术编写组,75,E-O模型组成,事件对象管理子系统(Event-Object Management Subsystem,EOMS)实现事件目标的整合,按适当的策略控制事件在各目标节点的流动,以形成和维持人机交互的过程,是整个用户界面系统的核心,表单UIMS对鼠标事件的响应,用户点击了一下鼠标后,表单UIMS就获得了用户的鼠标动作和鼠标在屏幕上的一个坐标(x,y)。对每个表单 if(坐标落在了某个
40、表单区域内部)显示该表单及表单内包含的所有界面元素,其余表单按照原来的先后顺序排列;对表单内的每个的单位界面元素 if(坐标落在了某个单位界面元素的区域内部)then 聚焦单位界面元素;if(选中的单位界面元素添加了特定鼠标事件的响应)then 将控制权交给单位界面元素交互对象,执行该事件要执行的任务,返回;if(选中的表单添加了特定鼠标事件的响应)then 将控制权交给表单交互对象,执行该事件要执行的任务,返回;所有表单失去焦点,聚焦到系统要显示的默认界面;,A,B,By,Bx,Am,An,人机交互技术编写组,77,智能体(Agent),智能体的组成事件接收单元:负责事件的接收;事件发送单元
41、:负责事件的发送;记忆单元:维持智能体内部的状态;处理单元:周而复始地处理输入事件、更新状态、产生新的事件或改变它所感兴趣的输入事件类型智能体特征自发性(Autonomy):能控制其内部状态,产生用来实现目标的行为 通信性(Communicability):智能体之间可以进行信息交换 反应性(Reactivity):可感知并影响其周围环境 协作性(Cooperation):可与其他智能体合作共同完成一项任务,人机交互技术编写组,78,智能体的分类,认知型智能体(Cognitive Agent)具有丰富的推断和决定能力及类人的思维能力 反应型智能体(Reactive Agent)User Age
42、nts Agent Guides Automous Agents Anthropomorphic Agents Multi-agent Systems,人机交互技术编写组,79,用智能体方法解决任务的特点,适应性(Adapting),具有一定的适应性和灵活性,可针对不同用户的特点动态改变其表现来“投其所好”探究性(Researching),任务可以非精确的制定,可以从模糊输入中寻求解决问题的答案 演示性(Demonstrating),需要通过实际演示来传授用户知识自发性(Autonomy),任务本身不必要频繁地与用户交互,很适合于授权执行 异步性(Asynchrony),由于处理时间和网络延迟
43、等因素,任务的发起到完成之间有一定的时间延迟,人机交互技术编写组,80,Agent的实现,面向智能体的编程实际上就是面向对象编程的扩展智能体本身就可以看作是一种对象 智能体结构中的思维状态和信念可以看作对象中的数据能力可以看作对象的中的方法承诺是与人工智能相关的新内容,人机交互技术编写组,81,PAC模型,交互系统经常被视为一个协作智能体的集合负责人机交互的智能体接受用户的输入并显示数据其他的智能体维护系统的数据模型并提供对这些数据进行操作的功能附加的智能体负责诸如错误处理或同其他软件系统的通信的任务,人机交互技术编写组,82,PAC智能体树状层次结构,人机交互技术编写组,83,PAC智能体树
44、状层次结构,顶层PAC智能体提供系统的核心功能主要职责是提供软件的全局数据模型顶层PAC智能体的控制组件三个职责允许底层智能体使用顶层智能体的服务协调PAC agent的层次 保存了用户与系统的交互信息中层PAC智能体表达了底层智能体的组合或底层智能体之间的关系维护底层智能体间的一致性,人机交互技术编写组,84,PAC智能体树状层次结构,底层PAC智能体描绘了应用领域的一个具体语义 底层PAC agent的抽象组件同顶层PAC agent的抽象组件具有相似的职责底层PAC agent的控制组件维护抽象组件和表示组件的一致性 底层PAC智能体的控制组件与较高层智能体通信以交换事件和数据 底层PA
45、C智能体并不局限于仅提供应用领域的语义,也可以指定底层智能体来实现系统服务,人机交互技术编写组,85,实现步骤,(1)定义一个应用模型(2)为组织PAC层次定义一般策略(3)明确说明高层PAC智能体(4)明确说明底层PAC智能体(5)明确说明系统服务的底层PAC智能体(6)明确说明组成低层PAC智能体的中间层PAC智能体(7)明确说明与较低层PAC智能体协作的中间层PAC智能体(8)从人机交互分离出核心功能(9)提供外部接口(10)将各层次连接起来,人机交互技术编写组,86,讨论,优点事务分离,应用领域的不同语义分别用独立的智能体表示 支持变化和扩展,一个PAC智能体的表示组件或抽象组件的变化
46、不影响系统中的其他智能体 新的智能体可以容易地集成到一个现存的PAC体系结构中而无需对现存的PAC智能体做太多的改变 支持多任务,PAC智能体可以容易地分配到不同的线程、进程或机器上,人机交互技术编写组,87,讨论,不足增加了系统复杂性,一个应用程序中的每个语义都作为它自己的PAC智能体来实现,可能导致一个复杂的系统结构 复杂的控制组件,在一个PAC系统中,控制组件是一个智能体的抽象组件和表示组件之间的通信媒介,也是不同的PAC智能体之间的通信媒介 PAC智能体之间的通信开销可能会影响系统效率 可应用性,应用程序的原子语义越小,那么它们用户接口的相似性就越多,该模式可用性方面就越差,人机交互技术编写组,88,课堂练习,语义反馈性和对话独立性的含义是什么?用户为中心的设计原则有哪些?利用产生式描述如下交互:用户选择画线命令后,单击鼠标定义起始点,按住鼠标左键,拖动鼠标,抬起鼠标左键即为定义了终止点,画出直线。拖动鼠标过程中要求有橡皮筋出现。,人机交互技术编写组,89,课堂练习,1.UIMS中的 交互元素有哪些?它们的表示方式有哪些?2窗口系统的服务器端有什么组成.?,