人机交互技术编写组 1
第 7章 软件结构与实现
人机交互技术编写组 2
内容提要
窗口系统对交互系统实现的支持
? 窗口系统提供设备独立性和资源的共享,在窗口系统,程序
员不用担心输入和输出设备的初始化,应用程序从窗口系统
管理器接收事件请求流,完成相应的交互操作。
用户界面管理系统 UIMS
? UIMS是抽象层次更高的支持交互系统实现的开发环境,为交
互系统实现提供更高层支持。
支持复杂人机交互系统的实现的软件体系结构
? 包括 E-O模型
? Seeheim模型
? MVC模型
? 智能体模型
人机交互技术编写组 3
7.1窗口系统
窗口系统强调为程序员提供硬件设备独立性,
交互系统的实现建立在一个抽象的设备上,对
抽象设备的操作通过设备驱动程序转换成具体
的设备上的操作,这可以使交互系统的开发变
得简单,也使交互系统的移植非常方便。
人机交互技术编写组 4
7.1窗口系统
窗口系统为单一输入输出设备建立多个抽象设
备来实现其资源的共享 。 每个抽象设备都可看
作一个窗口的独立的输入输出设备, 窗口系统
为这些设备提供并发控制 。 从应用的角度看,
每个应用程序独立地对设备进行操作, 另一方
面, 窗口系统还为每个窗口提供一个抽象显示
设备, 这可以通过为每个活动的抽象显示设备
建立一个窗口来实现 。
设备独立性和多任务管理是窗口系统的最重要
的两个特性。
人机交互技术编写组 5
7.1.1窗口系统结构
窗口系统一般有三种结构,
? 在各个应用程序内部实现和管理多任务,由于每个
应用程序都需要处理复杂的多任务管理,并且移植
起来不方便。
? 在操作系统核心集中处理多任务管理,应用程序不
再对多任务进行管理,由于过分的依赖操作系统,
应用程序需要处理因操作系统的不同而引起的差异。
? 多任务的管理可由独立的管理程序进行管理,应用
程序通过调用该管理程序提供的接口来实现对多任
务的管理和设备的独立性操作,该管理程序可以在
不同的操作系统下运行,因而基于此管理程序开发
的交互系统是最容易移植的。
人机交互技术编写组 6
一种客户 /服务器结构
客户应用程序 客户应用程序 客户应用程序 ﹒﹒﹒ 客户
抽象终端 抽象终端
﹒﹒﹒
抽象终端
资源管理器
设备驱动程序
服务器
设备 鼠标 窗口 1 窗口 2
窗口 n
键盘
图 7-1 客户 /服务器结构
人机交互技术编写组 7
服务器端运行的三部分程序
资源管理器
? 是整个窗口系统的核心,负责多任务的管理,并通
过设备驱动程序来管理外部设备 。
设备驱动程序
? 负责外部设备的驱动,接受输入设备的输入,并将
输入数据转换成统一的格式,通过设备驱动程序实
现设备的独立性 。
抽象终端
? 负责和客户应用程序的接口,对每个应用程序由窗
口管理程序为其分配一个抽象终端。
人机交互技术编写组 8
工作方式
当外部设备产生一个输入请求, 如鼠标单击某
一个窗口内的一点, 资源管理程序从设备驱动
程序获得鼠标数据, 产生鼠标驱动事件, 并将
该事件分发给与该窗口相对应的抽象终端, 与
抽象终端相对应的应用程序接受事件并进行相
应的处理 。
实现时,客户程序和服务器程序可以在一台机
器上,也可以分布在不同的机器上。
人机交互技术编写组 9
7.1.2设计交互应用程序
在客户 /服务器结构中,交互系统的应用程序
通过调用服务器端一个独立的管理程序来管理
多任务和提供设备的独立性,相当于客户 -服务
器中结构中的客户。
交互应用一般来讲是由用户驱动的,即用户从
外部设备上输入数据,应用程序的动作由用户
输入来决定,应用程序可以采用下面的两种控
制流程实现用户的交互。
人机交互技术编写组 10
1.应用程序内部事件处理循环
设备
客户应用程序
开始
读输入
过程输入
退出?
结束
服务器
图 7-2事件处理循环
人机交互技术编写组 11
事件处理循环的程序代码
? while(1){
? read_event(myevent);
? switch(myevent.type){
? case type_1,
? do_type1_process(); /*处理对应事件 1的
动作 */
? break;
? case type_2,
? do_type2_process();
? break;
? …
? case type_n,
? do_typen_process();
? break;
? }
? }
人机交互技术编写组 12
2.事件注册方式
窗口系统为每一个应用程序建立一个事件处
理中心,事件处理中心负责事件的处理。应
用程序将自己感兴趣的事件处理事先通过登
记注册的方式通知事件处理中心,注册时同
时告诉事件处理中心当事件产生时,应用程
序需要进行的处理(回应过程)。
当事件处理中心从窗口系统接收一个事件,
分析这个事件属于哪个应用程序,然后把事
件和控制转向该事件注册的回应过程,处理
完后,回应过程把控制返还给事件处理中心,
事件中心继续接收事件或者请求终止。
人机交互技术编写组 13
应用程序
开始
启动通知者
处理事件
读输入
请求回应
退出?


