人机交互技术编写组 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窗口系统的服务器端有什么组成,?
第 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窗口系统的服务器端有什么组成,?