用户界面 |
|
本部分将概述基于窗口的用户界面的组织结构。此概述是理解本指南其余部分所必需的内容。
基于窗口的用户界面分为多个窗口。各个窗口可以在屏幕上四处移动、彼此叠放或缩小为图标。一个系统通常有一个主窗口和很多辅助窗口。主窗口处理与用户的主要交互,并且往往包含有任意数量的对象。辅助窗口用于提供有关主窗口中各对象和对这些对象的各项操作的详细信息,以支持用户与主窗口的交互。
主窗口一般包含有用户将与之交互的任意数量的对象。通常,用户与系统交互的方式是首先选择一个或几个对象(例如通过单击对象),然后选择(例如通过菜单)将要对所有已选对象执行的操作。常用的操作包括剪切、复制、粘贴、删除和查看属性。
主窗口中一般会有一个菜单栏,用户可以从中选择操作。用户还可以通过弹出菜单(右键单击对象本身)和直接操纵(单击并拖动对象)来选择操作。当主窗口无法同时显示全部对象时,用户一般可以通过用滚动条滚动屏幕来浏览未显示的对象,也可以调整窗口的大小。此外,主窗口通常可以分成多个窗格(即窗口的子区域),用户也可调整这些窗格的大小。
显示了一个文档的 Microsoft® Word® 97 主窗口。它包含段落和字符等对象。(尽管这里提供的示例来自 Microsoft® 平台,但这些指南决不局限于这一特定平台。)
显示了一个邮箱的 Microsoft® Outlook 主窗口。它包含邮件等对象。
用户界面中的复合对象是显示为由其他对象所组成的对象。例如,一个段落是多个字符的复合对象,而一个复杂图形对象是更多个原始图形对象的复合对象。
辅助窗口用于支持主窗口,它们可以提供有关主窗口中各对象以及对这些对象的各项操作的详细信息(如特征)。主窗口中通常只显示对象的几项特征。要查看对象的所有特征,可以打开特征窗口(辅助窗口),该窗口将显示对象的所有属性。一般情况下,用户可以利用各种控件(例如切换按钮、单选按钮、标尺、组合框和文本字段)来更改这些属性。
显示段落特征的 Microsoft® Word® 97 辅助窗口(特征窗口)。
显示邮件特征的 Microsoft® Outlook 特征窗口。
请注意,主窗口与辅助窗口之间的差异并不十分明显,并且有时很不确定:它们可能会显示复杂程度相同的信息。例如,比较上面的文档窗口与邮件窗口:文档窗口被当作是主窗口,而邮件窗口被当作是辅助窗口。
但是,主窗口与辅助窗口之间存在两项主要的差异:
除特征窗口之外,还有其他类型的辅助窗口,例如对话框、消息框、调色板和弹出窗口。
提供段落和字符查找操作的 Microsoft® Word® 97 对话框。
许多应用程序都是基于文件的程序。用户可以通过对文件对象执行打开操作(例如双击文件夹中的文件图标)来启动这些应用程序。它们的主窗口将显示存储在该文件中的对象。常用的文件操作包括保存、另存为、打开、新建等,它们一般都可以从主窗口的文件菜单中进行选择。主窗口通常还可显示多个文件(也称为多文档接口,即 MDI),从而使用户可以在不同的文件之间切换。
显示文件和文件夹的 Microsoft® Windows 95 文件管理窗口。
要使主窗口确实便于使用,关键是要在显示所包含的对象及其属性时利用各种可视化元素。您可以显示多于识别所必需的属性,这种做法具有以下优点:
可视化元素包括:
这些维度将在下面进行说明。但是,在进行对象的可视化设计时应注意可用的屏幕区域。在利用屏幕区域时应尽量减少屏幕占用,并考虑若干可视化元素的使用是否值得占用额外的屏幕区域。有时,只需一个名称列表就可很好地满足用户的需要,因为用户真正需要的是看到尽可能多的对象。
要注意使用(或扩展)这些可视化元素来唯一标识对象,这一点很重要。我们还将在下面对这一主题进行讨论(参见下文中的“识别”)。
还要注意,可视化元素可以结合时间元素来使用,例如通过移动对象(它们的位置随时间而变化)或通过更改对象的形状或颜色(它们的状态随时间而变化);后一种情况将在下面的“形状”部分中讨论。
位置可提供的最直观的信息是真实世界的位置。例如:
位置有时与显示真实大小有关(例如,CAD 程序和 WYSIWYG 编辑器),有时则与之无关(例如,当对象的大小比对象间的距离要小得多时)。
例如,假设我们有一个航班预定系统,用户必须在该系统输入他们的目的地。该系统可能的表示方案是显示一个包含不同机场的地图(其中机场为对象)。显然,机场的真实大小无关紧要(并且小得看不见),因此所有机场均显示为大小相同的图标。
以上示例还说明,只要可以帮助用户识别对象,即使真实位置不相关,也可以使用真实位置。在该示例中,用户不需要知道机场的位置。但是,如果用户熟悉地理情况,在地图上查找目的地就会比在列表中查找更为容易。
您也可以使用位置来代表“虚拟的”真实位置。例如,假设有一个家庭购物系统,用户可以在该系统中购买不同商店的商品。该系统可能的表示方案是显示一个(虚拟)购物中心的示意图,不同商店位于该购物中心的不同位置(其中商店为对象)。该示意图与这些商店的真实位置无关,使用它只是为了利用用户的空间记忆能力:记住某一坐标位置要比记住列表或分层结构中的某一项更容易。
位置的另一用途是显示对象之间的关联关系:具有相同垂直位置的所有对象以一种方式关联关系在一起,而具有相同水平位置的所有对象则以另一种方式关联关系在一起。电子表格就是该情形的示例。
一种类似的用途是用一个轴来表示某项属性的取值范围。例如,在一个旅行预订系统中,可以沿水平时间轴表示已预订的航班(其中航班为对象),以说明它们的时间关系、它们的飞行时间长度以及用户将在各个目的地停留的时间长度。这些都是用户无需知道的内容,但如果它们在屏幕上不会显得太刺眼,还是最好向用户显示。
如果您不想为了表示整个取值范围而占用这样多的屏幕区域,可以隐藏对象间的距离。在旅行预订示例中,这意味着所有已预订的航班均以无间隔的方式水平排列,但第一个航班靠左,第二个航班紧靠在第一个的右侧,依此类推。用户将无法看见他们在各个目的地停留的时间长度,但他们可以看见航班的飞行时间长度。
很多情况下,“大小”必须与位置表示同样的内容。例如,在 CAD 系统中,大小显然必须表示真实世界中的大小。不过,我们有时可以随意选择大小所表示的内容,例如,地图上用来支持目的地选择的机场。
在这些情况下,大小所表示的内容应该最直观地表现对象的真实大小。对于文件,对象大小应表示所占用的磁盘空间量。对于银行帐户,对象大小应表示余额。对于大多数大小,使用对数比例要比使用正比比例更好,因为正比比例通常会占据过多的屏幕区域。
实际上,大小是如此直观,即使它不相关也可以考虑将其显示出来。毕竟,在真实世界中,不同的事物(对象)由于其不同的大小而占据了我们视野的不同部分。这种大小并不显得刺眼,而只是帮助我们辨别事物。同样,如果在用户界面中使用不同的大小,通常会有助于用户辨别不同的对象。
一般情况下,即使有可能用水平长度表示一项属性并用垂直长度表示另一项属性(这种方法很不直观,可能使用户感到迷惑),大小也应只用来表示一项属性。
水平长度或垂直长度应该与大小所表示的属性成(对数)正比关系:其他分量应当是固定的(或者取决于其他因素,例如名称的长度)。如果水平长度和垂直长度都与同一属性成正比,大小就很少会添加任何值:它显得比较刺眼并且占据了太多的屏幕区域。
在图形用户界面中,形状通常由图标表示;最好用形状来表示类型,因为表示外观差异要比表示类型差异更直观。在真实世界中,同类事物的不同对象通常具有相似的外观,而不同类型的对象则具有不同的外观。例如,不同的椅子对象都具有相似的外观(它们都有四条腿、一个座板和一个靠背),而汽车的外观与椅子的外观则具有很大的差异。
那么,如果要判断不同的对象何时属于不同的类型,应使用什么样的标准呢?毫无疑问,不同的类应当被当作不同的类型。此外,某些属性是“类型式”的属性。这些属性必须具有一组数量有限的可能值,并且它们的值通常会确定对象的功能或用途(就执行操作和处理其他属性的可能值而言)。这与真实世界的情况相同;椅子和汽车的最大差异在于它们的用途:椅子用于休息,而汽车用于交通。
但是,在分析可以将哪些对象当作不同的类型时,最重要的一点是:用户将会把哪项属性当作一种类型。
如果您没有多个类也没有任何“类型式”属性,则可以使用图标来表示其他一些有限值属性的不同值,但前提是该属性必须对用户具有重要的意义。
除了显示类型之外,图标还可用来显示对象的不同状态。当您选中某个对象时,它通常显示为这两种形式中的一种:颜色变黑,或周围出现一个矩形框。另一种可能的状态是,您打开了该对象的特征窗口。通常,还可能会显示其他应用程序专有状态,例如电子邮件是否已被阅读。务必要确保状态表示不会使用户更难于辨认类型,而类型表示不会使用户更难于辨认状态。
根据人们的视觉感知,可以将颜色划分为三种成分。它们是:色彩(例如红、蓝、褐等)、饱和度和暗度。但是,不应使用不同的颜色成分来表示不同的属性,因为这会使用户难于感知。
色彩可用于表示类型或可能值数量有限的属性。不过,在这种情况下最好使用图标,因为通过对图标的设计,可以让用户知道它代表什么值,而颜色含量和(大多数类型的)值之间却没有如此直观的对应关系。但如果找不到直观的图标,则可以用色彩来替代图标。另外,如果您有多个类型图标,也可以使用色彩来区分这些类型图标的类别(这样,具有某一相似含义的图标为红色,而具有另一含义的图标为蓝色,等等)。
饱和度可用来表示具有某一取值范围的属性,但这将使用户界面显得不太美观并且相当刺眼:使用不同的饱和度会使眼睛感到疲倦,而使用较高的饱和度则会相当刺眼。
暗度是最便于使用的颜色成分。它可以用来表示具有一个取值范围的属性,并且由于它不很刺眼,也可以用于表示不太重要的属性。为了使暗度不刺眼,不要从无暗度(白色)转到全暗度(黑色),而只应从低暗度(淡灰)转到高暗度(深灰)。对于许多由用户来创建大多数对象的系统,按照使用时间(例如自上次更改后的使用时间)显示对象是一种非常有用的方法。这有助于用户确定他们将要处理的对象(这些对象通常是“自上次更改后的使用时间”最短的对象)。所以,如果您没有确实需要向用户显示的属性(具有一个取值范围),就可考虑显示时间。
通常,颜色可用于使图标显得更加美观,同时也有助于用户迅速辨别不同的图标。如果您提供了多色的图标,则不应将颜色用于其他目的。
由于有些人是色盲,而且并非所有屏幕都支持彩色,所以不要将颜色当作显示某些重要信息的唯一方式。另一方面,如果颜色的使用经过了精心的设计和适当的调和,就可以使用户界面显得更加美观。
用户必须能够唯一地识别每个对象。有时,其他可视化元素已足够用来进行识别,但多数情况下并不是这样。在图标内或图标附近显示名称是最常用的识别支持技术。名称的优点在于,很小的屏幕区域即可显示大量明显不同的名称。
如果某个属性值(通常是文本值)可以生成名称,名称就是最佳的选择。另一个方式是让用户在创建对象时指定名称,但这需要一些时间,因而会降低可用性。
有时,您可以在制作图标时将名称放在图标内。这将节省屏幕区域,并能明确地指示出图标和名称之间的关系。但是,它也会产生以下问题:
结果,您通常不得不将名称显示在图标的下方或右侧,这样做的优点是占用的屏幕区域较少,但缺点是对象(图标和名称)的宽度大大超过了高度。如果您根本没有足够的空间来显示名称(这种情况是可能的,因为您通常不用名称即可识别图标),则可以通过弹出窗口来显示名称。当您将鼠标指针放在图标上时,弹出窗口就会显示出来。
如果可以在字体和属性值之间找到直观的对应关系(例如可以使用黑体或斜体来区分对象或强调重要性),则可以用名称的字体来显示有限选项的属性。但在多数情况下不适宜使用字体,因为它会显得相当刺眼并且不太直观。
如果您显示了名称(或者为此显示了允许用户更改的任何其他文本),则应支持在主窗口中直接编辑所显示的名称。也可以让用户请求重命名操作,然后输入新名称;或者让用户打开特征窗口,然后在特征窗口中编辑名称。在主窗口中直接编辑名称不仅速度更快,而且还支持“在哪里看见在哪里更改”的原则。
如果应该更改一个对象组或对其执行操作,而该对象组的组成方式使用户能够表达用于识别它们的选择标准,那么主窗口的搜索工具就可以通过始终选择符合标准的所有对象来解决搜索问题。
可以通过两种方式来对搜索进行管理:
在很多情况下,可能会需要结合使用这两种方法,例如在顺序搜索窗口中提供“全选”按钮,或在平行搜索窗口中提供“查看下一个”按钮。
排序的示例之一可能是:系统按照名称或属性值的字母顺序垂直排列所有对象。然后,用户可以通过滚动屏幕来浏览对象。就实施和用户操作而言,这可能是最简单的浏览支持。如果用户总是知道所需对象的名称(或排序所依据的属性),排序就可以获得最佳的效果。电话簿是应按照这种方法来实施的系统的一个示例。主窗口通常应提供用于更改排序顺序和/或标准的操作。
用户控制继承的示例之一为 WYSIWYG 编辑器,在这种编辑器中,您将定义每个段落所属的“样式”,然后要定义如何应用该样式(例如,属于该样式的每个字符)。
与搜索工具相比,用户控制继承的缺点是它只支持对多个对象的属性(也可能是关联关系)进行更改,而不支持对对象执行操作。此外,由于用户必须明确地定义和维护组(即可用的样式),所以用户控制继承也增加了用户的工作。它也是一个较为复杂的概念。
但是,如果无法为对象指定搜索标准,或者用户需要对属性值进行相对更改(如增加二),那么提供用户控制继承也许是一种解决方案。
要使用户控制继承有用,类必须具有使对象可分成不同组的性质。这样的组应当对用户具有某种逻辑意义,并且其中的大多数属性值都是相同的。
与搜索工具相比,用户控制继承的优点是它能支持覆盖(例如更改属性值,但前提必须是该属性值未在对象中明确定义)。用户控制继承还可以使用户作出更一般的(因而具有强大功能的)属性值定义,例如,从该样式继承字体但使它的大小增加两个像素。当对象组拥有易于指定的搜索标准时,用户控制继承就尤为有用。
支持用户控制继承的类可以继承类本身。也可以创建一个新类,从该新类中继承。使类继承它自己能够获得稍强大一些的功能,因为相同的对象既可用作继承的来源又可用来执行原本为该对象设计的操作,例如既作为发票又作为帐目等。这将减少用户(和系统)需要管理的类的数量。另一方面,创建新类作为继承来源的优点是更易于理解,因为它将继承和正常的类操作明确地分隔开来。大多数情况下,创建新类是最佳的解决方案,尤其是当用户对计算机和面向对象模型没有太多经验时。您所创建的新类最好能继承它自己,以便支持多级别的继承。
对于大多数系统,用户一般都需要更改特定对象的继承组,因为他们事先并不确切知道应如何构建继承组。所以应为此提供相应的操作。
如果您决定在系统中支持用户控制继承,则应分析需要继承什么内容(属性、关联关系、类),然后只支持对这些内容的继承。这虽然会使(用户和开发人员)管理功能的方式具有较少的一般性,但同时也使其变得更加容易。对于应在您的新类中继承的内容,需建立其模型。这样,就可以在继承类和被继承类中建立很多属性的模型。请记住,用户控制继承的作用是节约用户的时间,而不是节约您的时间。如果类继承它自己,即意味着所有内容都是可以继承的。
请确定用户是否确实需要创建被继承类的新对象,或者系统是否可以一次性地提供足够数量的对象。如果禁止用户创建新的对象,将极大地降低继承的灵活性,但同时也会使其操作更加容易。
您还需决定,对继承对象中数字属性的更改是否应相对于被继承的值还是应作为固定值来进行解释。例如,一个对象继承了字体大小 12 而用户将它更改为 14。按照相对解释,系统将把该对象的字体大小记为被继承值 +2;也就是说,如果被继承对象更改了字体大小,继承对象也将随着更改字体大小。如果您支持相对解释,则应在被继承对象的属性中(因为这是您查看继承的地方)说明这一点。务必要将相对解释展示给用户(例如,“字体大小:12+2=14”而不是“字体大小:14”)。您可以探究各种情况,以确定哪些情况需要相对解释,哪些情况需要固定解释。您也可能会需要同时支持这两种解释。
由于用户控制继承仅针对于中高级用户,所以在设计时必须确保它不会影响正常的使用(例如,当用户不使用继承时),否则,入门用户将会感到很困难。
请记住,您构建用户控制继承的目的是为了让用户使用起来很轻松,所以它不必具有一般性或纯粹性,但它必须便于使用。
浏览分层结构使用户(也可能是系统)可以将对象分类,并将其显示在按分层结构组织的主窗口或复合对象中。浏览分层结构可以让用户只需搜索一个(或少数几个)类别。这将减少需要在某一给定时间点显示的对象数量。其缺点是用户(通常)需要进行分类管理。该技术的一个示例是文件浏览器:使用目录或文件夹的目的是为了帮助用户查找文件。
窗口大小和位置通常完全由用户来控制。不过,您也可以允许系统影响窗口的大小和位置,以减少窗口占用。
主窗口越大,可显示的对象就越多,但占用的屏幕区域也更多。主窗口通常应该在不占用过多屏幕区域的前提下显示尽可能多的对象。
对主窗口大小的进一步限制可能是:如果您经常需要与其他应用程序平行使用该应用程序,则可能要将窗口的默认大小最大化为屏幕的一半(相对于全屏幕)。
设置主窗口的默认位置时,要使它尽可能少地遮盖其他应用程序。如果您必须遮盖某些窗口,则应选择那些在最长时间内未被使用的应用程序,并至少要显示这些窗口的一小部分,使用户可以很容易地激活它们。
采用上述规则的缺点是,它将从用户手中夺取部分控制权(系统将在未经要求的情况下调整窗口大小,并且不会记忆用户在会话之间的重新定位操作)。所以,如果您采用这些规则,就应该允许用户将其关闭(为用户提供一个控件)。
对于辅助窗口,在设置它们的大小和位置时,应确保它们不会遮盖它们的调用窗口,并且(可能的话)要确保它们不会遮盖其他辅助窗口。如果必须覆盖它们的调用窗口,则要确保它们不会覆盖所选的对象。覆盖重要内容(如所选对象)是辅助窗口的一种常见可用性缺陷。
对于主要主窗口之外的主窗口,同样应采用上一段中的大小规则。
但在放置对话框时,应该让它们遮盖活动窗口。由于它们一般是临时的小窗口,所以用户通常不需要在对话框窗口打开的同时看见活动窗口。通过将对话框放在活动窗口之上,可确保用户能够对对话框作出响应,并将减少必需的鼠标操作,因为鼠标指针通常已位于活动窗口之上。
对于特征窗口,应根据属性数量来确定其大小。如果其大小太大(大约占屏幕的 1/4),则应使用更多的选项卡。
所有应用程序配置都应该在会话之间进行保存(而不必让用户指定进行该操作)。同时还应保存窗口的大小和位置、所选的视图类型以及滚动条的位置。当用户重新启动应用程序时,其外观应当与上次退出时完全一样。之所以要这样做,是因为用户在启动会话时要做的第一件事通常是返回他们在退出上次会话时所处的配置。
联机帮助是系统中非常重要的组成部分。对于大多数系统,精心设计的帮助系统甚至能代替用户手册。许多项目都投入了大量的精力来构建和制作手册,然而事实上大多数用户都从不使用手册。所以,您应当考虑将这些精力投入到制作一个有效的帮助系统中。
应考虑到多种可能的帮助工具:
对上下文相关帮助和向导的需要可能会在使用测试过程中确定。如果在使用测试过程中用户不知道用户界面有哪些不同部分,则表明需要使用上下文相关帮助。如果他们在执行某项任务时感到困难,则表明需要使用向导。
许多帮助系统存在的问题是,它们要么是为初学者编写的(用了大量文字来解释显而易见的内容),要么是为专家编写的(如有些参考手册,它们几乎需要用户与编写该应用程序的程序员知道同样多的内容)。对于大多数系统来说,多数用户都处于“正在提高的中级”水平。应该为他们编写帮助文本。
虽然撤销通常难于实现(实施),但它却是非常有用的功能。由于用户不必担心会破坏什么内容,他们因而能够更快学会使用系统。撤销还降低了丢失信息的风险。避免丢失信息的另一种方法是要求用户确认可能导致信息丢失的所有操作。但它通常算不上一种好方法,因为这种方法将增加一定量的交互操作,并且用户不久就会开始不自觉地加以确认,从而使该方法不再有效。
一种比较费劲的方法是提供重复并在可能情况下提供多级别的撤销/重复。但是,第一个撤销级别即可实现大部分增加的可用性。
如果您要提供宏,一种有用的方法就是使用一个代理来持续监视用户的操作,以查找重复的交互序列。一旦发现重复的交互序列,代理就为它创建一个宏(在询问用户并得到许可后)。例如,用户已经对两个正文段落使用“下划线”,并且用户每次使用“下划线”后就立即将正文颜色更改为蓝色。然后,代理应询问用户是否需要建立一个宏,对所选的正文段落执行“下划线”和“将颜色设置为蓝色”两项操作。如果用户同意,代理就应创建这样一个宏和一个执行宏的按钮(或菜单项)。
如果用户在记录宏的过程中选择了某个对象,这通常应被解释为“Delta”指定,即相对于前一项选择所进行的选择(如“选择下一个”、“选择第一个子对象”等)。
而对象属性的变化是否应被解释为 Delta 指定(例如,将属性值从 12 到 14 的变化解释为增加 2,而不是解释为设置为 14)并没有这样明显。如果将这种变化解释为 Delta 指定,则通常可以获得更强大的功能,因为要将多个对象的属性更改为固定值,一般都可以通过选择多个对象并打开其属性窗口来完成(在属性窗口中您可以一次性地将属性设置为 14)。
类与类之间的关联关系在许多情况下都是双向的,这意味着在真实的用户界面中,关联关系将同时在双方对象上显示。如果用户在注意对象 A 的同时可以看见 A 与对象 B 相关联,那么用户通常也希望出现相反的情况(即,在注意对象 B 的同时可以看见 B 与 A 相关联)。这种关联关系通常显示在对象的特征窗口中,您可以按名称来识别被关联关系的对象。
通常,在主窗口中很难显示对象之间的关联关系。如果将关联关系显示为箭头或线条,则常常会产生既不美观又刺眼的区域。显示关联关系的一种好方法是:当鼠标指针放在一个关联关系对象上时,突出显示所有被关联关系的对象。这种方法的一个示例是,当文档编辑器中的脚注与字符关联关系时,如果将鼠标指针放在被关联关系的字符上,脚注就会突出显示。
© 1987 - 2001 Rational Software Corporation。版权所有。