当前位置:文档之家› 人机交互 第7章 软件结构与实现

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


图7-4 Quit.java运行结果
人机交互技术编写组 18
7.2交互系统开发软件包
一般的窗口系统,输入和显示是分离的。 交互系统开发软件包在支持窗口管理的基础上增加 了另一种抽象,它把输入和输出的行为结合起来。 从用户角度讲,图形用户界面 WIMP 非常重要的特征 就是将输入和输出行为与屏幕上的一个独立的对象连 接在一起。 鼠标自硬件设备的输入(鼠标的移动)与显示屏上鼠 标的输出(小的箭头光标或窗口内坐标的位置)是分 离的。 屏幕上光标的移动和鼠标的物理运动密切相关,即当 鼠标在桌面上移动时,屏幕上的光标也跟着移动。
人机交互技术编写组 23
交互对象和交互系统开发软件包的特性
这些组件可以被定义为一类交互对象, 这类交互对象可以在一个应用中多次激 活,不同的实例可以有微小的区别。 复杂的交互对象可以由简单的交互对象 构建。 实例和继承是面向对象程序设计的基石, 类可以看作交互对象的模板。
人机交互技术编写
人机交互技术编写组 22
对象之间的关系
为了提供交互对象灵活性,交互对象可以 根据用户的需要进行定制,程序员可以根 据自己特殊的要求调用交互对象。 例如:当创建一个特别的按钮时,按钮上 的标签可以是程序员设置的一个参数. 较复杂的交互对象可以由较小的、简单的 对象构建,整个应用可以看作是一组交互 对象的集合,这些对象存在着一定的关系, 交互对象的行为描述了整个应用的语义。
人机交互技术编写组 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) {}
人机交互技术编写组
9
1.应用程序内部事件处理循环
客户应用程序 开始
读输入
过程输入 退出?
服务器
设备
结束 图7-2事件处理循环
人机交互技术编写组 10
事件处理循环的程序代码
while(1){ read_event(myevent); switch(myevent.type){ case type_1: do_type1_process();
动作*/
/* 处理对应事件 1 的
case type_2: … case type_n: } }
break; do_type2_process(); break;
do_typen_process(); break;
人机交互技术编写组
11
2.事件注册方式
窗口系统为每一个应用程序建立一个事件处 理中心,事件处理中心负责事件的处理。应 用程序将自己感兴趣的事件处理事先通过登 记注册的方式通知事件处理中心,注册时同 时告诉事件处理中心当事件产生时,应用程 序需要进行的处理(回应过程)。 当事件处理中心从窗口系统接收一个事件, 分析这个事件属于哪个应用程序,然后把事 件和控制转向该事件注册的回应过程,处理 完后,回应过程把控制返还给事件处理中心, 事件中心继续接收事件或者请求终止。
人机交互技术编写组 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); } 人机交互技术编写组
人机交互技术编写组 12
应用程序 开始 向通知者注册回调函数 启动通知者 结束 处理事件
通知者
读输入
发送给正确的回调函数
否 请求回应 退出? 是
图7-3 事件注册方式处理流程图
人机交互技术编写组 13
2.事件注册方式
这种方式的好处是一般应用程序不需要设计 事件处理循环,只关心应用程序需要处理哪 些交互事件,当事件发生时应用程序如何处 理。当应用程序不需要处理某个事件时,应 用程序还可以随时取消注册。因为只处理注 册的事件,事件处理中心处理事件的效率相 对比较高。Java语言中图形界面的交互就是采 用的这种事件注册方式,下面的程序清单7-2 说明了应用程序如何通知注册事件,事件处 理中心通过什么方式调用应用程序的回调函 数。
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是抽象层次更高的支持交互系统实现的开发环境,为交 互系统实现提供更高层支持。
人机交互技术编写组
8
7.1.2设计交互应用程序
在客户/服务器结构中,交互系统的应用程序 通过调用服务器端一个独立的管理程序来管理 多任务和提供设备的独立性,相当于客户-服务 器中结构中的客户。 交互应用一般来讲是由用户驱动的,即用户从 外部设备上输入数据,应用程序的动作由用户 输入来决定,应用程序可以采用下面的两种控 制流程实现用户的交互。
人机交互技术编写组 5
一种客户/服务器结构
客户 客户应用程序 抽象终端 客户应用程序 抽象终端 资源管理器 设备驱动程序 ﹒﹒﹒ ﹒﹒﹒ 窗口n 客户应用程序 抽象终端
服务器
设备
鼠标
窗口1
窗口2
键盘
图7-1 客户/服务器结构
人机交互技术编写组 6
服务器端运行的三部分程序
资源管理器

是整个窗口系统的核心,负责多任务的管理,并通 过设备驱动程序来管理外部设备 。
设备驱动程序

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

人机交互技术编写组
7
工作方式
当外部设备产生一个输入请求,如鼠标单击某 一个窗口内的一点,资源管理程序从设备驱动 程序获得鼠标数据,产生鼠标驱动事件,并将 该事件分发给与该窗口相对应的抽象终端,与 抽象终端相对应的应用程序接受事件并进行相 应的处理。 实现时,客户程序和服务器程序可以在一台机 器上,也可以分布在不同的机器上。
人机交互技术编写组 4
7.1.1窗口系统结构
窗口系统一般有三种结构:



在各个应用程序内部实现和管理多任务,由于每个 应用程序都需要处理复杂的多任务管理,并且移植 起来不方便。 在操作系统核心集中处理多任务管理,应用程序不 再对多任务进行管理,由于过分的依赖操作系统, 应用程序需要处理因操作系统的不同而引起的差异。 多任务的管理可由独立的管理程序进行管理,应用 程序通过调用该管理程序提供的接口来实现对多任 务的管理和设备的独立性操作,该管理程序可以在 不同的操作系统下运行,因而基于此管理程序开发 的交互系统是最容易移植的。
包括E-O模型 Seeheim模型 MVC模型 智能体模型
用户界面管理系统UIMS

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



人机交互技术编写组
2
7.1窗口系统
窗口系统强调为程序员提供硬件设备独立性, 交互系统的实现建立在一个抽象的设备上,对 抽象设备的操作通过设备驱动程序转换成具体 的设备上的操作,这可以使交互系统的开发变 得简单,也使交互系统的移植非常方便。
视觉上的光标与物理的设备都称为“鼠标” 。
人机交互技术编写组 19
交互系统开发软件包
图7-5说明了如何将输入和输出通过一个按钮 联系在一起。 当用户移动鼠标到按钮时,屏幕的光标变换形 状,提示用户可以单击鼠标,以选中按钮,如 果此时用户按鼠标上的按键,屏幕上的按钮变 亮,就像按下键盘上的某些键一样,让用户感 到确实按下了屏幕上的按钮,释放鼠标键,屏 幕上的按钮变暗,就像真正释放屏幕上的按钮。
相关主题