人机交互 第7章 软件结构与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

人机交互技术编写组
9
1.应用程序内部事件处理循环
客户应用程序 开始
读输入
过程输入 退出?
服务器
设备
结束 图7-2事件处理循环
人机交互技术编写组 10
事件处理循环的程序代码
while(1){ read_event(myevent); switch(myevent.type){ case type_1: do_type1_process();
人机交互技术编写组 23
交互对象和交互系统开发软件包的特性
这些组件可以被定义为一类交互对象, 这类交互对象可以在一个应用中多次激 活,不同的实例可以有微小的区别。 复杂的交互对象可以由简单的交互对象 构建。 实例和继承是面向对象程序设计的基石, 类可以看作交互对象的模板。
人机交互技术编写组 24
交互系统开发软件包的面向对象特性
人机交互技术编写组 16
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) {}
图7-4 Quit.java运行结果
人机交互技术编写组 18
7.2交互系统开发软件包
一般的窗口系统,输入和显示是分离的。 交互系统开发软件包在支持窗口管理的基础上增加 了另一种抽象,它把输入和输出的行为结合起来。 从用户角度讲,图形用户界面 WIMP 非常重要的特征 就是将输入和输出行为与屏幕上的一个独立的对象连 接在一起。 鼠标自硬件设备的输入(鼠标的移动)与显示屏上鼠 标的输出(小的箭头光标或窗口内坐标的位置)是分 离的。 屏幕上光标的移动和鼠标的物理运动密切相关,即当 鼠标在桌面上移动时,屏幕上的光标也跟着移动。
人机交互技术编写组
3
7.1窗口系统
窗口系统为单一输入输出设备建立多个抽象设 备来实现其资源的共享。每个抽象设备都可看 作一个窗口的独立的输入输出设备,窗口系统 为这些设备提供并发控制。从应用的角度看, 每个应用程序独立地对设备进行操作,另一方 面,窗口系统还为每个窗口提供一个抽象显示 设备,这可以通过为每个活动的抽象显示设备 建立一个窗口来实现。 设备独立性和多任务管理是窗口系统的最重要 的两个特性。
动作*/
/* 处理对应事件 1 的
case type_2: … case type_n: } }
break; do_type2_process(); break;
do_typen_process(); break;
人机交互技术编写组
11
2.事件注册方式
窗口系统为每一个应用程序建立一个事件处 理中心,事件处理中心负责事件的处理。应 用程序将自己感兴趣的事件处理事先通过登 记注册的方式通知事件处理中心,注册时同 时告诉事件处理中心当事件产生时,应用程 序需要进行的处理(回应过程)。 当事件处理中心从窗口系统接收一个事件, 分析这个事件属于哪个应用程序,然后把事 件和控制转向该事件注册的回应过程,处理 完后,回应过程把控制返还给事件处理中心, 事件中心继续接收事件或者请求终止。
视觉上的光标与物理的设备都称为“鼠标” 。
人机交互技术编写组 19
交互系统开发软件包
图7-5说明了如何将输入和输出通过一个按钮 联系在一起。 当用户移动鼠标到按钮时,屏幕的光标变换形 状,提示用户可以单击鼠标,以选中按钮,如 果此时用户按鼠标上的按键,屏幕上的按钮变 亮,就像按下键盘上的某些键一样,让用户感 到确实按下了屏幕上的按钮,释放鼠标键,屏 幕上的按钮变暗,就像真正释放屏幕上的按钮。
设备驱动程序

负责外部设备的驱动,接受输入设备的输入,并将 输入数据转换成统一的格式,通过设备驱动程序实 现设备的独立性 。
负责和客户应用程序的接口,对每个应用程序由窗 口管理程序为其分配一个抽象终端。
抽象终端

人机交互技术编写组
7
工作方式
当外部设备产生一个输入请求,如鼠标单击某 一个窗口内的一点,资源管理程序从设备驱动 程序获得鼠标数据,产生鼠标驱动事件,并将 该事件分发给与该窗口相对应的抽象终端,与 抽象终端相对应的应用程序接受事件并进行相 应的处理。 实现时,客户程序和服务器程序可以在一台机 器上,也可以分布在不同的机器上。
人机交互技术编写组 12
应用程序 开始 向通知者注册回调函数 启动通知者 结束 处理事件
通知者
读输入
发送给正确的回调函数
否 请求回应 退出? 是
图7-3 事件注册方式处理流程图
人机交互技术编写组 13
2.事件注册方式
这种方式的好处是一般应用程序不需要设计 事件处理循环,只关心应用程序需要处理哪 些交互事件,当事件发生时应用程序如何处 理。当应用程序不需要处理某个事件时,应 用程序还可以随时取消注册。因为只处理注 册的事件,事件处理中心处理事件的效率相 对比较高。Java语言中图形界面的交互就是采 用的这种事件注册方式,下面的程序清单7-2 说明了应用程序如何通知注册事件,事件处 理中心通过什么方式调用应用程序的回调函 数。
包括E-O模型 Seeheim模型 MVC模型 智能体模型
用户界面管理系统UIMS

支持复杂人机交互系统的实现的软件体系结构



人机交互技术编写组
2
7.1窗口系统
窗口系统强调为程序员提供硬件设备独立性, 交互系统的实现建立在一个抽象的设备上,对 抽象设备的操作通过设备驱动程序转换成具体 的设备上的操作,这可以使交互系统的开发变 得简单,也使交互系统的移植非常方便。
人机交互技术编写组
8
7.1.2设计交互应用程序
在客户/服务器结构中,交互系统的应用程序 通过调用服务器端一个独立的管理程序来管理 多任务和提供设备的独立性,相当于客户-服务 器中结构中的客户。 交互应用一般来讲是由用户驱动的,即用户从 外部设备上输入数据,应用程序的动作由用户 输入来决定,应用程序可以采用下面的两种控 制流程实现用户的交互。
人机交互技术编写组
20
单击 按钮 按钮 按钮 按钮 按钮
移动
单击
释放
移动
图7-5 按钮交互对象行为
人机交互技术编写组
21
输入和输出的融合
一般来说,窗口系统提供了上述简单的输入和输出的 融合,复杂情况下输入输出的融合需要程序员来实现。 为了帮助程序员实现输入和输出融合,需要在窗口系 统之上,提供更高层的对交互系统实现的支持——交 互系统开发软件包。 交互系统开发软件包为程序员提供一组已经定义好的 交互对象,也称为交互界面元素或窗口组件,程序员 可以使用这些组件编写自己的应用程序。 交互对象有预先定义好的行为,用户可以根据自己的 需要选择使用。
人机交互技术编写组 4
7.1.1窗口系统结构
窗口系统一般有三种结构:



在各个应用程序内部实现和管理多任务,由于每个 应用程序都需要处理复杂的多任务管理,并且移植 起来不方便。 在操作系统核心集中处理多任务管理,应用程序不 再对多任务进行管理,由于过分的依赖操作系统, 应用程序需要处理因操作系统的不同而引起的差异。 多任务的管理可由独立的管理程序进行管理,应用 程序通过调用该管理程序提供的接口来实现对多任 务的管理和设备的独立性操作,该管理程序可以在 不同的操作系统下运行,因而基于此管理程序开发 的交互系统是最容易移植的。
人机交互技术编写组 5
一种客户/服务器结构
客户 客户应用程序 抽象终端 客户应用程序 抽象终端 资源管理器 设备驱动程序 ﹒﹒﹒ ﹒﹒﹒ 窗口n 客户应用程序 抽象终端
服务器
设备
鼠标
窗口1
窗口2
键盘
图7-1 客户/服务器结构
人机交互技术编写组 6
服务器端运行的三部分程序
资源管理器

是整个窗口系统的核心,负责多任务的管理,并通 过设备驱动程序来管理外部设备 。
}
public static void main(String args[]) { Quit f = new Quit(); f.setBounds(100,100,200,70); f.setVisible(true); } }
人机交互技术编写组 17
2.事件注册方式
在上面的程序中,当应用程序创建窗口对象时,通 过 addWindowListener 方法通知事件处理中心该应 用程序需要处理窗口关闭事件,并且当用户用鼠标 器单击窗口右上角的小关闭按钮时,事件处理程序 会自动调用ProgramTerminator的一个方法,结束当 前的应用程序,在该程序中还用到了交互系统开发软 件包中的交互对象Button,在7.2节中将仔细讨论交 互系统开发软件包, 图7-4说明了程序初始的显示 画面。
交互系统开发软件包是面向对象的,但这并不 意味着开发的应用程序所需要的语言必须支持 面向对象的概念,也可以使用非面向对象的程 序设计语言。 程序员通过设置不同的实例属性的值来调整交 互对象的行为和外观,这些属性可以在实例程 序编译之前设置,如在程序Quit.java中两个按 钮交互对象cancelButton 和 okButton,这些按 钮的显示文本在程序编译时已经设定。
Байду номын сангаас15
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); }
第7章 软件结构与实现
人机交互技术编写组
1
内容提要
窗口系统对交互系统实现的支持

窗口系统提供设备独立性和资源的共享,在窗口系统,程序 员不用担心输入和输出设备的初始化,应用程序从窗口系统 管理器接收事件请求流,完成相应的交互操作。 UIMS是抽象层次更高的支持交互系统实现的开发环境,为交 互系统实现提供更高层支持。
人机交互技术编写组 22
对象之间的关系
为了提供交互对象灵活性,交互对象可以 根据用户的需要进行定制,程序员可以根 据自己特殊的要求调用交互对象。 例如:当创建一个特别的按钮时,按钮上 的标签可以是程序员设置的一个参数. 较复杂的交互对象可以由较小的、简单的 对象构建,整个应用可以看作是一组交互 对象的集合,这些对象存在着一定的关系, 交互对象的行为描述了整个应用的语义。
人机交互技术编写组 14
程序清单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); } 人机交互技术编写组
相关文档
最新文档