通知者
图 7-3 事件注册方式处理流程图
发送给正确的回调函数
向通知者注册回调函数
结束
人机交互技术编写组 14
2.事件注册方式
这种方式的好处是一般应用程序不需要设计
事件处理循环,只关心应用程序需要处理哪
些交互事件,当事件发生时应用程序如何处
理。当应用程序不需要处理某个事件时,应
用程序还可以随时取消注册。因为只处理注
册的事件,事件处理中心处理事件的效率相
对比较高。 Java语言中图形界面的交互就是
采用的这种事件注册方式,下面的程序清单 7-
2说明了应用程序如何通知注册事件,事件处
理中心通过什么方式调用应用程序的回调函
数。
人机交互技术编写组 15
程序清单 7-2 quit.java
import java.awt.*;
import java.awt.event.*;
class Quit
extends 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);
}
人机交互技术编写组 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 windowClosing(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 windowOpened(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的一个方法, 结束
当前的应用程序,在该程序中还用到了交互系统开发
软件包中的交互对象 Button,在 7.2节中将仔细讨论
交互系统开发软件包, 图 7-4说明了程序初始的显
示画面 。
图 7-4 Quit.java运行结果
人机交互技术编写组 19
7.2交互系统开发软件包
一般的窗口系统, 输入和显示是分离的 。
交互系统开发软件包在支持窗口管理的基础上增加
了另一种抽象, 它把输入和输出的行为结合起来 。
从用户角度讲, 图形用户界面 WIMP非常重要的特征
就是将输入和输出行为与屏幕上的一个独立的对象连
接在一起 。
鼠标自硬件设备的输入(鼠标的移动)与显示屏上鼠
标的输出(小的箭头光标或窗口内坐标的位置)是分
离的。
屏幕上光标的移动和鼠标的物理运动密切相关,即当
鼠标在桌面上移动时,屏幕上的光标也跟着移动。
视觉上的光标与物理的设备都称为“鼠标” 。
人机交互技术编写组 20
交互系统开发软件包
图 7-5说明了如何将输入和输出通过一个按钮
联系在一起。
当用户移动鼠标到按钮时,屏幕的光标变换形
状,提示用户可以单击鼠标,以选中按钮,如
果此时用户按鼠标上的按键,屏幕上的按钮变
亮,就像按下键盘上的某些键一样,让用户感
到确实按下了屏幕上的按钮,释放鼠标键,屏
幕上的按钮变暗,就像真正释放屏幕上的按钮。
人机交互技术编写组 21
按钮 按钮 按钮 按钮
单击
按钮
移动 单击 释放 移动
图 7-5 按钮交互对象行为
人机交互技术编写组 22
输入和输出的融合
一般来说,窗口系统提供了上述简单的输入和输出的
融合,复杂情况下输入输出的融合需要程序员来实现。
为了帮助程序员实现输入和输出融合,需要在窗口系
统之上,提供更高层的对交互系统实现的支持 —— 交
互系统开发软件包。
交互系统开发软件包为程序员提供一组已经定义好的
交互对象,也称为交互界面元素或窗口组件,程序员
可以使用这些组件编写自己的应用程序。
交互对象有预先定义好的行为,用户可以根据自己的
需要选择使用。
人机交互技术编写组 23
对象之间的关系
为了提供交互对象灵活性,交互对象可以
根据用户的需要进行定制,程序员可以根
据自己特殊的要求调用交互对象。
例如:当创建一个特别的按钮时,按钮上
的标签可以是程序员设置的一个参数,
较复杂的交互对象可以由较小的、简单的
对象构建,整个应用可以看作是一组交互
对象的集合,这些对象存在着一定的关系,
交互对象的行为描述了整个应用的语义。
人机交互技术编写组 24
交互对象和交互系统开发软件包的特性
这些组件可以被定义为一类交互对象,
这类交互对象可以在一个应用中多次激
活,不同的实例可以有微小的区别。
复杂的交互对象可以由简单的交互对象
构建。
实例和继承是面向对象程序设计的基石,
类可以看作交互对象的模板。
人机交互技术编写组 25
交互系统开发软件包的面向对象特性
交互系统开发软件包是面向对象的,但这并不
意味着开发的应用程序所需要的语言必须支持
面向对象的概念,也可以使用非面向对象的程
序设计语言。
程序员通过设置不同的实例属性的值来调整交
互对象的行为和外观,这些属性可以在实例程
序编译之前设置,如在程序 Quit.java中两个按
钮交互对象 cancelButton 和 okButton,这些按
钮的显示文本在程序编译时已经设定。
人机交互技术编写组 26
Java语言中的交互系统开发软件包
抽象窗口工具包 AWT(Abstract Windowing
Toolkit)
它将交互对象,诸如:按钮、菜单、对话框等
映射到相应的 Java 的类 Button,Menu、
Dialog
程序员要么直接使用这些类,要么使用它们的
子类。
从某种意义上讲,这些类规范了交互对象的行
为。
利用子类可以很容易增设新的属性
人机交互技术编写组 27
JAVA软件包的事件处理机制
在 AWT1.0,程序员需要通过继承按钮的子类
来指定按钮的行为
从 AWT1.1以后,程序员使用一种类似于传统
的回调过程的方法来指定按钮的行为
但这里注册的不再是一个回调函数,而是一个
事件监听对象,如在 Quit.Java中的用于处理窗
口事件的 ProgramTerminator的一个实例。
人机交互技术编写组 28
7.3 用户界面管理系统 UIMS
比软件包更高层次的是用户界面管理系统
UIMS(User Interface Management Systems)
UIMS支持用户界面的表示、设计、实现、执
行、评估和维护
能够为用户提供一致的人机界面,以极其友好
的方式与用户进行人机交互
并能使开发者几乎随心所欲地使用此开发工具
进行软件开发
人机交互技术编写组 29
UIMS
一个支持交互系统开发的 UIMS的概念结
构,该结构把应用程序的语义与应用程
序的表现部分分开;
用来实现分离应用和表现,并保留应用
程序和表示形式之间的内在关系的技术
支持一个运行的交互系统的管理、实现
和评估的技术。
人机交互技术编写组 30
7.3.1 UIMS作为一个概念结构
对话的独立性是人机交互研究领域的主
要问题,主要是强调业务(应用程序的
语义)与提供给用户的界面的分离
在第六章中从界面的表示模型的角度讨
论了各种表示模型对对话独立性的支持
情况
本节将从系统结构的角度探讨如何实现
对话的独立性。
人机交互技术编写组 31
对话的独立性的优点
(1) 可移植性,
? 因为应用程序的开发与依赖设备的界面的分
离, 使得应用程序可以用于不同的系统 。
(2)可重用性,
? 对话的独立性增加了元素可重用性, 这样可
以节省开发费用 。
人机交互技术编写组 32
对话的独立性的优点
(3)界面的多样性,
? 为了增强应用程序界面的灵活性, 对应同一个应用
可以开发不同形式, 不同风格的界面, 以适应不同
用户和不同环境的需求 。
( 4) 定制界面,
? 交互界面可以按设计员和用户的习惯方式和风格进
行设计, 以提高程序开发和使用的效率 。
人机交互技术编写组 33
应用和界面的关系
对话的独立性要求应用和界面的分离,
但是两者存在密切的联系
界面表现是为应用服务的,应用所需要
的外部数据就是用户通过界面输送的
应用内部的数据和状态也是通过界面表
现展现给用户的
人机交互技术编写组 34
应用和界面的关系
在一个复杂的交互任务完成后,一般界
面表现都要和应用进行通讯
甚至在交互任务完成的过程中也需要和
应用进行通讯
界面需要从应用中获取要显示的物体的
数据
人机交互技术编写组 35
交互系统中包含三个主要元素
应用层
表现层
对话控制( dialog control)
? 其中对话控制负责应用程序和表现二者之间通信
? 在事件注册方式,在应用程序外部实现对话控制
? 多数 UIMS采用外部对话控制,因为这样能够更好支
持应用程序和界面的分离。
人机交互技术编写组 36
7.3.2 UIMS的表示方法
UIMS的表示方法主要包含人机界面的规
格说明和它与人的因素、应用程序及其
数据结构的联系等。
UIMS逻辑结构模型中几个主要元素的表
示方法,其中除了对话控制的表示方法
比较成熟、研究成果丰富外,其它层次
的表示方法尚有待发展。
人机交互技术编写组 37
表现层的表示方法
表现层的表示方法主要涉及用户输入输
出信息的处理,需要解决的问题,
? 处理和表示图形的输入输出;
? 适应多媒体的需要,将输入输出信息扩充到
视频、语音、动画、仿真等;
? 适应智能人机界面规格说明的需要,即信息
流的内外映射中如何包含简单的基于人机界
面设计规格的决策,使一对一映射的关系扩
充到多对一、多对多的映射关系。
人机交互技术编写组 38
对话控制的表示方法
基于语言的表示方法
? 界面设计者用一种专门的人机界面描述语言
( user interface design language,UIDL)
来说明界面,语言的主要任务是说明界面对
话控制的语法,即输入输出动作的合法顺序
人机交互技术编写组 39
人机界面描述语言的多种形式,
? 菜单网络,是最简单的表示方法,可以支持
菜单的层次或网络结构。菜单代表用户在某
一时刻可能采取的所有输入。菜单项目和下
一个显示的菜单之间的联系模拟应用程序对
先前输入的响应。
? 上下文无关文法,使用上下文无关文法来描
述用户和程序之间的对话,且大多以编译器
为基础,上下文无关文法如 BNF,可以很好
描述基于命令的界面,可是不太适合描述基
于图形的交互。
对话控制的表示方法
人机交互技术编写组 40
对话控制的表示方法
人机界面描述语言的多种形式(续),
? 状态转换网络,在第六章已经详细介绍了该
表示语言
? 事件语言,在事件语言中,输入数据被认为
是事件并立即送事件处理器.这些处理器能
产生输出事件,改变系统的内部状态,或调
用应用子程序,类似事件-对象模型。
? 面向对象语言,提供一个面向对象的框架,
设计者在该框架内编写界面程序
人机交互技术编写组 41
对话控制的表示方法
基于图形的表示方法
? 基于图形的 UIMS让用户或至少部分地让用
户使用鼠标器直接将对象放到屏幕上来定义
界面,它把界面的图示表示作为最重要的一
个方面,而图形工具是说明这种表示的最合
适的方法。
基于应用语义过程的表示方法
? 从应用语义过程规格说明自动生成界面,并
且让设计者修改界面以改进它的性能。
人机交互技术编写组 42
应用层的表示方法
目前应用界面模型和应用层的表示方法很不成
熟,仍旧处于发展初期。作为可供使用的实用
界面模型,至少必须包含如下三个内容,
? 与用户和人机界面有关的应用数据结构的说明;
? 人机界面调用的应用子程序的说明,例如子程序名、
运算对象等,这实际上是定义了人机界面和应用程
序之间的界面 ;
? 必须列举应用程序对用户的限制,从而使人机界面
排除许多可能引起语义错误的操作,避免对应用程
序的破坏。
人机交互技术编写组 43
应用层的表示方法
对象 ―― 算子表示
? 对象对应于应用程序的数据结构
? 算子对应于人机界面调用的应用子程序。
基于关系和一阶逻辑的表示
? 关系用来表示应用程序中的数据结构,
? 而一阶逻辑模型用来表示应用子程序。
人机交互技术编写组 44
UIMS总结
交互系统的三个主要元素的每一种元素
说明方法都有几种不同的形式,分别有
自己的特性和不同的适用性
在一个 UIMS中可以使用不同的表示方法,
从而为程序员设计交互系统提供更多的
方便和灵活性。
人机交互技术编写组 45
7.4交互系统的软件结构
为了支持复杂的人机交互系统的实现,
从应用和界面的耦合程度来讲,交互系
统常采用这样三种方式的结构,
? 界面和应用明确的分离,如 Seeheim模型,
MVC模式;
? 界面行为和应用语义处理不清晰的紧耦合,
许多直接基于交互系统开发软件包开发应用
系统都这种结构
? 介于上述两种模式之间的折中模式,如 PAC
模型。
人机交互技术编写组 46
7.4.1 Seeheim模型
该结构是 1985年在德国的 Seehei举行的
国际人机界面管理系统研讨论上首先提
出的
表现部件 对话控制 应用接口 应用程序
语法
最终用户
词法 语义
图 7-6 Seeheim 模型
人机交互技术编写组 47
Seeheim模型
Seeheim模型基于对话独立性的概念,即
界面表现与应用通过一个控制单元实现
松散耦合
这一控制单元定义了界面表现与应用的
关系,传输运行时往来的数据和控制
Seeheim模型表明了人机交互中应该出现
的逻辑部件,这些部件有不同的功能及
不同的描述方法
人机交互技术编写组 48
表现部件
一般来说,表现部件处理用户界面的词法级内
容,将输入输出数据的内部表示转送给对话控
制部件。
表现部件负责人机交互的外部表现,
? 屏幕管理,如屏幕窗口大小布局等;
? 图形生成,如各种交互对象的绘制;
? 输入设备管理,如对键盘、鼠标等设备的管
理;
人机交互技术编写组 49
表现部件
表现部件负责人机交互的外部表现(续),
? 词法反馈,简单的与应用无关的信息反馈,
如简单的输入数据的错误检查;
? 交互技术,一些特殊的交互的技术,如橡皮
筋,网格,方向约束等;
? 将输入数据(或用户动作)转换成内部形式。
人机交互技术编写组 50
对话控制
对话控制部件是用户和应用程序之间的协调器,
控制两者对话的形式。
用户通过表现部件提出请求,这些请求及数据
的词法元素,经过对话控制部件的检验,传输
给应用程序中对应的例程;
应用程序将对请求的回答及其它新的数据请求
传输给表现部件的对应部分。
在对话控制中应维持一定的状态,以执行对输
入输出活动的控制或协调。
人机交互技术编写组 51
应用接口
应用接口部件是从界面的角度对应用程序的表
述,是为了实现界面和应用程序通讯而定义的
一组协议,
? 应用程序所维护的数据结构的描述(或数据
对象)。
? 界面可使用的与应用程序相关的过程或方法
? 应用程序的使用限制,它使界面可以检查输
入的语义合法性
人机交互技术编写组 52
三个部件的关系
在界面设计时,这三部分可对应于词法、语法及
语义阶段。
在表现部件和对话控制部件之间的信息流是输入
输出的词法元素,控制流则是对话控制部件在表现
部件上所施加的控制
表现部件 对话控制 应用接口 应用程序
语法
最终用户
词法 语义
图 7-6 Seeheim 模型
人机交互技术编写组 53
三个部件的关系
对话控制部件与应用接口间的信息流是有关输
入给应用的数据或从应用输出的数据,其控制
流则是有关状态的控制和协调。
对话控制部件主要在表示部件和应用接口之间
进行格式转换、控制状态的转换等。
人机交互技术编写组 54
Seeheim模型的优缺点
由于它基于对话独立性原则,因而能使界面设计的结
构比较清晰,适合界面与应用程序分别或并行执行。
但这种模型只是人机对话系统的一个, 执行, 模型,
并不能反映软件的整个生存期。
其次它对于直接操作的图形用户界面设计并不是很合
适,主要是因为直接操作需要一致的、连续的语义反
馈以及相应用户的动作。
Seeheim 模型没有显式的说明怎样由小的交互元素生
成大的复杂的元素。
人机交互技术编写组 55
Seeheim模型的改进
为了改进 Seeheim模型,可以将用户分成两部分,
? 交互对象库,其中交互对象库是一组界面元素及其操作
? 对话管理部件,话管理部件包括对话控制机制及数据类





交互对象库 对话管理部件



序 图 7-7 改进的 Seeheim模型
人机交互技术编写组 56
7.4.2 MVC模型及 Struts结构
MVC( model-view-controller)模型和实现
MVC模型的 Struts结构可以改进 Seeheim 模型
的缺点。
MVC模型最初是在 Smalltalk-80中被用来构建
用户界面的,是目前广泛流行的一种软件设计
模式。
在 J2EE应用体系结构中,MVC主要适用于交互
式的 Web应用,尤其是存在大量页面及多次客
户访问及数据显示。
人机交互技术编写组 57
1,MVC模型
MVC把一个应用的输入、处理、输出流
程按照 模型 (model)、视图( View)和
控制( Controller)的 方式进行分离,形
成模型层、视图层、控制层三个层次。
人机交互技术编写组 58
1,MVC模型
模型
视图
控制
用户
显示
键盘
鼠标
图 7-8 MVC模型
人机交互技术编写组 59
模型 (model)
模型 负责业务流程 /状态的处理以及业务规则
的制定
? 业务流程的处理过程对其它层来说是透明的, 模型
接受视图请求的数据, 并返回最终的处理结果 。
? 业务模型的设计可以说是 MVC最主要的核心, 模型
包含完成任务所需要的所有的行为和数据 。
? MVC并没有提供模型的设计方法, 而只告诉你应该
组织管理这些模型, 以便于模型的重构和提高重用
性 。
人机交互技术编写组 60
视图( View)
视图 代表用户交互界面,对于 Web应用来说,
可以概括为 HTML界面,但有可能为 XHTML、
XML和 Applet。
? 一个应用可能有很多不同的视图,MVC设计模式对
于视图的处理仅限于视图上数据的采集和处理,以
及用户的请求,而不包括在视图上的业务流程的处
理。
? 业务流程的处理交给模型( Model)处理。
? 如一个订单的视图只接受来自模型的数据并显示给
用户,以及将用户界面的输入数据和请求传递给控
制和模型。
人机交互技术编写组 61
控制( Controller)
控制器将模型映射到界面中,处理用户
的输入,每个界面有一个控制器。
? 是一个接收用户输入、创建或修改适当的模型对象
并且将修改在界面中体现出来的状态机。
? 在需要时还负责创建其它的界面和控制器。
? 决定哪些界面和模型组件在某个给定的时刻应该是
活动的,负责接收和处理用户的输入,来自用户输
入的任何变化都被从控制器送到模型 。
人机交互技术编写组 62
MVC的目的
MVC的目的是增加代码的重用率,减少
数据表达、数据描述和应用操作的耦合
度。
使得软件可维护性,可修复性,可扩展
性,灵活性以及封装性大大提高。
由于数据和应用的分开,在新的数据源
加入和数据显示变化的时候,数据处理
也会变得更简单。
人机交互技术编写组 63
MVC的优点
可以为一个模型在运行时同时建立和使用多个
视图
视图与控制器的可接插性,允许更换视图和控
制器对象,而且可以根据需求动态地打开或关
闭、甚至在运行期间进行对象替换
模型的可移植性,因为模型是独立于视图的,
所以可以把一个模型独立地移植到新的平台工

人机交互技术编写组 64
MVC模型的不足
增加了系统结构和实现的复杂性。
? 对于简单的界面,严格遵循 MVC,使模型、视图与
控制器分离,会增加结构的复杂性,并可能产生过
多的更新操作,降低运行效率
视图与控制器间的过于紧密的连接。
? 视图与控制器是相互分离、但又确实联系紧密的部
件,视图没有控制器的存在,其应用是很有限的
视图对模型数据的低效率访问。
? 依据模型操作接口的不同,视图可能需要多次调用
才能获得足够的显示数据
人机交互技术编写组 65
2,Struts结构
Struts的体系结构实现了 MVC模式的概念,
它将这些概念映射到 web应用程序的组件
和概念中。
人机交互技术编写组 66
Struts结构
Sruts-config.xml
控制器
Servlet
视图
Jsp
客户浏览器
商业逻辑
行为
模型请求
状态
事件
HTTP
请求
HTTP
请求
前进
发送
收到
<标签 >
更新
人机交互技术编写组 67
Struts结构对 MVC模型的实现
视图( View) ―― JSP页面和表示组件
? 基于 Struts的应用程序中的视图部分通常使
用 JSP技术来构建。
? 每一视图都是采用了定制标签库的 JSP页面,
这些定制标签库由 Struts Framework提供。
? 全部表单元素都是用定制标签编码的,所以
这些页面能够很方便地同控制器进行交互
? 每个表单都通过映射 JSP到 servlet的请求这
一方式指向控制器的特定入口点。
人机交互技术编写组 68
Struts结构对 MVC模型的实现
控制器( Controller) ―― ActionServlet和
ActionMapping
? 应用程序的控制器从客户端接收请求,决定执行什
么业务逻辑,然后将产生下一步用户界面的责任委
派给一个适当的视图组件。
? 在 Struts中,控制器的基本组件是 ActionServlet类的
servlet。这个 servlet通过定义一组映射(由 Java接
口 ActionMapping描述)来配置。
? 每个映射定义一个与所请求的 URI相匹配的路径和
一个 Action类(一个实现 Action接口的类)完整的
类名,这个类负责执行预期的逻辑,然后将控制分
派给适当的视图组件来创建响应。
人机交互技术编写组 69
Struts结构对 MVC模型的实现
模型( model) ―― 系统状态和商业逻辑
JavaBeans
? 在 struts中,模型分为两个部分:系统的内
部状态、可以改变状态的操作(事务逻辑)。
内部状态通常由一组 ActinForm JavaBean表
示。
? 根据设计或应用程序复杂度的不同,这些
Bean可以是自包含的并具有持续的状态,或
只在需要时从某个数据库获得数据。
人机交互技术编写组 70
Struts的特点
Struts是开放源代码的软件, 开发者能更深入
的了解其内部实现机制 。
Struts的优点主要集中体现在两个方面,
? Taglib,Taglib是 Struts的标记库, 灵活使用, 能大
大提高开发效率 。
? 页面导航:通过一个配置文件, 可把握整个系统各
部分之间的联系描述出来, 这对于后期的维护很有
好处 。
Struts已逐步越来越多运用于商业软件,是一
种非常优秀的 J2EE MVC实现方式。
Data
Data
Data Database
Vi
Read
Dispatch
Database Access
Business Logic
LoginBO.java
LoginDAO.java
LoginAction
Struts-config
HTTP
Forword
Login.jsp
LoginAc
Success.java
struts演示的基本构架和数据流程
人机交互技术编写组 72
7.4.3 E-O模型
E-O模型的事件、对象类型的类型和组织
方式
介绍基于 E-O模型的软件结构。
人机交互技术编写组 73
E-O模型的逻辑结构
图 7-10 E-O模型的逻辑结构
应用
应用接口 API
事件 - 目标管理子系统
事件管理子系统( EMS) 目标管理子系统( OMS)
设备管理(驱动)模块( DMM)
用户
人机交互技术编写组 74
E-O模型组成
设备管理模块( Device Management Module,
DMM)
? 提供于各种交互设备的接口,并实现设备无关特性
事件管理子程序( Event Management
Subsystem,EMS)
? 读取输入设备的输入信息形成事件并进行统一的管
理,
? 将反馈信息的事件解释为适当的输出指令并传给输
出设备
对象管理子系统( Object Management
Subsystem,OMS)
? 创建、装载、保护用户界面中各类对象,并对对象
进行管理
人机交互技术编写组 75
E-O模型组成
事件-对象管理子系统( Event-Object
Management Subsystem,EOMS)
? 实现事件目标的整合,按适当的策略控制事
件在各目标节点的流动,以形成和维持人机
交互的过程,是整个用户界面系统的核心
表单 UIMS对鼠标事件的响应
用户点击了一下鼠标后, 表单 UIMS就获得了用户的鼠标动作和鼠标在屏幕上的一个坐标 (x,y)。
对每个表单 {
if (坐标落在了某个表单区域内部 ) {
显示该表单及表单内包含的所有界面元素, 其余表单按照原来的先后顺序排列;
对表单内的每个的单位界面元素 {
if (坐标落在了某个单位界面元素的区域内部 ) then {
聚焦单位界面元素;
if (选中的单位界面元素添加了特定鼠标事件的响应 ) then {
将控制权交给单位界面元素交互对象, 执行该事件要执行的任务, 返回;
}
}
}
if (选中的表单添加了特定鼠标事件的响应 ) then {
将控制权交给表单交互对象, 执行该事件要执行的任务, 返回;
}
}
所有表单失去焦点, 聚焦到系统要显示的默认界面;
}
A
B
By
Bx
Am
An
人机交互技术编写组 77
智能体( Agent)
智能体 的组成
? 事件接收单元:负责事件的接收;
? 事件发送单元:负责事件的发送;
? 记忆单元:维持智能体内部的状态;
? 处理单元:周而复始地处理输入事件、更新状态、
产生新的事件或改变它所感兴趣的输入事件类型
智能体特征
? 自发性( Autonomy):能控制其内部状态,产生
用来实现目标的行为
? 通信性( Communicability):智能体之间可以进行
信息交换
? 反应性( Reactivity):可感知并影响其周围环境
? 协作性( Cooperation):可与其他智能体合作共同
完成一项任务
人机交互技术编写组 78
智能体的分类
认知型智能体( Cognitive Agent)
? 具有丰富的推断和决定能力及类人的思维能力
反应型智能体( Reactive Agent)
? User Agents
? Agent Guides
? Automous Agents
? Anthropomorphic Agents
? Multi-agent Systems
人机交互技术编写组 79
用智能体方法解决任务的特点
适应性( Adapting),具有一定的适应性和灵活性,
可针对不同用户的特点动态改变其表现来, 投其所好,
探究性( Researching),任务可以非精确的制定,可
以从模糊输入中寻求解决问题的答案
演示性( Demonstrating),需要通过实际演示来传授
用户知识
自发性( Autonomy),任务本身不必要频繁地与用户
交互,很适合于授权执行
异步性( Asynchrony),由于处理时间和网络延迟等
因素,任务的发起到完成之间有一定的时间延迟
人机交互技术编写组 80
Agent的实现
面向智能体的编程实际上就是面向对象
编程的扩展
? 智能体本身就可以看作是一种对象
? 智能体结构中的思维状态和信念可以看作对
象中的数据
? 能力可以看作对象的中的方法
? 承诺是与人工智能相关的新内容
人机交互技术编写组 81
PAC模型
抽象面 表现面
控制面
用户
交互系统经常被视为一个协作智能体的集合
负责人机交互的智能体接受用户的输入并显示数据
其他的智能体维护系统的数据模型并提供对这些数据
进行操作的功能
附加的智能体负责诸如错误处理或同其他软件系统的
通信的任务
人机交互技术编写组 82
PAC智能体树状层次结构
底层 PAC agent
中间层 PAC agent
顶层 PAC agent
数据仓库
存储数据
电子数据

试图协调程

饼图 直方图 位置分布
人机交互技术编写组 83
PAC智能体树状层次结构
顶层 PAC智能体
? 提供系统的核心功能
? 主要职责是提供软件的全局数据模型
? 顶层 PAC智能体的控制组件三个职责
? 允许底层智能体使用顶层智能体的服务
? 协调 PAC agent的层次
? 保存了用户与系统的交互信息
中层 PAC智能体
? 表达了底层智能体的组合或底层智能体之间的关系
? 维护底层智能体间的一致性
人机交互技术编写组 84
PAC智能体树状层次结构
底层 PAC智能体
? 描绘了应用领域的一个具体语义
? 底层 PAC agent的抽象组件同顶层 PAC agent的抽象
组件具有相似的职责
? 底层 PAC agent的控制组件维护抽象组件和表示组
件的一致性
? 底层 PAC智能体的控制组件与较高层智能体通信以
交换事件和数据
? 底层 PAC智能体并不局限于仅提供应用领域的语义,
也可以指定底层智能体来实现系统服务
人机交互技术编写组 85
实现 步骤
( 1) 定义一个应用模型
( 2)为组织 PAC层次定义一般策略
( 3)明确说明高层 PAC智能体
( 4)明确说明底层 PAC智能体
( 5)明确说明系统服务的底层 PAC智能体
( 6)明确说明组成低层 PAC智能体的中间层 PAC智能体
( 7) 明确说明与较低层 PAC智能体协作的中间层 PAC
智能体
( 8) 从人机交互分离出核心功能
( 9) 提供外部接口
( 10) 将各层次连接起来
人机交互技术编写组 86
讨论
优点
? 事务分离,应用领域的不同语义分别用独立的智能
体表示
? 支持变化和扩展,一个 PAC智能体的表示组件或抽
象组件的变化不影响系统中的其他智能体
? 新的智能体可以容易地集成到一个现存的 PAC体系
结构中而无需对现存的 PAC智能体做太多的改变
? 支持多任务,PAC智能体可以容易地分配到不同的
线程、进程或机器上
人机交互技术编写组 87
讨论
不足
? 增加了系统复杂性, 一个应用程序中的每个语义都
作为它自己的 PAC智能体来实现,可能导致一个复
杂的系统结构
? 复杂的控制组件,在一个 PAC系统中,控制组件是
一个智能体的抽象组件和表示组件之间的通信媒介,
也是不同的 PAC智能体之间的通信媒介
? PAC智能体之间的通信开销可能会影响系统效率
? 可应用性,应用程序的原子语义越小,那么它们用
户接口的相似性就越多,该模式可用性方面就越差
人机交互技术编写组 88
课堂练习
语义反馈性和对话独立性的含义是什么?
用户为中心的设计原则有哪些?
利用产生式描述如下交互,
? 用户选择画线命令后,单击鼠标定义起始点,按住
鼠标左键,拖动鼠标,抬起鼠标左键即为定义了终
止点,画出直线。拖动鼠标过程中要求有橡皮筋出
现。
人机交互技术编写组 89
课堂练习
1.UIMS中的 交互元素有哪些?它们的表
示方式有哪些?
2窗口系统的服务器端有什么组成,?