【正文】
交互,如常見的命令行,字符菜單等。由于第一代界面考慮人的因素太少,用戶興趣不高。隨著技術(shù)的發(fā)展,出現(xiàn)了第二代直接操縱的界面。它大量使用圖形、語音和其它交互媒介,充分地考慮了人對美的需求。直接操縱的界面使用視聽、觸摸等技術(shù),讓人可以憑借生活常識、經(jīng)歷和推理來操縱軟件,愉快地完成任務(wù)。更高層次的界面甚至模擬了人的生活空間,例如虛擬現(xiàn)實(shí)環(huán)境。界面的美充分體現(xiàn)了人機(jī)交互作用中人的特性與意圖,越來越多的用戶將通過具有吸引力而令人愉快的人機(jī)界面與計(jì)算機(jī)打交道。界面美的內(nèi)涵本節(jié)從合適性、風(fēng)格和廣義美三個(gè)方面論述界面美的內(nèi)涵。一、界面的合適性界面的合適性是指界面是否與軟件功能相融洽。如果界面不適合于軟件的功能,那么界面將毫無用處,界面美的內(nèi)涵就無從談起。所以界面的合適性是界面美的首要因素,它提醒設(shè)計(jì)者不要片面追求外觀漂亮而導(dǎo)致失真或華而不實(shí)。界面的合適性既提倡外美內(nèi)秀,又強(qiáng)調(diào)恰如其分。合適性差的界面無疑會(huì)混淆軟件意圖,致使用戶產(chǎn)生誤解。即使它不損害軟件功能與性能,也會(huì)使用戶產(chǎn)生不該有的情緒波動(dòng)。例如一些軟件開發(fā)者喜歡為其作品加一段動(dòng)畫演示,以便吸引更多用戶的關(guān)注。這本是無可非議的,問題在于這演示是否合情合理。如果運(yùn)行一個(gè)程序,它首先表演一套復(fù)雜的動(dòng)畫,在后臺演奏雄壯的進(jìn)行曲,電閃雷鳴之后出來的卻是一個(gè)普通的文本編輯器。整個(gè)過程讓用戶置身于云里霧里,而結(jié)果卻讓用戶感到驚諤而不是驚喜。合適性差的界面只會(huì)給軟件帶來厄運(yùn)。二、界面的風(fēng)格界面的風(fēng)格有兩類,一是“一致性”,二是“個(gè)性化”。商業(yè)應(yīng)用軟件的界面設(shè)計(jì)注重一致性。設(shè)計(jì)者必須密切注意在相同應(yīng)用領(lǐng)域中最流行的軟件的界面,必須尊重用戶使用這些軟件的習(xí)慣。例如商業(yè)軟件習(xí)慣于設(shè)置F1鍵為幫助熱鍵,如果某個(gè)設(shè)計(jì)者別出心裁地讓F1鍵成為程序終止的熱鍵,那么在用戶渴望得到幫助而伸手擊F1鍵的一剎那,他的工作就此完蛋。相信這個(gè)用戶“一朝被蛇咬,十年怕井繩”。目前流行的軟件開發(fā)工具如Visual C++、Visual Basic、Delphi、C++ Builder、Power Builder等,都能夠快速地開發(fā)出非常相似的圖形用戶界面。在Internet/Intranet領(lǐng)域,瀏覽器幾乎成了唯一的客戶機(jī)程序,因?yàn)橛脩粝M猛耆恢碌能浖硗瓿汕ё內(nèi)f化的應(yīng)用任務(wù)。在娛樂領(lǐng)域的軟件中,有個(gè)性化的界面自然比泯然于眾的界面更具有吸引力。一般說來,計(jì)算機(jī)專業(yè)人員玩過的軟件不計(jì)其數(shù)。界面看多了,真有種“曾經(jīng)滄海難為水”的感覺。不過當(dāng)我看到一個(gè)叫Sonique的放音樂的軟件時(shí),不禁對其界面的創(chuàng)意嘖嘖稱贊,忍不住象貼美女像那樣把它貼到書中。人們經(jīng)常搞不清楚什么情況下應(yīng)該追求“一致性”或“個(gè)性化”。在大白天,當(dāng)人們都穿戴整齊時(shí),有些人喜歡只掛幾片遮羞布。而當(dāng)大家都赤條條地在共公浴室洗澡時(shí),卻也有人喜歡穿著衣服。三、界面的廣義美盡管界面的美并沒有增加軟件的功能與性能,卻又是必為可少的。用戶使用界面時(shí),除了直接的感官美感外,還有很大一部分美感是間接的,它們存在于人們的使用體驗(yàn)中,例如方便,實(shí)用等。與圖形用戶界面相比,命令行是最原始的界面,它難記又難看。但對于熟練的用戶而言,他們樂于使用命令行以獲得高效率。命令行因具有高效率而贏得了專業(yè)人士的喜愛,早期的Unix系統(tǒng)就是徹頭徹尾的命令系統(tǒng)??梢哉f,一切有利于人機(jī)交互的界面設(shè)計(jì)因素都具有廣義美。成功的用戶界面(GUI)現(xiàn)在,讓我們談?wù)勔恍┏晒Φ腉UI設(shè)計(jì)。成功的GUI設(shè)計(jì)具有很多共同的特征。最重要的,出色的圖形用戶界面(GUI)應(yīng)該是非常帶有直覺特征的。實(shí)現(xiàn)這些的一個(gè)方式是盡可能的采用現(xiàn)實(shí)世界中的抽象(暗示、隱喻)。例如,我最近看到一個(gè)用Visa卡和Master(萬事達(dá))卡圖標(biāo)做為按鈕圖標(biāo)的程序,這個(gè)按鈕用來指示用戶如何付款,這個(gè)圖形立刻使用戶產(chǎn)生一種直覺并幫助他們更快的學(xué)會(huì)使用程序。出色的用戶圖形界面的另一個(gè)重要特征是速度,更專業(yè)一點(diǎn)說,是響應(yīng)速度。很多速度問題的處理是通過GUI而非硬件。根據(jù)應(yīng)用程序的類型,速度可能是決定程序是否被用戶群接受的成敗關(guān)鍵。例如,如果你的程序是面向在線事務(wù)處理(OLTP)的,操作太慢很快就會(huì)導(dǎo)致用戶產(chǎn)生放棄系統(tǒng)的念頭。你可以用幾種方法使用戶界面上顯得很快的樣子。除非絕對必要,不要重繪屏幕。另一個(gè)方法是使這個(gè)屏幕的所有區(qū)域同時(shí)可用,而非一個(gè)區(qū)域一個(gè)區(qū)域的來。另外,根據(jù)用戶的熟練程度,應(yīng)該在用戶界面中加入一些功能,這些功能可以讓熟練用戶在不同的區(qū)域快速的輸入數(shù)據(jù)。這些功能包括重復(fù)功能、快捷鍵、帶有有意義的圖標(biāo)的按鈕等等,所有這些可以使速度快的用戶可以控制界面并加快數(shù)據(jù)的輸入。應(yīng)該怎樣和不該怎樣每個(gè)好的開發(fā)者都應(yīng)該把目標(biāo)定在盡可能的設(shè)計(jì)最好的圖形用戶界面。 但如何把這個(gè)目標(biāo)變成現(xiàn)實(shí)呢?下文中,在各個(gè)章節(jié)給出了圖形用戶界面設(shè)計(jì)的規(guī)范(標(biāo)準(zhǔn))。同任何出色的專業(yè)人士一樣,你需要一些可重復(fù)的成功設(shè)計(jì)法則。我們就是用這里提供的法則為我們的客戶服務(wù)并教授了超過20000名的國內(nèi)國際GUI設(shè)計(jì)專業(yè)的學(xué)生。這些規(guī)范也會(huì)對你有幫助的。對人的理解程序必須反映用戶的視角和行為。要充分理解用戶開發(fā)者首先要理解人,因?yàn)槲覀兌季哂泄餐奶卣?。人類通過辨別比通過記憶學(xué)習(xí)起來更容易。要經(jīng)常試著提供一個(gè)數(shù)據(jù)列表給用戶,而非讓用戶憑記憶自己輸入數(shù)據(jù)。普通人能記住2000到3000單詞,但卻可以認(rèn)出50000單詞。留意不同的視角很多設(shè)計(jì)者在設(shè)計(jì)圖標(biāo)或程序整個(gè)行為的時(shí)候會(huì)不自覺的陷入視角陷阱。最近我看到一個(gè)圖標(biāo),它用于在一個(gè)會(huì)計(jì)系統(tǒng)中指明匯總。為了標(biāo)示這個(gè)功能,設(shè)計(jì)者花了很多心思在畫一個(gè)把桂圓組合到一起的圖標(biāo)。不幸的是,這個(gè)系統(tǒng)的用戶對這個(gè)圖標(biāo)的喻意更本就沒有一點(diǎn)概念,雖然它從設(shè)計(jì)者的視角來看是非常直觀的。保留圖標(biāo)列表中給出了標(biāo)準(zhǔn)圖標(biāo)。表示安裝,表示存盤,查詢等。清楚一致的設(shè)計(jì)很多GUI程序?qū)ψ罱K用戶常常不夠清楚。一個(gè)增強(qiáng)程序清楚表述能力的有效方法是使用列表中的保留字進(jìn)行開發(fā)。用戶中最常見的抱怨是某個(gè)術(shù)語表述的不清楚或不一致。我常??匆婇_發(fā)者們激烈的爭論按鈕或菜單項(xiàng)上用那個(gè)術(shù)語更合適,而同時(shí)就在一墻之隔的另一群開發(fā)者也在爭論同樣的問題,在程序發(fā)布之后,一個(gè)屏幕上可能寫著“項(xiàng)目”,而下一屏卻寫著“產(chǎn)品”,而第三屏又變成了“貨物”,可是其實(shí)這三個(gè)術(shù)語是指的同一個(gè)東西。這種一致性的缺乏導(dǎo)致用戶非常迷惑并產(chǎn)生操作失誤。 保留字列表圖二 文本 含義和行為 是否出現(xiàn)在按鈕上 是否出現(xiàn)在菜單上 MnemonicKeystrokes 熱鍵? ShortcutKeystrokes 快捷鍵? OK 接受輸入的數(shù)據(jù)或顯示的響應(yīng)信息,關(guān)掉窗口 Yes No None Return or Enter Cancel 不接受輸入的信息,關(guān)掉窗口 Yes No None Esc Close 結(jié)束當(dāng)前的任務(wù),讓程序繼續(xù)進(jìn)行;關(guān)掉數(shù)據(jù)窗口 Yes Yes Alt+C None Exit 推出程序 No Yes Alt+X Alt+F4 Help 調(diào)出程序的幫助信息 Yes Yes Alt+H Fl Save 保存數(shù)據(jù),停留在當(dāng)前窗口 Yes Yes Alt+S Shift+Fl2 Save As 用新名字保存數(shù)據(jù) No Yes Alt+A F12 Undo 撤銷前一個(gè)動(dòng)作 No Yes Alt+U Ctrl+Z Cut 剪切高亮字符 No Yes Alt+T Ctrl+X Copy 拷貝高亮的文本 No Yes Alt+C Ctrl+C Paste 在插入點(diǎn)粘貼被拷貝或剪切的文本 No Yes Alt+P Ctrl+V 同常見軟件保持一致性的設(shè)計(jì)出色的用戶界面在程序中將實(shí)現(xiàn)同用戶以前用過的其它成功軟件一致的動(dòng)作。寫商用程序軟件的時(shí)候應(yīng)該盡可能的給用戶提供這種一致性。例如,EmbassySuit和CourtyardMarriot連鎖旅店增長的非???,因?yàn)樯虅?wù)旅行者知道這些連鎖的旅店能為他們提供相似的客房和其它大體差不多的服務(wù)。最次也使得商務(wù)旅行者不必每到一個(gè)新的城市都為找新旅店發(fā)愁。你的軟件的商務(wù)用戶有同樣的需求。你程序中提供的每個(gè)新的特色都可能讓用戶感到焦躁,迫使他們反復(fù)試驗(yàn)或著給你的維護(hù)小組打昂貴的長途電話。提供可視反饋如果你曾有過傻傻的瞪著自己電腦上顯示的沙漏等著一個(gè)操作結(jié)束的時(shí)候,就會(huì)明白沒有可視化的反饋信息有多糟糕。你的用戶非常希望知道一個(gè)操作會(huì)花費(fèi)多長的時(shí)間以便準(zhǔn)備好足夠的耐心。作為最一般的規(guī)則,當(dāng)一個(gè)操作超過7~10秒的時(shí)候,大多數(shù)用戶希望看到一個(gè)帶有進(jìn)度條的消息對話框。時(shí)間的長短要根據(jù)用戶類型和應(yīng)用程序的特點(diǎn)來調(diào)整。提供聲音反饋上周,我有幸乘坐了一次電梯,這部電梯用悅耳的聲音通知乘客他們到那一層了。大樓非常新,而首先,雇員們認(rèn)為聲音非??蓯?。一層層的走來走去的六個(gè)月后,雇員忽略了聲音,開始覺得它厭煩而不認(rèn)為是一個(gè)幫助。同樣的事情在你的用戶界面上也會(huì)發(fā)生,除了一個(gè)是厭煩的聲音限制在電梯之內(nèi),一個(gè)是到了工作間的每個(gè)人的耳朵里。把音效放到幾百臺電腦上,在開放式的工作間中就會(huì)產(chǎn)生刺耳的雜音。但無論如何,聲音反饋是有用的,尤其是在你需要警告用戶一個(gè)嚴(yán)重問題產(chǎn)生的地方,例如進(jìn)一步的操作將導(dǎo)致數(shù)據(jù)的丟失或程序出錯(cuò)。允許用戶取消聲音反饋,除非錯(cuò)誤不得不通知。保持文字內(nèi)容清楚開發(fā)者常常通過增加大量詞匯來盡力使文字反饋內(nèi)容清楚。但事與愿違,他們最后使消息更不清楚了。簡化文本標(biāo)簽、用戶錯(cuò)誤信息和一行的幫助信息上的詞匯是一項(xiàng)挑戰(zhàn)。文字反饋的任務(wù)可以交給科普作家,通常他們可以高效的處理。提供操作路徑跟蹤如果你的用戶曾經(jīng)說過象這樣的話:“我也不知道怎么就到這個(gè)窗口了,可是我在這里了,我也不知道怎么才能退回去?!蹦敲淳褪悄銢]有提供一個(gè)可跟蹤的路徑,或者說,在這種情況下,是一個(gè)可重復(fù)的操作路徑。提供一個(gè)可重復(fù)的操作路徑說著容易做來難。應(yīng)該從設(shè)計(jì)簡潔的啟動(dòng)你指定的功能的菜單結(jié)構(gòu)開始著手。你也要指明你菜單結(jié)構(gòu)的展開位置,避免超過兩級的級聯(lián)菜單。為每個(gè)對話框提供描述性的標(biāo)題可以非常有用的提醒用戶是哪個(gè)菜單項(xiàng)或按鈕被按下后把他們帶到當(dāng)前窗口的。提供鍵盤支持鍵盤是用戶桌面上常見的固定設(shè)備,為用戶輸入文本和數(shù)據(jù)提供了一個(gè)有效手段。在介紹圖形用戶界面程序時(shí),我們常常假定用戶把鼠標(biāo)作為主要的交互設(shè)備。而用鼠標(biāo)操作程序?qū)τ阡浫雴T或常用用戶來講是非常費(fèi)時(shí)和低效的。加速建可以給用戶提供一種非常有效的操作方式來訪問窗口中的指定菜單項(xiàng)和控件。加速建應(yīng)該易于使用并限制在一到兩個(gè)鍵(如F3或者CtrlP)。鍵盤在GUI的世界中有一定的限制,例如在實(shí)現(xiàn)象拖拽、點(diǎn)擊、變大變小窗口等直接操作任務(wù)的時(shí)候。相對來說,你總會(huì)發(fā)現(xiàn)有一小批人堅(jiān)持用鼠標(biāo)從不碰鍵盤。這導(dǎo)致你需要對所有菜單和窗口操作提供完整等價(jià)的鍵盤和鼠標(biāo)支持。注意表達(dá)模式把所有界面的各個(gè)方面連起來的一個(gè)重點(diǎn)是界面的外觀和風(fēng)格。外觀和風(fēng)格必須一致。用戶使用一個(gè)窗體或?qū)υ捒蜻^后,在此基礎(chǔ)上,他們希望在使用下一個(gè)窗體或控件時(shí)有同樣的感受。研究好的界面設(shè)計(jì)模式和連續(xù)性是最重要的。決定模式一定要用心,例如程序是有單文檔界面還是多文檔界面。模式也包括用戶如何在程序中完成他們的任務(wù)。指定合適的程序表達(dá)方式對開發(fā)后續(xù)窗口提供了很大的便利,因?yàn)樗鼈冇泻芏嗤ㄓ玫膬?nèi)在框架。另一方面,如果你不盡早在你的界面設(shè)計(jì)中定義好表達(dá)方式,拖后對程序外觀和風(fēng)格的修改將浪費(fèi)大量的時(shí)間和金錢,因?yàn)楦膭?dòng)幾乎會(huì)影響到所有的窗口??丶s定控件是用戶同程序交互的可見單元。用戶界面設(shè)計(jì)人員面對著的控件集合取之不盡。每個(gè)新的控件帶有自己特定的行為和特征。為每個(gè)用戶選擇合適的控件會(huì)產(chǎn)生更高的產(chǎn)出、更低的錯(cuò)誤率和更高的用戶滿意度??梢栽谀愕钠聊簧习磮D四的表中列出的控件用法使用控件??丶褂谜f明圖四 控件 范圍內(nèi)應(yīng)用的數(shù)量 控件類型 Menu Bar 最多十個(gè)子項(xiàng) Static action PullDown Menu 最多十二個(gè)子項(xiàng) Static action Cascading Menu 最多五個(gè)子項(xiàng), 一層級聯(lián) Static action Popup Menu 最多十個(gè)子項(xiàng) Static action Pushbutton 每個(gè)對話框中最多六個(gè) Static action Check Box 每組最多10~12個(gè) Static set/select value Radio Button 每組最多六個(gè) Static set/select value List Box 表中最多50行, 顯示8~10行 Dynamic set/select value Dropdown List Box 控件中一次顯示一個(gè)選項(xiàng),下拉框中不超過20項(xiàng) Dynamic set/select single value Combination List Box 控件中按標(biāo)準(zhǔn)格式一次顯示一個(gè)選項(xiàng),下拉框中不超過20項(xiàng) Dynamic set/select single value。 add value to list Spin Button 最多十個(gè)子項(xiàng) Static set/select value Slider 依賴于顯示的數(shù)據(jù) Static set/select value in range 第七步:C++面向?qū)ο蟪绦蛟O(shè)計(jì)六年前,我剛熱戀“面向?qū)ο蟆保∣bjectOriented)時(shí),一口氣記住了近十個(gè)定義。六年后,我從幾十萬行程序中滾爬出來準(zhǔn)備寫點(diǎn)心得體會(huì)時(shí),卻無法解釋什么是“面向?qū)ο蟆保拖笳f不清楚什么是數(shù)學(xué)那樣。軟件工程中的時(shí)髦術(shù)語“面向?qū)ο蠓治觥焙汀懊嫦驅(qū)ο笤O(shè)計(jì)”,通常是針對“需求分析”和“系統(tǒng)設(shè)計(jì)”環(huán)節(jié)的。“面向?qū)ο蟆庇袔状髮W(xué)派,就象如來佛、上帝和真主用各自的方式定義了這個(gè)世界,并留下一堆經(jīng)書來解釋這個(gè)世界。有些學(xué)者建議這樣找“對象”:分析一個(gè)句子的語