标题：人机交互系统
总体概述
在计算机技术发展的初期，由于系统的运行速度慢、价格昂贵并且可靠性差， 不可能进行交互使用，用户必须调整自己的行为去适应机器的要求。因此，与计 算机使用中的其它问题相比，界面只是一个小问题。随着计算机性能的提高，系 统能够用一部分资源来处理人－计算机界面，用户界面设计开始引起人们的注意。 
用户界面的发展对计算机系统整体性能的提高所具有的重要性已经得到了人 们的高度重视，与此同时，围绕人机建模业已形成了计算机产业又一新的竞争领 域。在美国人机建模研究在信息技术中被列为与软件和计算机并列的六项国家关 键技术之一，并被认为“对于计算机工业有着突出的重要性，对其它工业也是很 重要的”。美国国防关键技术计划不仅把人机交互界面列为软件技术发展的重要 内容之一，而且还专门增加了与软件技术并列的人－系统界面一项内容。日本也 提出了FPIEND21计划（Future Personalized Information Enviroment Develop- ment)，其目标就是要开发21世界的计算机界面。 
我国在人机界面方面的设计与国际同类研究相比还存在较大差距。目前的研 究仅仅着重于支持界面的软件和硬件，对界面本身还缺少深入的研究，用户界面 的设计还没有成为软件设计中独立的一部分，也缺少新的人机界面设计技术。而 另一方面，计算机科学的发展和计算机的普及应用却对人机界面的研究提出了越 来越高的要求。 
进入九十年代计算机软件开发已进入了以开发软件工具和建立软件开发环境 为目标的时代。作为支持人机交互软件开发环境的用户界面管理系统UIMS正日益 受到人们的关注和重视。今后UIMS将有可能进入各类实际软件开发环境，成为继 DBMS之后的又一个重要的软件开发环境和工具。
关键技术
软件界面是人－机之间的信息界面，从某种意义上讲，它比硬件和工作环境 更为重要。优化软件界面就是要合理设计和管理人－ 机对话的结构。对话的结构 设计一般可分为初始设计、形式评价和总结评价三个阶段。 
2.1人类工程学
人类工程学是一门应用广泛的综合性边缘学科，作为一门独立的学科，人类 工程学在我国的历史还很短，我国的心理学家、人类学家、劳动保护和医学工作 者、机械工程师正结合自己的领域，开展这方面的工作。 
（1）人类工程学中人的特性 
人在系统中是主体，任何先进的机器都是由人设计的，由人操纵的，所以系 统工作效率的优劣、安全性，很大程度上决定于人的工作状况。人类工程学中要 研究人对外界信息的感知特性，人对信息的加工、处理及思维能力，人的学习、 记忆特性，人的自身节率等等。 
1) 人的感觉功能 
a. 视觉 人们通过视觉器官认识外界事物，由大脑产生正确的思考，视觉 对劳动的产量、质量及安全均有影响，还影响到劳动者的心理活动过程。 
b. 听觉 人耳对声音响度的感觉主要是和声强有关。人接受听觉信息要比 接受视觉信息快。据测定，人的听觉反应时间约为120－150ms，较光信息快30－ 50ms。听觉信号常用于报警。 
c. 触觉等 人们通过触觉器官接受物体的空间位置、形状、表面情况和原 材料等信息。 
2) 人的信息处理及输出特性 
a. 人的反应时间 操作者在操纵、监视设备时，从出现信号刺激到采取相 应动作，存在一个反应时间。人体的运动系统反应速度比较缓慢，神经肌肉接头 的反应延迟时间为0.1－0.2s. 
b. 人的信息传输 信息在神经系统中的传输，是由不同的感觉通道，传输 不同的信息，如视觉系统的单个神经纤维能传输不同的颜色信息，信息的传输速 率是一个重要的物理量。 
3) 人机分工 
设计人机交互界面，进行人机分工时，要充分发挥人机的各自特点。可采用 最大最小原则，即人承担的工作量应尽量少或最少，机器承担的工作量应最大， 在最大限度利用机器的同时，充分发挥人的积极因素。人机结合并充分注意人的 主导地位，将有效地保证系统的可靠性和寿命。 
（2）计算机辅助设计和计算机图形学中的人的因素 
利用CAD技术并结合CAM技术可以大大缩短产品的设计－制造周期，CAD已经 成为制造业中求生存的一种主要手段。CAD中主要的人的因素问题有：CAD硬件中 的图形终端、输入装置和菜单设计，CAD系统中人的信息加工能力，如有关CAD显 示的视觉、CAD中的空间推理、CAD中的问题解决及运动反应等过程；CAD系统中 人机功能分配；CAD系统中的工作设计、人员选拔和训练等。 
（3）计算机辅助制造中的人的因素 
CAM可被广义地认为是在制造业的管理、控制和运行中有效地应用计算机的一 项新技术，其最终目标是要建成CIMS，它将是一项在21世纪最具竞争力的技术。 认知工程学在CAM领域的主要研究内容：自动化与工作分片、CAM中的人的决策和 自动化制造中人的监控。 
2.2 人机界面设计原则
（1）媒体最佳组合 
媒体界面的成功并不在于仅向用户提供丰富的媒体，而应在了解媒体的功能、 选择方法的基础上，在相关理论的指导下，在语义层上将各种媒体有机地结合起 来以更有效地传递信息。 
（2）界面分析与规范 
在人机界面设计中，首先应进行界面设计分析，即收集有关用户及其应用环 境信息以后，进行用户特性分析，用户任务分析，记录用户有关系统的概念、术 语，这项工作可与应用系统分析结合进行。分析任务中对界面设计要有界面规范 说明，选择界面设计类型，并确定设计的主要组成部分。 
由于人机界面是为适合人的需要而建立的，所以要清楚使用该界面用户的类 型，要了解用户使用系统的频率、用途及对用户的综合知识和智力的测试，这些 均是用户设计中的内容。在此基础上产生任务规范说明，进行任务设计。任务设 计的目的在于重新组织任务规范说明以产生一个更有逻辑性的编排。设计应精心 地分别给出人与计算机的活动，使设计者较好地理解在设计一个界面时所遇到的 问题，这样形成系统操作手册、训练文件和用户指南的基础。在考虑用户工作方 式及系统环境和支持等因素下，精心任务设计。 
任务确定之后，要决定界面类型。目前有多种人机界面设计类型，各有不同的 品质和性能，因此设计者要了解每种类型的优点和限制。大多数界面使用一种以 上的设计类型。下表列出了常用界面类型的优缺点。 表1
3.图标：用图像代表功能 
非常容易学，易用（鼠标操作〕，语言独立性强，编程较容易 占具屏幕可观的空间，表达抽象概念描述力差，需文字解释，需图形硬件和软件支持 初学者。有形成国际会话语言的趋势 
4.表格填写 使用速度快、易用、容易掌握 仅适合于数据输入，不高级 数据录入中用得最广泛的会话类型，用于显示和恢复界面，编辑初始界面 
5.命令语言（单字命令到复杂语法的命令〕 使用功能强，灵活，是界面可控制系统的高级方法，对屏幕空间使用十分经济 学习困难（学习代码和语言条款〕，用户需要系统功能的某些知识，使用困难，研究 该界面工作量大 会使用复杂命令界面的熟练用户，用户发起和控制的对话 
6.自然语言 自然的交流 难于编程实现，语言识别困难，会出现二义性，输入慢 在有限制的问题中使用，可用于用户发出的会话 
2.3菜单屏幕设计的一些准则
（1）按任务语义来组织菜单（单一菜单、线状序列、树状结构、非循环和循环 的网络结构〕； 
（2）广而浅的菜单树优先于窄而浅的菜单树； 
（3）用图形、数字或标题来显示位置； 
（4）用选项名称来作树的标题； 
（5）根据含义将选项分组； 
（6）根据含义将选项排序； 
（7）选项力求简短，以关键词开始； 
（8）语法、布局、用词前后一致； 
（9）允许超前键入、超前跳转或其它捷径； 
（10）允许跳转到前层的菜单和主菜单； 
（11）考虑联机求助、新颖选择机制、响应时间、显示速率和屏幕尺寸。 
2.4 错误处理
在一个交互系统中，由于操作者的个人原因，经常会产生误操作，包括键入错误、 数据输入错误等。同样，在用户编制的程序或设备连接时也可能会有错误。 一个好的交互系统不能要求操作者不犯错误，但应该具有较强的处置各种错误的能力， 除了在软件设计时注意各种容错机制、鲁棒性技术及各种诊断措施以外，在计算机用 户界面上应提供各种避免用户操作错误的提示及各种错误信息的分析。 
（1）错误输入 
1）数据录入错误 
在各类数据处理软件中，数据录入的错误是经常发生的薄弱环节，为了减少用户 在录入时的错误，应采用一系列措施。 
a. 对用户输入在屏幕上予以“回答”； 
b. 对用户在屏幕上的交互输入，应提供暂存文件以记录全部输入，以便全部数 据输入完后或临时需要时进行检查和确认； 
c. 对用户各种输入应提供检查； 
d. 对于数据库中的重要数据，必须进行严格的复查核对。 
2）控制输入 
控制输入的内容与用户界面的风格、控制方式有关。在有的菜单选项用户界面 上，往往提供一组编号菜单项，用户输入一个号码后，立即可进入该号指定的项目。 采用这种方法虽然可以减少按键，提供操作效率，但在误按号码后将会引起错误。 
a. 对错误命令应提供反馈信息，告诉用户正确的命令格式及参数； 
b. 对文件操作的命令只对该文件的副本进行，以便在必要时仍可从文件的原稿 中恢复； 
c. 对一些影响重大的命令需要由用户再次确认； 
d. 建立命令的历史文件，这是对系统进行恢复的最有效措施，它对于不同开发 阶段的错误情况获取都是有用的。 
3）其它错误 
在一个交互系统中，各个部分都可能出现错误，包括硬件错误和软件错误。在 设计系统时，应允许采用不同厂商的设备，且设备不同也不应引起错误，这就是设 备的独立性问题。 
4）错误信息 
如何向用户提供确切的错误信息是系统设计中的一个重要问题。过去有许多用 户不爱使用某些系统，并不是因为其功能太弱，而是因为遇到错误时提示用户的信 息太少。一个好的用户界面，不仅应该具有容错、检错的能力，而且在错误出现后， 应让用户清楚了解其错误的性质和位置，以便由用户克服其错误，下面是有关错误 信息的设计原则： 
a. 尽可能使错误信息准确和定位； 
b. 应指明用户针对这类错误应如何做； 
c. 语言应简洁、明确，尽可能用通俗易懂的词汇； 
d. 避免使用指责性语言，语气尽可能友善，但应给以告诫； 
e. 对于错误信息应该根据系统的实际情况进行分层提示； 
f. 应保持错误信息的风格一致，包括信息出现的位置，是否用对话框或窗口， 术语及缩写等； 
g. 尽可能采用可视的图形信息及音响效果。 
2.5 人机界面设计的评价
评价是人机界面设计的重要组成部分，但往往被设计者忽视。通常评价在最后 产品上进行，但若在系统设计初期就进行，或对原型进行评价，就能及早发现设计 缺陷，避免人力、物力的浪费。 
对界面设计的质量评价通常可用四项基本要求衡量： 
（1）界面设计是否有利于用户目标的完成？ 
（2）界面学习和使用是否容易？ 
（3）界面使用效率如何？ 
（4）设计的潜在问题有那些？ 
而对界面的总体设计和具体功能块设计，则可用上面提到的各类界面设计准则 根据其应用对象进行综合测试。具体要求的界面品质，可照以下几项参考： 
（1）适应性。衡量界面在帮助用户完成一项或多项任务时的满意程度。 
（2）有效性。度量指标错误率、任务完成时间、系统各设备使用率等。 
（3）易学习性。从系统开始使用一段时间后，错误率下降的情况、完成任务 时间减少的情况、正确调用设备及命令的情况以及用户知识增加的情况来评测。 
（4）系统设备及功能使用面。若有些设备或功能任何用户都未用过，则可能 设计有误。 
（5）用户满意程度。以用户满意程度、发现问题多少及使用兴趣来衡量。 
界面评估采用的方法已由传统的知觉经验的方法，逐渐转为科学的系统的方法 进行。传统经验方法有如下几种： 
（1）实验方法。在确定了实验总目标及所要验证的假设条件后，设计最可靠的 方法是随机和重复测试。 
（2）监测方法。即观察用户行为。观察方法有多种，如直接监测，录像监测， 系统监测等。 
（3）调查方法。这种方法可为评价提供重要数据，在界面数据的任何阶段均可 使用。调查方法可以采用调查表（问卷〕或面谈方式。调查收集到的大多是主观数 据，主要了解用户使用该界面的情况，对界面的态度和意见。
相关产品
.1 X窗口系统
窗口系统是控制位图显示设备与输入设备的系统软件。它所管理的资源有屏幕、 窗口、象素映象（pixmap)、色彩表、字体、光标、图形资源及输入设备。 
窗口系统向用户提供下列界面： 
1) 应用界面 
2) 编程界面 
3) 窗口管理界面 
美国国家标准技术委员会于1990年5月把窗口系统X.11.3版本正式发布为美国 国家标准文件（编号为FIPS－PUB－158）。该标准共包括4个内容： 
（1）X协议（X protocol) 
X窗口系统实际上由核心协议所定义。协议包括四个方面：请求(request)、 回答(reply)、出错(error)及事件(event)。X协议共有120个请求，可扩充至256 个。整个协议描述客户与服务器进程通讯的语法结构与语义。 
（2〕X库函数(Xlib) 
X库函数是X窗口系统的C语言编程界面，是向应用程序员提供的低级编程界面。 X库把参数封装为协议请求，利用IPC机制发射给服务器进程。X库共有320多个函数， 可分为系统功能（连接的建立与撤除等）、窗口功能（窗口属性与操作）、通讯功 能（图原、通讯属性、正文字体、区域、图像等）、色彩功能（色彩表操作）、事 件功能（输入事件及窗口事件处理）及其它功能（原子、实用函数）。 
（3）X工具箱本征函数（X toolkit intrinsics) X工具箱是在X库上的高级 编程界面。它向用户提供菜单、对话框、图符等各种图形界面元素的编程手段。X 工具箱包含两部分：Widget集及Intrinsics函数集。前者是具有一定风格及外观的 图形界面元素对象集，它与特定风格有关；后者是利用这些对象编程时的通用函数， 共有270个函数，包括界面函数与应用程序联系的“回调函数”等。 
（4）字体标准格式（BDF,Bitmap Distributed Format) 这是X窗口系统所提 供各种字体的标准位图(bitmap)的组成规定。 
X窗口系统的一个重要设计思想是提供实现各种界面的机制，而不是策略。由 于上述四部分只规定了应用程序员的编程接口，因而不同厂商或用户可在它们之 上实现各种窗口管理程序及界面外观。由此，X窗口系统成为工作站各用户界面的 基础、事实上的工业标准。 
窗口是X窗口系统的一个重要资源，是屏幕上的一个矩形区域（透明窗口无此 区域边框〕。它实质上是位图输出设备及输入设备的一个抽象，有自己的坐标及感 兴趣的事件等。X窗口系统有一个根窗口覆盖整个屏幕，应用程序的窗口均为根窗 口的子窗口。这样所有窗口构成了树形结构，子窗口大小不能超出父窗口。X窗口 系统中窗口的树形结构为应用程序的多级抽象提供了清晰的概念。 
X窗口系统的运行环境应该是在具有进程间通信机制的操作系统上工作，例如 有TCP/IP（支持Socket机制〕网络协议的UNIX操作系统上工作。此时，应在后台运 行服务器进程(X Server)、窗口管理程序(uwm)及终端仿真程序(X term)。有以上 三个进程，就可以在窗口系统下执行各种命令，用鼠标或键盘管理窗口，运行各种 应用程序。X窗口提供了极强的显示管理及输入设备的管理功能，是工作站上CAD软 件及其用户界面的主要支撑环境，已成为工作站窗口系统事实上的工业标准。X窗 口系统也要求可观的计算机资源。 
3.2 OSF/Motif和OPEN LOOK
X窗口系统提供了一系列构造用户界面的机制，包含协议、库函数、工具箱本 征函数及字体格式等。但它并不提供某种具体的用户界面风格。在X窗口系统之上 已经构造了具有不同用户界面风格的高级界面对象集，通常称为Widget Set。它们 各有不同的视感（look & feel)，其中对象可以包括窗口、菜单、对话框、按钮、 图符、边框等。一种风格的某种Widget Set为用户提供了一种外观统一的图形用户 界面，也为应用程序员提供了面向对象的应用编程界面（API〕。OSF/Motif是由开 放软件基金会（OSF〕1989年发布的图形用户界面规范。它以UNIX操作系统用X窗口 系统为软件平台，吸取了IBM OS/2的Presentation Manager,MS-Dos及HP newware 界面风格的特点，提供了风格(style)、窗口管理、工具箱、用户界面语言（UIL〕 等一系列机制及规定。OSF/Motif已在多种硬件平台及操作系统上工作。OPEN LOOK 是由UNIX国际1988年发布的图形用户界面规范，它已作为UNIX系统第四、第五版本 发布的重要组成部分正式使用。它也在许多工作站上实现并推广使用。 
3.3 Windows
1986年Microsoft公司为IBM个人计算机的DOS环境开放了Windows窗口系统，后来 经过大量改进，于1990年正式发布了Windows3.0版本。由于该窗口系统在储存管理 上突破了原来DOS 640KB的限制，从而具有强的功能，为在DOS环境提供了可实用的 图形用户界面。MS-Windows的出现，使得DOS环境下的大量CAD/CAM软件有了十分强 的窗口环境支持，从而使得CAD/CAM的用户界面更加方便、一致。MS－Windows已成 为在DOS环境图形用户界面的主要产品。 Windows窗口系统是基于核心的窗口系统(Windows 95,Windows 98,Windows NT)， 其核心功能放在操作系统内。由于Windows窗口环境具有风格一致的操作界面，在 Windows环境下开发的应用软件具有同样的界面风格因而易学易用。这种通用的操作 系统为界面各种对象的设计提供了过程化设计的平台和工具箱，从而使界面设计实 现容易。
典型应用（案例分析）
4.1界面工具系统(FITOOL)开发与实现
（1）研究背景: 
计算机用户界面是计算机系统的重要组成部分，它直接关系到整个计算机系统的 可使用性和效率。经验表明开发高质量的用户界面，需花费大量的人力物力，且开发 周期较长。 
传统的用户界面的设计与描述是基于＂嵌入＂方式进行的，应用程序设计人 员在设计软件时，是按功能及界面两方面要求混合编写用户界面和应用功能两部分程 序。这种开发方式忽略了用户界面的个性，使程序复杂化，可维护性差。当前计算机 软件的开发已不再是将用户界面和应用功能两部分混合编写了。而是越来越倾向于二 者分别编写，单独编译，再连接成可执行文件。这是因为对不同的应用系统，用户界 面部分在逻辑上和处理方法上具有高度的相似性。而让软件开发人员花费大量的时间 与精力去开发一个很类似又不具有通用性的用户界面程序显然是不可取的。因此开发 能够用规范化和规模化生产的方法自动生成一致性的用户界面的工具是用户界面研究 的内容。 
用户界面管理系统（UIMS）就是一种开发用户界面的软件工具。UIMS支持用户界 面的表示、设计、实现、原型、执行、评估和维护。UIMS能够为整个环境提供一个友 好一致的人机界面，使用户能以极其友好的方式几乎能随心所欲地使用此环境进行软 件开发，即使得此环境具有友好的交互介质、友好的界面方式、友好的屏幕式样。 
（2）UIMS的表示方法： 
UIMS的表示方法主要包含人机界面的规格说明和它与人文因素、应用程序及其数 据结构的联系等。UIMS逻辑结构模型中几个主要层次的表示方法，其中除了对话层的 表示方法比较成熟、研究成果丰富外，其它层次的表示方法尚有待发展。 
1)外形层的表示方法 
外形层的表示方法主要涉及用户输入输出信息的处理。需要解决如下问题： 
a. 如何处理和表示图形的输入输出。 
b. 如何适应多媒体的需要，将输入输出信息扩充到视频、语音、动画、仿真等。 
c. 如何适应智能人机界面规格说明的需要，即信息流的内外映射中如何包含简 单的基于人机界面设计规格的决策，使一对一映射的关系扩充到多对一、多对多的映 射关系。 
2)对话层的表示方法： 
对话层的表示方法比较多，Green M(1986)，Myers BA(1989)等曾先后对对话层 的表示方法进行了如下分类： 
a. 基于语言的表示方法 
即界面设计者用一种专门的人机界面描述语言UIDL来说明界面。这种语言可能 有多种形式：菜单网络、状态转换图、上下文无关文法、事件语言、面向对象语言 等。语言的主要任务是说明界面对话层的语法，即输入输出动作的合法顺序。 
菜单网络：是最简单的表示方法，即支持菜单的层次或网络结构。 
状态转换图：一个状态转换网络是由一组状态组成。在由每个状态出发的边上 标志出一个输入词码，它能引起转移到该边另一端的状态。除输入词码外，有些系 统的边上标出了被调用的应用子程序和被显示的输出内容。但是使用这种方法，界 面和应用程序的联系是通过很多全程变量实现的，所有的状态必须有清楚的边来反 映所有可能出现的错误输入和公用命令。 
上下文无关文法：即使用上下文无关文法来描述用户和程序之间的对话，且大 多以编译器为基础。 
事件语言：在事件语言中，输入词码被认为是事件并立即送事件处理器．这些 处理器能产生输出事件，改变系统的内部状态，或调用应用子程序． 
面向对象语言：即提供一个面向对象的框架，设计者在该框架内编写界面程序。 
b. 基于图形的表示方法： 
基于图形的UIMS让用户或至少部分地让用户使用鼠标器直接将对象放到屏幕上 来定义界面．它把界面的图示表示作为最重要的一个方面，而图形工具是说明这种 表示的最合适的方法。 
c. 基于应用语义过程的表示方法： 
即从应用的语义过程规格说明自动生成界面，并且让设计者修改界面以改进它 的性能。 
3)应用层的表示方法： 
目前应用界面模型和应用层的表示方法很不成熟，仍旧处于发展初期。作为可 供实用的实用界面模型，至少必须包含如下三个内容： 
a. 它必须包含与用户和人机界面有关的应用数据结构的说明； 
b. 它必须包含人机界面调用的应用子程序的说明，例如子程序名、运算对象 等．这实际上是定义了人机界面和应用程序之间的界面； 
c. 必须列举应用程序对用户的限制．从而使人机界面排除了许多可能引起语 义错误的操作，避免了对应用程序的破坏。 
正在研究的应用层的表示方法有两类： 
一是对象 — 算子法．对象对应于应用程序的数据结构，算子对应于人机界 面调用的应用子程序。 
二是基于关系和一阶逻辑．关系用来表示应用程序中的数据结构，而一阶逻辑 模型的说明用来表示应用子程序。 
4.2系统结构
FITOOL支持用户界面管理系统（UIMS）的Seeheim模型，基于Motif和X-Windows， 运行于UNIX操作系统。 
FITOOL对话层的表示方法采用面向对象表示方法结合图形表示方法，使系统具 有直接操纵的特点。 
FITOOL由如下几部分组成：（结构图见图4-1） 
a. 窗口编辑器 
窗口编辑器管理并生成各种初始化窗口。用户若要创建界面必须先运行此模块， 这既是初始化界面结构也是初始化管理内部数据结构的链表。 
b. 原始构件编辑器 
原始构件编辑器提供了各种界面构件，用户可按自己的需求用鼠标点取相应的 界面构件，并可对其进行任意配置，直到满意为止。 
c. 管理器编辑器 
管理器编辑器提供了各种界面管理器构件，这些构件有的可以管理一个后代， 有的可以管理若干个后代，用户可按自己对界面总体的要求需求用鼠标点取合适的 界面管理器构件，并可对其资源进行任意配置，直到满意为止。 
图4-1 FITOOL 结构图
d. 菜单编辑器 
菜单编辑器可以单独进行使用，用户可以创建下拉式菜单，选项式菜单，弹 出式菜单，菜单可以是文字式，图符式或图符文字混合式。 
e. 对话框编辑器 
对话框编辑器提供了各种对话形式，用户可按要求自行创建和配置。 
f . 资源修改模块 
资源修改模块可单独运行以对所产生的界面的任何部分进行资源的重新配置。 
g. 界面浏览器； 
界面浏览器可以浏览用户已有的界面（文件），并可以重用之。 
h. 界面／应用对话编辑器 
界面／应用对话编辑器用来定义用户界面与应用程序之间的数据的传递及动作的响应。 
i. 源代码生成器 
源代码生成器用于生成用户界面源程序（包括C文件和UIL件）. 
j. 中英文文本编辑器 
中英文文本编辑器可进行任何文字编辑操作。 
k. 编译与连接模块。 
编译与连接模块用于编译并连接用户界面源程序生成执行文件。 
4.3系统功能
使用本文描述的工具，界面设计人员不需要专门掌握一种用户界面描述语言， 而是通过界面编辑器来直接操纵屏幕上的可视对象，生成和修改用户界面原型，并 能将结果立即显示在屏幕上，达到＂所见即所得（WYSIWYW）＂的效果。 
使用FITOOL，用户可以任意布置自己的用户界面，并最后得到相应的用户界 面及其源程序，并可以和应用程序进行联编，最后形成可用的执行文件。 
使用FITOOL， 用户需做如下工作： 
(1). 描述，即理解应用程序，确定用户界面外观和交互行为． 
a. 确定所需的用户界面构件： 
按照最终用户界面的外观和功能进行界面布局描述和设计，这部分工作可以在 稿纸上完成，并列出所需要的界面构件名称及最终的配置。 
b. 确定界面的层次关系： 
有了界面的布局，启动FITOOL，运行相应模块按步骤创建用户界面。 
c. 确定界面与应用程序的对话结构： 
按应用程序对界面响应的要求，定义应用与用户界面之间的数据传递及相应的 对话框。 
(2)构造用户界面 
a.运行窗口编辑器，创建并管理各种初始化窗口。用户若要创建界面必须先 运行此模块，这既是初始化界面结构也是初始化管理内部数据结构的链表。 
b. 管理器编辑器提供了各种界面管理器构件，这些构件有的可以管理一个后 代，有的可以管理若干个后代，用户可按自己对界面总体的要求需求用鼠标点取合 适的界面管理器构件，并可对其资源进行任意配置，直到满意为止。 
c. 原始构件编辑器提供了各种界面构件，用户可按自己的需求用鼠标点取相 应的界面构件，并可对其进行任意配置，直到满意为止。 
d. 菜单编辑器可以单独进行使用，用户可以创建下拉式菜单，选项式菜单， 弹出式菜单，菜单可以是文字式，图符式或图符文字混合式。 
e. 对话框编辑器提供了各种对话形式，用户可按要求自行创建和配置。 
f. 资源修改模块可单独运行以对所产生的界面的任何部分进行资源的重新配置。 
g. 界面浏览器可以浏览用户已有的界面（文件），并可以重用之。 
h. 界面／应用对话编辑器用来定义用户界面与应用程序之间的数据的传递及 动作的响应。 
i. 源代码生成器用于生成用户界面源程序（包括C文件和UIL文件）。 
j. 中英文文本编辑器可进行任何文字编辑操作。例如：编辑任何程序语言的源 程序或任何中英文文本文件。 
k. 编译与连接模块用于编译并连接用户界面源程序生成执行文件。 
因此用户可按事先确定的界面层次关系，用鼠标选取相应的界面构件，并定制相 应的资源，可随时对字体和颜色进行修改以满足自己的要求，最后组装成自己的界面。 并可得到相应的源程序（*.c、*.h、*.uil），经编译后得到对应的目标文件（*.o、 *.uid），和应用程序对应的目标文件（*.o）进行连接后可得到相应的执行文件。 
（3〕测试用户界面． 
将生成的源程序与应用程序的目标文件经连接后生成可执行文件，经运行如 发现不合要求，可进行相应的修改，直到满足要求。 
最后生成最终用户界面（包括永久对象和临时对象）和源程序。 
4.4系统实现
系统的实现采用C++ 、C语言、Motif 及其用户界面语言uil混合编写而成。 
Motif基于X—Windows的Xt 工具箱（Xt Intrinsics），是一个用C语言实现、 支持面向对象体系的程序库；C++则是由C语言发展而来，但它直接提供面向对象式 的编程方法。 
Motif内部使用的面向对象式体系对Motif的应用程序来说不会有丝毫的影响， 因为它提供面向函数的接口，调用程序对Motif及Xt Intrinsics内部实现的细节不 必深究。因此从表面上看，Motif和其他C语言库没有任何区别。C++的设计允许程序 员轻易地使用象Motif这样的C语言库。C++还为面向对象设计方法和系统软件设计方 法的结合提供了简易的方法，它使得程序在受益于面向对象技术的同时不失掉C的高 效性，更不必重新设计象X和Motif这样的标准C库函数。 
（1）OSF／Motif与C++混合编程 
用C++的面向对象的特性进行程序设计，并假设程序中的类代表令人感兴趣的体 系结构单元。用C++类封装widget集合以创建一用户界面组成部件的类，将Motif wi- dget作为基本单元来构造它们的界面。一个组成部件不仅封装了一个widget集合， 而且定义了整个组成部件的行为。 
1)创建用户界面组成部件 
用C++类封装widget集合以创建用户界面组成部件的技术。即使用C++创建高一级 的、将一个或多个widget组合成一个逻辑群的用户界面组成部件。这样做的目的是不 用分离的类替换widget，而是用基本的Motif　widget，将一个应用程序及其界面的 关键组成部件作为类实现。这样的话，Motif本身是否是面向对象的并不重要，C++ 程序员可以直接调用Xt和Motif的函数来创建基本的Motif　widget。 
使用C++类组合一组widget以创建更复杂的用户界面组成部件。并且在一个C++ 类中，可以创建widget，并指定其资源和赋值回调等。这样，一个C++类不仅封装一 个widget集合，而且定义了整个组成部件的行为。其意图是不仅仅用一个类替换一 个widget集合，而是创建一个应用程序所要求的基本类，其中某些类使用widget实 现一用户界面组成部件。 
虚拟与回调（作为静态成员函数实现）的组合提供了创建抽象用户界面组成 部件的一种方法．基类可以由组成部件支持的widget，以及整体布局，而将组成部 件的具体行为留给派生类。 
2) 用户界面组成部件的协议 
定义一个简单的协议，即使所有用户界面组成部件能保证在不同组成部件之间 的一致性，并且使不同的组成部件很容易地在一起工作。 
● 组成部件在类的构造函数中创建一个或多个widget。通常情况下，回调与其 它创建也在构造函数中处理，每个组成部件创建一个单独的widget，是为基widget。 使它作为类所表示的widget树的根，其它所有widget都是它的孩子。 
● 组成部件将一个widget作为构造函数中的一个参数。该widget作为该组成部 件的基widget的父亲。 
● 组成部件将它创建的widget子树的根赋给一个保护的实例变量． 
● 组成部件将一个字符串作为构造函数的一个参数。 
● 每个组成部件类提供一访问方式，用来查询子树的根widget。然而一个组成 部件类的目标是封装一个widget的单独逻辑集合的行为，偶尔需要类公开widget树 的根widget。 
● 组成部件类允许widget子树由类封装，以进行处理或不处理。组成部件就作 为一个逻辑群处理，并且只有widget子树的根被处理或不处理。其它widget应在创 建时在构造函数中被处理，而此时不处理根widget。 
● 组成部件处理其widget树中widget的析构函数．当一个对象被清除时，它所 封装的widget也应被清除。 
3) 基类的定义与实现 
BasicComponent类 
BasicComponent类实现一些对所有组成部件类都有用的基本特性。 
UIComponent类 
UIComponent类是由BasicComponent类派生得到的，但增加了处理widget析构， 并且使用资源管理程序定做和初始化类。 　　 
（2） Motif与C++类混合编程的应用框架 
创建一个应用框架用来定义一个应用程序的总体结构。和其它框架一样，类和 框架配合的好要比任何一个类的函数性要重要的多。 
框架的本意是依靠获取应用程序的共同元素来简化编写Motif应用程序的任务。 尽管Xt和Motif提供一个比Xlib更高层的的接口，但是绝大多数的Motif 和Xt 应用 程序仍然包括数量惊人的重复代码。例如所有的Motif 应用程序必须初始化Xt Int rinsics，打开和 X 服务器的联系，进入事件循环，以及其它等等。对每一个应用 程序来说，复制实现这些步骤的代码是没有什么理由的。我们可以把这些步骤放在 一个类中，其他的应用程序就可以复用它。我们也可能抽取典型的Motif 应用程序 的控制结构部分，尽管许多特殊的细节在不同的应用程序间是有差别的。 
Motif 应用程序所共有的一些特点： 
● 初始化Xt Intrinsics； 
● 打开和 X 服务器的联系； 
● 创建一个Shell widget作为其它widget的父亲； 
● 创建一个或一个以上widget定义用户界面； 
● 进入事件循环来处理事件。 
大部分Motif 应用程序中main()主体是非常类似的。绝大多数程序都执行上 面的步骤，而很少有不同的。实际上，如果我们忽略不同的应用程序间的细小差 别，我们可看到几乎每一个Xt应用程序都包含相同的语言并且遵循相同的形式。 程序和程序之间，重复地为每个程序打开这些语句是一个时间上的浪费。 
一个功能更强的方法是抽取一个应用程序的骨架，放在一个类中。应用程序 可以通过实例化这个类，或者创建一个从这个类派生出来的新类来复用公共的代 码段。使用一个类来获取应用程序的共同特点比拷贝上面显示的样板有几个优点。 首先，一旦程序设计者作了一份样板的拷贝，他或她就丧失了跟踪原始代码的能 力。然而，那些仅是简单地实例化一个封装这个代码的对象的程序，可以从修改 错误和改进中获益，因为它们只需要与一个修改过的版本重新连接。 
基于面向对象理论的应用程序可以通过派生出一个新类修改已生成代码的行 为。因为改变只是对一个派生类做的，而对原始类未作改动，所以要复原至最初 的行为就容易得多了。确定任何在发展过程中带入的新错误完全包容在新代码中 ，也变得容易多了。 
Application类: 
Application类处理初始化和所有基于Xt 的应用程序通用的事件处理步骤。 Motif 应用程序只是简单地实例化一个Application对象，而不是调用类似 XtApp Initialize()或XtAppMainLoop()的Xt函数。程序可以从Application类中派生出 新类也可以直接实例化。Application类在构造函数中不创建任何widget。Appli cation类为在整个应用程序中都可能需要的一些数据提供存储的空间。 
框架支持应用程序的多顶层窗口。一个方法是创建一个唯一的顶层的窗口作 为应用程序的主窗口。所有其它的窗口都是弹出Shell，它们的父亲是那个主窗 口。另一种方法是创建一个唯一的Shell，它永远不出现在屏幕上．所有其它的 窗口必须是这个主Shell的弹出儿子．在这个模型中，所有顶层窗口等价对待， 彼此间是兄弟关系，一个窗口逻辑上可以是应用程序的顶层窗口。 
可以定义一个MainWindow类以提供应用程序中顶层窗口的基本屏幕布置。 
基于这个框架的应用程序不必定义main()。函数main()定义框架的一部分， 并且管理调用Application::initialize()成员函数以及进入事件循环。隐藏 main()允许框架管理比所有应用程序必须执行的例程初始化更多的事情，即每一 个程序都是Application类的一个实例。应用程序的创建就是简单地由实例化一个 Application对象完成的。 
对话类: 
为了一些特殊意图，在屏幕上现实相对时间较短的对话窗口，是许多交互式 应用程序的一个共同特点。管理带有许多输入，控制或者选项的应用程序的一种 方法是把用户界面中不常使用的部分放在几个分开的对话窗口中，只有当需要时 才显示，对话窗口可以有几种不同的使用方法。 
对话类依赖Application类，因为对话需要一个父widget。因此要强迫应用 程序传送一个widget给post()方法作为父亲使用，但是允许有不同的父亲。为了 不使高速缓存复杂化，这里使用Application类的Shell widget以保证所有的对 话有相同的父亲，在屏幕上集中了对话。 
命令类: 
在交互式应用程序中，用户的每一个动作几乎都被认为是一条命令。例如， 绝大多数的字处理程序支持类似＂插入字符＂的简单命令和更复杂的类似＂段落 重新划分＂以及＂保存文件＂的命令。用户可能认为插入字符不是发出了一条命 令，但是对程序员来说，插入字符和段落重新划分之间没有什么不同。程序员典 型地把这些命令作为函数（例如，回调函数）来实现，这些函数作为用户动作的 结果被执行。这样系统的每一个命令被模型化为一个对象。 
Cmd类完全独立于任何用户界面。命令对象可以有计划地实例化和执行。而不 必依赖于某个用户界面组成部件。然而，通过一些用户界面组成部件，代表由用 户初始化的动作，对一个命令对象来说是很普遍的。CmdInterface类就是支持Cmd 对象和widget或其它用户界面组成部件间的相互作用。 
（3）OSF／Motif之UIL与C++混合编程 
UIL即用户界面描述语言。它是一种规范语言，描述Motif 应用程序的用户界 面的初始状态。UIL配合Motif 资源管理器（MRM）以一种较C语言更加靠近自然语 言的高级语言描述、定制Motif 用户界面。 
使用UIL可以快速地开发用户界面的原型，因为使用者不需要知道具体的wid- get创建函数极其调用格式。UIL不需要控制流，用户可以大致按对象在界面中的 放置顺序来描述它们，这使得uil文件易读且不易出错。另外，由于用UIL编译器 对uil文件进行解释产生的用户界面描述文件uid与应用程序之源程序分离，应用 程序只是在运行时才读取uid文件。也就是说同一个应用程序可以有一个或多个不 同的界面，同一个界面可以被一个或多个不同的应用程序所拥有。 
使用uid文件的应用程序的结构： 
● 调用MrmInitialize（）函数初始化MRM所需之内部数据结构； 
● 调用MrmOpenHierarchy（）函数将MRM与具体的uid文件联系起来； 
● 调用MrmRegisterNames（）函数来登记回调函数； 
● 调用MrmFetchWidget（）函数按搜索层次指针记录的uid文件获取顺序从 uid文件中获取文件信息，并创建列于相应uid文件中的widget及其子widget。 
创建Application 类的子类Mrmapp类． 
Mrmapp类是Application 类的子类，它提供了普遍使用的读取uid文件，创 建widget的方法。 
使用UIL语言与C++语言混合编程非常方便．对不同的程序只需要改变相应 的读入uid文件语句，使程序调用合适的uid文件即可。 
FITOOL就是通过建立上述Motif与C++类混合编程的应用框架实现的。 
4.5 BITIS界面
BITIS计算机辅助设计与制造（ CAD/CAM/CAPP）系统（图4-2）的统一用户 界面就可以用FITOOL来设计与生成。 
(1). 需求分析 
要求有一封面、一背景屏幕和一集成工具。 
集成工具（图4）层次结构如下： 
初始化窗口； 
管理器构件：主窗口，一个Form管理器，二个Frame管理器，一个RowColumn 管理器。 
原始构件：RadioBox，Label，PushButton。 
菜单：下拉式菜单。 图4-2 BITIS集成系统结构 
(2). 生成界面 
a. 首先用窗口编辑器，创建并管理各种顶层窗口。 
b. 用管理器编辑器产生一个主窗口，一个Form管理器，一个RowColumn管 理器。 
c. 用原始构件编辑器产生Label，RadioBox，PushButton原始构件。 
d. 用菜单编辑器创建下拉式菜单。 
e. 用界面／应用对话编辑器定义用户界面与应用程序之间的数据的传递 及动作的响应。 
f. 用源代码生成器生成用户界面源程序（包括C文件和UIL文件）。 
g. 编译与连接模块用于编译并连接用户界面源程序生成执行文件。 BITIS系统集成用户界面（图4-3）： 图4-3 BITIS系统集成用户界面 
FITOOL可以运行于HP和SGI工作站，使用效果良好。其中有些功能有待进一步 研究与完善。