第2页最终的系统是要提供给用户使用的。用户对系统的理解,包括用户要操纵的系统中的事物、系统能够完成的功能以及任务的实施过程,决定了用户对系统的使用。而用户对系统的使用是通过人机界面来进行的。现今的用户对软件系统的人机交互方面的要求越来越高,人机界面的设计在软件系统开发中所占的地位也就越来越重要。特别是,新一代的人机界面将是以人为中心的计算,这样人机交互部分的设计作为一个独立且重要的领域,就显得越发重要。简言之,人机交互部分是人和计算机之间交互信息的媒介,对它的设计涉及计算机科学、心理学、艺术学、认知科学和人机工程学等学科。本章讲述的是人机交互的软件方面的设计。第3页对使用系统的人进行分析——以便设计出适合其特点的交互方式和界面表现形式;对人和机器的交互过程进行分析——核心问题是人如何命令系统,以及系统如何向人提交信息。设计人机交互就是要设计输入与输出,其中所包含的对象(称作界面对象)以及其间的关系构成了系统的人机交互部分的模型。8.1什么是人机交互部分最初设计人员按设计目标(用户需求),设计出界面(原型),提交给用户去加以评判,也即这个初步的界面起抛砖引玉的作用。用户通过对界面的学习,根据自己的经验和需求,经过一定的评判,把结果反馈给设计人员,让设计人员继续设计。这种过程可能要反复进行多次,使得双方的意见达到一致或达到一定程度的一致,直至用户认可为止。第4页人机界面的开发不仅是设计和实现问题,也包括分析问题。可以在不同的开发阶段,对人机交互部分进行不同的处理。在捕获需求时对用况所做的描述,其实就包含了人机交互部分的信息。这些工作的目标是为了更好地理解系统的需求。尽管那时注重的是系统的功能需求,但也很可能在那时分析人员与用户就系统的界面的框架和内容已经达成了共识。若有必要,在确定了用况模型后,可以紧接着完成人机交互部分的分析工作。考虑到经过了OOA阶段,当时的用况模型会有一些变动,以及要考虑用户群的特点等因素,在OOD阶段仍有必要重新分析原来所做的人机交互部分的分析结果。第5页对人机界面的分析,首先要对使用系统的人进行分析,以得到适合其特点的交互方式和界面表现形式;然后对人和机器的交互过程进行分析,解决的核心问题是人如何命令系统,以及系统如何向人提交信息。要以捕获需求时获得的用况模型为基础,加上已有的界面原型,进行后一项工作。8.2如何分析人机交互部分1.分析与系统交互的人员参与者人对界面的需求,不仅在于人机交互的内容,而且在于他们对界面表现形式、风格等方面的爱好。前者是客观需求,对谁都一样;后者是主观需求,往往因人而异。如下给出了分析策略:1)列举所有的人员参与者;2)对人员参与者进行调查研究;3)区分人员类型,并了解各类人员的主观需求;4)统计(或估算)出各类人员的比例;5)按照一定的准则进行折中与均衡。第6页2.从用况分析人机交互我们先回顾一下通常的用况的构成:1)参与者的行为和系统行为按时序交替出现,在布局上左右分明,形成交叉排列的段落;2)每个段落至少含有一个输入语句或输出语句;3)有若干纯属参与者自身或系统自身的行为陈述;4)可能包含一些控制语句或括号。从用况中抽取人机交互序列可以用以下方法:针对各用况,先删除所有与输入、输出无关的语句和不再包含任何内容的控制语句与括号,剩下的就是对参与者(人)使用系统功能时的人机交互描述。图8-2为一个从用况提取人机交互描述的示例。第7页收款员收款(usecase)输入开始本次收款的命令;作好收款准备,应收款总数置为0,输出提示信息;for顾客选购的每种商品do输入商品编号;if此种商品多于一件then输入商品数量endif;检索商品名称及单价;货架商品数减去售出数;if货架商品数低于下限then通知供货员请求上货endif;计算本种商品总价并打印编号、名称、数量、单价、总价;总价累加到应收款总数;endfor;打印应收款总数;输入顾客交来的款数;计算应找回的款数,打印以上两个数目,收款数计入账册。(a)一个usecase的例子收款员收款(人机交互)输入开始本次收款的命令;输出提示信息;for顾客选购的每种商品输入商品编号;if此种商品多于一件then输入商品数量endif;打印商品编号、名称、数量、单价、总价;endfor;打印应收款总数输入顾客交来的款数打印交款数及找回款数;(b)人机交互描述从usecase提取人机交互描述第8页8.3如何设计人机交互部分以往在操作系统和编程语言的支持下,或再加上图形包,进行图形方式的人机界面开发,工作量是很大的。也就是说,以往对图形化的人机交互的开发在整个系统的开发工作中占有很大比例。现在,可以通过窗口系统、GUI和可视化编程环境这样的高级界面支持系统进行人机界面开发。特别是使用可视化编程环境可以按所见即所得的方式,定制所需的人机界面。如此定义的界面对象可由编程环境提供的工具自动地转化为程序代码。这样,人机界面的设计工作就可以大大简化,但仍有一些设计工作要做。其中的很多内容对各种设计方法都是相同的,也有一些是采用本方法所必须要考虑的。例如,可视化编程环境一般都带有内容丰富的界面类库,界面类库中对大部分常用的界面对象都给出了类的源代码,在进行人机界面设计时要充分地复用这些类。第9页8.3.1设计输入与输出根据前面从用况中提取出来的对人机交互的描述,设计输入与输出。首先要选择界面支持系统,如窗口系统、图形用户界面(GUl)或可视化编程环境,然后进行输入与输出设计。输入与输出技术正在不断地发展,这里仅就目前常见输入与输出的方式进行阐述。1.设计输入在设计输入时,要进行如下的工作。(1)确定输入设备常见的输入设备有键盘、鼠标、磁卡阅读器、条码阅读器、光电字符识别阅读器、扫描仪、触摸屏、电子笔和书写板等。键盘和鼠标属于标准的计算机设备,不考虑在内。对于一些非标准的计算机外部设备的接口程序,可以把它们放在相应的类中。如果要从外系统进行输入,可以把外系统的接口程序放在相应的类中。如果要隔离外部设备或外系统的变化对本系统的影响,可以针对外部设备或外系统的接口程序单设立类。对于某些复杂的情况,可能还需要考虑同步机制。第10页(2)设计输入界面在用户的输入界面中,主要的界面元素有窗口、菜单、对话盒、图符、滚动条和按钮等。下面以菜单和对话盒为例,说明如何设计其内容。菜单是提供给用户的一系列对应着用户动作的条目列表。大部分系统都具有通常形式的菜单,如文件、视图、工具、窗口和帮助等,但也都具有自己的特有部分。在设计特有部分时,要保证术语的一致性与简洁性,并按逻辑对条目进行分组。菜单要设计成面向不同用户的,最好可以进行重组。对话盒是用来收集用户的输入信息或向用户提供反馈的区域。用于输入时,其上可有一些选择钮和输入框等元素,可用鼠标在其上选取值,或从输入设备向其中输入值。在设计对话盒时,要注意如下几点:1)使用有意义且易于理解的简短标题和输入框名。2)按逻辑对输入框进行分组并排序。3)允许对文本型输入框进行简单的编辑。4)清楚地标出哪些输入框是可选的,哪些是必选的。5)对输入框进行必要的解释(如在Windows的状态条上列出解释)。第11页设计对话盒时,还要注意对输入内容的检查:1)尽可能地防止错误的输入,当输入有误时要提供出错信息。2)输入框组合控制。检查各输入框中的数据项的可能组合,以保证输入的数据是正确的。例如,参加工作的日期必须晚于出生日期。3)数据的有效范围控制。检查所输入的数据的合理性。例如,在现今社会,一个人的年龄不应该超过200岁。4)输入框组合的完备性。确保所有必要的输入框都要被输入。例如,在进行身份检查时,除了输入名称,还要输入密码。5)数据的有效位数的控制。例如,身份证上的号码必须是15位或18位的。第12页(3)输入步骤的细化向系统输入信息,可以一次输入完毕,也可以分为若干细小的步骤完成。以较少的步骤完成输入,意味着每一步输入的内容较多,不易记忆;或者要从较多的选项中进行选择,不易发现目标。以较多的步骤完成输人,可以使每个步骤的操作比较简单,并且容易对用户形成引导,但总的操作步骤会增加,使操作效率下降。技能熟练的用户倾向于追求效率,初学者和一般水平的人员更重视系统以较多的步骤引导他们进行正确的操作。一项输入被细化后,可能变成输入与输出交替的动作序列,其中的输出是系统的计算结果或系统对用户的提示信息等。第13页2.设计输出在设计输出时,要进行如下的工作。(1)确定输出设备常见的输出设备有打印机、显示器、绘图仪、文件或数据库表等。对于一些非标准的计算机外部设备的接口程序,可以把它们放在相应的类中。如果要向外系统输出,可以把与外系统的接口程序放在相应的类中。如果要隔离外部设备或外系统的变化对本系统的影响,可以为外部设备或外系统的接口程序单设立类。对于某些复杂的情况,可能还需要考虑同步机制。(2)确定输出的形式和内容输出的形式有文本、表格、图形、图像、声音和视频片段等。输出的内容包括提示信息、系统的计算或处理结果、对输入处理情况的反馈信息等。提示信息告诉用户下面要进行何种输入以及如何输入。对于系统的计算或处理结果的输出,总是伴随着用户输入的命令的执行而出现。若要在窗口或打印机上以报表、报告、图形或窗口上的多媒体演示等形式进行输出,则要先确定每种形式的内容要求,然后把它们各对应于一个或几个类。第14页对于反馈信息,一般是在系统需要较长的时间进行计算时才需要的,表明系统已经接收到命令,正在进行处理,对于这种情况要表示出处理的进度。(3)输出步骤的细化如果系统输出的信息量较大,可以分若干步骤进行输出。一种常见的做法是发一条简单的信息,通知用户如何得到更详细的输出信息。另一种做法是为用户设计一些阅读或浏览输出信息的动作,在这些动作的控制下,展示输出信息中用户所关心的部分。这样,一项输出可能被细化为一个输入与输出交织的过程。细化时考虑的主要因素是如何使用户感到方便,以及输出介质(如显示屏、纸张等)的版面限制。第15页8.3.2命令的组织在设计输入与输出时,还有一项重要的工作要做,那就是设计用户使用系统的命令以及对命令的组织。系统可能有大量的命令,且一条命令可能含有大量的参数和任选项,如果对命令不加任何组织和引导,会给用户带来不便。可采用两种技术措施对命令进行组织:1)分解:将一条含有许多参数和选项的复杂命令分解为若干较简单的命令。2)组合:当一个系统的命令很多时,按照它们的功能或者所属于的子系统,组合成若干命令组,使每组只包含几条命令。这样,命令间就形成了层次结构。第16页按照下面的概念以及用户需求,运用分解与组合技术,实现对命令的定义与组织。基本命令:使用一项独立的系统功能的命令。一个从用况提取出来的人机交互过程是针对一项系统功能的,基本命令正是开始该交互过程并使用该项系统功能的命令。选中一个基本命令,对应的事件要传送到实现该命令功能的系统成分。也即由人机交互部分的对象接收命令后,向问题域部分中实现该功能的对象发消息,请求进行处理。命令步:在执行一条基本命令的交互过程中所包含的具体输入步骤。从一个用况提取出来的人机交互过程的各项输入都是这样的命令步。高层命令:如果一条命令是在另一条命令的引导下选用的,则后者称作前者的高层命令。高层命令是对基本命令的组织,相当于一个命令索引目录。高层命令并不涉及某一项具体的系统功能,只是显示下一层可选的系统功能,以供用户选择。对其常见的设计方式为主菜单条和下拉菜单等。第17页图8-3展示了基本命令及其命令步的结构。a)线性结构b)树形结构(c)半序网状结构(d)一般网状结构第18页图8-3展示了基本命令以及命令步间的关系,图中的实心圆点表示一个基本命令开始的命令步,空心圆点表示后续的一个命令步。若基本命令过多,就需要用高层命令进行组织。可按功能的相似性进行组织,如在常见的菜单子系统中,高层命令“文件”下有“创建”、“打开”、“关闭”和“保存”等基本命令。也可以按子系统结构来组织基本命令,如对于正文编辑子系统和编译子系统,要把属于这两个子系统的全部命令分别组织到高层命令“编辑”和“编译”之下。图8-4说明了高层