第15章
作者:林锐    更新:2021-12-03 17:32
  一个算法如果比其它已知算法所需要的资源都少,这个算法也被称为是有效率的。算法的代价(Cost)是指消耗的资源量。一般说来,代价是由一个关键资源例如时间或空间来评估的。
  毋庸置疑,人们编写程序是为了解决问题。只有通过预先分析问题来确定必须达到的性能目标,才有希望挑选出正确的数据结构。有相当多的程序员忽视了这一分析过程,而直接选用某一个他们习惯使用的,但是与问题不相称的数据结构,结果设计出一个低效率的程序。如果使用简单的设计就能够达到性能目标时,选用复杂的数据结构也是没有道理的。
  人们对常用的数据结构与算法的研究已经相当透彻,可以归纳出一些设计原则:
  (1)每一种数据结构与算法都有其时间、空间的开销和收益。当面临一个新的设计问题时,设计者要彻底地掌握怎样权衡时空开销和算法有效性的方法。这就需要懂得算法分析的原理,而且还需要了解所使用的物理介质的特性(例如,数据存储在磁盘上与存储在内存中,就有不同的考虑)。
  (2)与开销和收益有关的是时间——空间的权衡。通常可以用更大的时间开销来换取空间的收益,反之亦然。时间——空间的权衡普遍地存在于软件开发的各个阶段中。
  (3)程序员应该充分地了解一些常用的数据结构与算法,避免不必要的重复设计工作。
  (4)数据结构与算法为应用服务。我们必须先了解应用的需求,再寻找或设计与实际应用相匹配的数据结构。[Shaffer 1998]
  5.4 用 户 界 面 设 计
  某个人总有办法让自己保持心情愉快、信心十足。有一天,他向一名围棋九段和一名乒乓球世界冠军挑战,结果他全胜了。因为他跟围棋九段打乒乓球,跟乒乓球冠军下围棋。用户界面的编程技术是人们熟悉得不得了的事,我决定讲一讲比较陌生的“用户界面设计美学”。
  有位爱好书画的博士后请我欣赏钢琴演奏会。我从头到尾只听到“叮叮咚咚”的声音,实在享受不到“高雅”,就请这位朋友指点。他虽然也不懂钢琴,却从欣赏书法的角度设法解释如何欣赏音乐。可是我既不懂书法也不懂音乐,真是坐立不安。“美”似乎真的不可言传。我在读本科时,特别喜欢编写用户界面程序,并且常向同学演示、卖弄。我觉得还不过瘾,就写了一篇“用户界面设计美学”的短文[林锐 1997]。凡是路过我实验室的同学都被我逮住,被迫听完我得意之极的朗读,茫然者与痛苦者居多。不久我的朗读便所向披糜,闻声者逃之夭夭。现在我又把那篇短文摘录至此,请您忍着点吧。
  5.4.1 界面设计中美的需求与导向作用
  人们对美的向往和追求是与生俱有的。显然没有人愿意丑化自己的程序,也没有用户嗜好丑陋的界面。软件开发者要设计美,用户要享受美,所以界面的美是开发者与用户的共同需求。
  界面美的概念很抽象,以致让人无法说清楚什么是界面的美。但它同时又很现实,以致人人都可以去欣赏和感受界面美,并且挑剔美中之不足。美学不是一种量化的学问,如果因此而轻视美学指导,必将导致在设计过程中光依赖程序员个人的经验与感觉。由于程序员接受的教育主要是如何使计算机完成工作,而不是人如何工作,因此仅靠程序员主观想象设计而成的界面往往得不到大众用户的认可。
  美的界面能消除用户由感觉引起的乏味、紧张和疲劳(情绪低落),大大提高用户的工作效率,从而进一步为发挥用户技能和为用户完成任务作出贡献。从人机界面发展历史与趋势上可以看出人们对界面美的需求,以及美在界面设计中的导向作用。
  界面设计已经经历了两个界限分明的时代。第一代是以文本为基础的简单交互,如常见的命令行,字符菜单等。由于第一代界面考虑人的因素太少,用户兴趣不高。随着技术的发展,出现了第二代直接操纵的界面。它大量使用图形、语音和其它交互媒介,充分地考虑了人对美的需求。直接操纵的界面使用视听、触摸等技术,让人可以凭借生活常识、经历和推理来操纵软件,愉快地完成任务。更高层次的界面甚至模拟了人的生活空间,例如虚拟现实环境。
  界面的美充分体现了人机交互作用中人的特性与意图,越来越多的用户将通过具有吸引力而令人愉快的人机界面与计算机打交道。
  5.4.2 界面美的内涵
  本节从合适性、风格和广义美三个方面论述界面美的内涵。
  一、界面的合适性
  界面的合适性是指界面是否与软件功能相融洽。如果界面不适合于软件的功能,那么界面将毫无用处,界面美的内涵就无从谈起。所以界面的合适性是界面美的首要因素,它提醒设计者不要片面追求外观漂亮而导致失真或华而不实。界面的合适性既提倡外美内秀,又强调恰如其分。
  合适性差的界面无疑会混淆软件意图,致使用户产生误解。即使它不损害软件功能与性能,也会使用户产生不该有的情绪波动。例如一些软件开发者喜欢为其作品加一段动画演示,以便吸引更多用户的关注。这本是无可非议的,问题在于这演示是否合情合理。如果运行一个程序,它首先表演一套复杂的动画,在后台演奏雄壮的进行曲,电闪雷鸣之后出来的却是一个普通的文本编辑器。整个过程让用户置身于云里雾里,而结果却让用户感到惊谔而不是惊喜。合适性差的界面只会给软件带来厄运。
  二、界面的风格
  界面的风格有两类,一是“一致性”,二是“个性化”。
  商业应用软件的界面设计注重一致性。设计者必须密切注意在相同应用领域中最流行的软件的界面,必须尊重用户使用这些软件的习惯。例如商业软件习惯于设置F1键为帮助热键,如果某个设计者别出心裁地让F1键成为程序终止的热键,那么在用户渴望得到帮助而伸手击F1键的一刹那,他的工作就此完蛋。相信这个用户“一朝被蛇咬,十年怕井绳”。
  目前流行的软件开发工具如Visual C++、Visual Basic、Delphi、C++ Builder、Power Builder等,都能够快速地开发出非常相似的图形用户界面。在Internet/Intranet领域,浏览器几乎成了唯一的客户机程序,因为用户希望用完全一致的软件来完成千变万化的应用任务。
  在娱乐领域的软件中,有个性化的界面自然比泯然于众的界面更具有吸引力。一般说来,计算机专业人员玩过的软件不计其数。界面看多了,真有种“曾经沧海难为水”的感觉。不过当我看到一个叫Sonique的放音乐的软件时,不禁对其界面的创意啧啧称赞,忍不住象贴美女像那样把它贴到书中,如图5.7所示。
  图5.7 Sonique软件的几种界面
  人们经常搞不清楚什么情况下应该追求“一致性”或“个性化”。在大白天,当人们都穿戴整齐时,有些人喜欢只挂几片遮羞布。而当大家都赤条条地在共公浴室洗澡时,却也有人喜欢穿着衣服。
  三、界面的广义美
  尽管界面的美并没有增加软件的功能与性能,却又是必为可少的。用户使用界面时,除了直接的感官美感外,还有很大一部分美感是间接的,它们存在于人们的使用体验中,例如方便,实用等。与图形用户界面相比,命令行是最原始的界面,它难记又难看。但对于熟练的用户而言,他们乐于使用命令行以获得高效率。命令行因具有高效率而赢得了专业人士的喜爱,早期的Unix系统就是彻头彻尾的命令系统。可以说,一切有利于人机交互的界面设计因素都具有广义美。
  界面设计的一些特殊考虑也体现了广义美,如设法使残障人也可以使用软件。IBM公司在1985年已经创建了残障人国家支持中心。Apple公司的专门教育办公室则提供了一些有利于残障人使用的计算机信息产品。
  5.5 系统设计示例
  ——支持协同工作的交互式三维图形软件开发系统
  本节论述“支持协同工作的交互式三维图形软件开发系统”的系统设计,作为本章的示例( 取材于作者的博士论文工作[林锐 2000])。
  5.5.1 设计背景
  图形标准在图形领域有着重要的地位,它不仅加速了3D应用程序的开发,而且使3D应用程序的可移植性更好。历史上曾出现的图形标准(或API)有Core、GKS、PHIGS、PEX、GL、Dore、RenderMan、Hoops、OpenGL等等。经过竞争与淘汰,目前OpenGL成为国际上公认的3D图形工业标准,在Unix与PC平台得到广泛应用。OpenGL提供了数百个库函数,可以方便地绘制具有真实感的3D图形。但是在开发交互式的3D图形应用程序时,图形的绘制只是一部分工作,更多的工作集中在场景数据结构、图形对象、三维交互和图形用户界面的设计上。
  由于OpenGL与窗口系统无关,不提供任何交互手段,必须由程序员自己编写所有的交互功能。并且OpenGL 的编程接口是低级的C函数,不提供可复用的对象库或者应用程序框架,开发效率不高。