軟體介面

軟體介面

軟體的未來其實在很大程度上要指望軟體介面的前景如何。我們知道,計算機世界里的介面這兩個字具有兩種眾所周知的含義:其一是指軟體本身的狹義“介面”,比如各種軟體開發API等。其二則指的是人與軟體之間的交互界面。

定義


我們把這種人-軟體之間的介面稱作“用戶界面”,也就是“UI”。這裡要討論的前一種定義:軟體不同部分之間的交互介面。通常就是所謂的API――應用程序編程介面,其表現的形式是源代碼。API的發明和發展大大促進了計算機產業的進步,同時API幾乎決定著日常運算的各個方面。
大多數程序員秉承為軟體用戶設計優秀的用戶界面思想,這一點早已深入人心。可是,另一方面,如何實現合理的軟體API卻只為少數人所重視。歷史證明,所有在應用上獲得成功的軟體或者Web應用無一不是首先在API的設計上滿足了用戶的需求,即便這些用戶幾乎從不直接使用這些API!

發展歷程


早在上個世紀的70年代,Digital Research公司的Gary Kildall為微型計算機首創了世界上第一個實用的軟體API。這個初生的API大致上有20多個對操作系統的簡單函數調用組成,這個操作系統就是CP/M――那時可是相當的簡單和粗糙,而同樣簡單的API卻讓整個計算機世界發生了重大變化。Kildall這個很有才氣的計算機專家希望自己設計的API能被其他科學工作者採用。至於商用方面的考慮可是想都沒想。而且,我們現在的產業現狀也證明:僅讓科學家們俱歡顏是不會在商業中賺到一分錢的!好在,比爾蓋茨認識到,用於應用程序開發人員而不是科學家的API絕對是商業軟體獲得成功的關鍵之一,這樣一來,情況就很不一樣了。
隨後由比爾·蓋茨等開發的MS-DOS操作系統全盤拷貝了CP/M及其API,並在這些API的基礎之上又增加了一些簡單特性,務實的比爾·蓋茨將Kildall的發明變成了巨大的商業應用並立刻讓MS-DOS的API在軟體開發中佔據了主導地位。
然而,當微軟公司推出Windows操作系統的時候,系統的龐大API族就沒有拷貝Kildall的成果了,可是,事實證明這些微軟自己折騰出來的Windows API實在是糟糕的可以:醜陋的代碼、混亂的結構等等不一而足。但是,Windows採用了實用的偽多線程技術和高效的內存管理,特別是簡單易用的圖形界面立刻俘獲了一般用戶的忠心。大量的程序員也就隨之投入到Windows程序的開發中來,這些糟糕的API自然當仁不讓了。微軟花費了5年多的時間改進和發展早期的Windows並在最終壟斷了全球桌面操作系統市場。今天我們誰也離不開Windows API了,除非你不打算編寫支持Windows的軟體!
1988年,微軟購買了Alan Cooper開發的可視編程語言:Ruby。隨後微軟把Ruby和垂死的QuickBASIC語言組合起來創建了Visual Basic。Alan Cooper方面的Ruby實現了名為VBX的軟體API,這種API可以讓程序員動態地擴展Visual Basic功能,這一事實再次證明了軟體介面具有多大的重要性。VBX介面也就是目前火熱的組件對象模型COM的前身。
在為微軟的勢力之外,Unix世界也發明了自己的API,這就是TCP/IP,有了它,網路之間就可以自由地通信了。TCP/IP首先在大學里獲得了普遍的歡迎,然後,到了20世紀90年代,Marc Andreessen瞄準那些不是程序員卻很想從使用計算機獲得好處的年輕人推出了世界上第一個Web瀏覽器:Mosaic,後來在此基礎上誕生了Netscape Navigator,可以說,正是Web和瀏覽器的發明,我們終於被帶到了信息時代。
最早的Navigator所能作的不外乎就是查找和顯示文件,這和Macintosh Finder乃至Windows Explorer也沒什麼兩樣,但是,正因為有了TCP/IP API,Netscape 就可以放眼於本機之外查找和顯示其他網路上的其他計算機中的文件。新世界豁然洞開。
整個90年代,Netscape就象流感病毒一樣滿世界到處擴散。到了現在計算機之間在通用API的努力下可以非常方便地相互通信,但幾乎沒有一個用戶會直接和這些TCP/IP介面交互。
如果沒有優秀的、符合時代潮流的API,什麼先進的技術都可能會不得不寂寞很長一段時間以等待命運的垂青。一旦成熟的API出現,軟體的前景也就能大致看到輪廓了。
舉個例子,不管是你身上的手機還是隨身攜帶的PDA――比如PalmPilot,它們其實都是處理能力不同的計算機而已,這兩種設備都裝備了短距無線(通常是紅外線)通信埠。可是,它們如何才能通過這些埠實現相互之間的通信呢?如果這些設備之間缺乏公用的API,你的手機就不可能和你的PDA實現通信。
今後會產生一種所謂的“陌生人服務”API,比方說,當你走在大街上的時候,你的手持設備,不管是手機、PDA還是筆記本電腦或者車載導航設備就會自動地和周圍設施通信,商店、辦公室、售貨機和其他人等等。
目前有幾家公司已經在致力於開發以上的通用API,其中最有希望的或許是Oracle公司(Oracle公司於2009年收購Sun公司)的Jini。但是,Jini的定位和以前的CP/M一樣,也是更多的把目標放在了計算機科學家而不是解決方案服務商上。
我們今天的軟體開發很大一部分是開發Web應用程序,驅動Web進步的是交互設計和商務模式而不是技術創新。從技術上說,Web領域的大開發商不會對Web本身挖掘太多,他們缺乏編寫大型、複雜程序的耐心。但是,反過來,這些大型廠商可以把其他開發商預先編寫的軟體組件組合起來,這樣,他們就比以往更多地依賴於為其編寫的軟體API。
總而言之,不管我們設計什麼API,最重要的是首先要弄明白我們在為什麼目標或者為誰在設計。這是一定要記得的關鍵點。只有在我們理解目標受眾的需求之後,我們才可能創建有用的API,才能實現恰當的用戶介面,才能讓不同人設計的不同軟體部分良好地集成。

規約


簡單的說應該就是API規範
很多軟體會提供程序介面出來,舉個例子
比如說我們用的瀏覽器IE本身就是一個軟體,它會公布比如說mouseover這個介面出來
當編程人員在mouseover里寫入代碼也就代表當用戶滑鼠劃過這個網頁的時候會做出什麼響應
比如說我們在某些做的比較炫的網站看到滑鼠走到哪都有一串星星跟隨
而mouseover這個介面的規定里會寫,有哪些參數(參數類型,範圍值等)可以使用,這個介面有哪些事件可以響應等等
概要設計文檔的介面部分應該很簡單的,一般分:用戶介面、外部介面和內部介面三個部分;用戶介面只要簡述用戶操作和反饋結果等;外部介面簡述硬體輸入輸出、網路傳輸協議等;內部介面簡述模塊間傳值、數據傳遞等即可。