(1.北京超圖,北京市海淀區(qū)學(xué)清路 8號 100096;2. 中國科學(xué)院地理科學(xué)與資源研究所,北京市朝陽區(qū)大屯路 100101)
論文來源:2009年中國地理信息產(chǎn)業(yè)論壇暨第二屆教育論壇就業(yè)洽談會論文集
摘要:跨平臺應(yīng)用系統(tǒng)的設(shè)計(jì)可大大提高系統(tǒng)的健壯性和可移植性,提高程序的可復(fù)用程度,對軟件的推廣及靈活部署具有重要意義,對應(yīng)用軟件行業(yè)的發(fā)展具有重大意義??缙脚_應(yīng)用系統(tǒng)的設(shè)計(jì)主要從操作系統(tǒng)、數(shù)據(jù)庫、程序開發(fā)語言支持等幾大方面考慮。本文基于北京超圖公司共相式 GIS平臺和應(yīng)用平臺的技術(shù)創(chuàng)新,總結(jié)了跨平臺應(yīng)用系統(tǒng)的設(shè)計(jì)策略方案。
關(guān)鍵詞: 跨平臺,GIS,共相
跨平臺程序設(shè)計(jì)是指設(shè)計(jì)的應(yīng)用軟件核心類庫可以在多種硬件平臺、操作系統(tǒng)、數(shù)據(jù)庫上運(yùn)行的軟件設(shè)計(jì)方法。平臺包括硬件平臺和軟件平臺。如果使用高級語言進(jìn)行軟件開發(fā),對硬件平臺的適應(yīng)性通常是指針對字節(jié)序、字長的適應(yīng)。對軟件平臺的適應(yīng)性主要體現(xiàn)在對操作系統(tǒng),數(shù)據(jù)庫、瀏覽器、二次開發(fā)語言的支持。對操作系統(tǒng)編程模型和系統(tǒng)調(diào)用 OS API的適應(yīng)性,操作系統(tǒng)對計(jì)算機(jī)設(shè)備以及系統(tǒng)對象都建立了抽象的可編程模型,并通過系統(tǒng)調(diào)用的方式提供給應(yīng)用程序使用,跨平臺設(shè)計(jì)的主要任務(wù)就是適應(yīng)這些差異。對數(shù)據(jù)庫的適應(yīng)性主要要考慮跨數(shù)據(jù)庫平臺和遵守標(biāo)準(zhǔn)的角度出發(fā),應(yīng)該盡量采用 ANSI SQL,避免使用Oracle、微軟以及其他數(shù)據(jù)庫廠商的一些特性函數(shù)和非標(biāo)準(zhǔn)的 SQL 命令。對于主流瀏覽器的支持,必須為特定瀏覽器針對性的編寫代碼或者編寫最具普遍性的功能代碼而放棄大量的動(dòng)態(tài)內(nèi)容。
跨平臺程序設(shè)計(jì)是應(yīng)用服務(wù)提供廠商和程序員一直追求的設(shè)計(jì)方法。跨平臺最明顯的好處是只需要寫一次代碼,就可以支持多種平臺,省去了移植的麻煩。它對開發(fā)也是有好處的,開發(fā)人員可以在自己最熟悉的平臺下使用最熟悉的工具開發(fā)調(diào)試程序,有助于提高編程效率。通過多種編譯器檢測可以在編譯期發(fā)現(xiàn)并糾正更多的錯(cuò)誤。在一種平臺下不容易發(fā)現(xiàn)的軟件錯(cuò)誤或缺陷,在另一種平臺下可能經(jīng)常發(fā)生,有利于發(fā)現(xiàn)并修正更多的 bug,提高系統(tǒng)的兼容性。
跨平臺應(yīng)用系統(tǒng)的設(shè)計(jì)本文主要從跨操作系統(tǒng)應(yīng)用框架設(shè)計(jì)、跨數(shù)據(jù)庫引擎設(shè)計(jì)、瀏覽器支持、二次開發(fā)語言支持等幾大方面考慮。
目前主流計(jì)算機(jī)操作系統(tǒng) Windows、Linux(RedFlag Linux, RedHat Linux, Suse Linux)、 Unix (SUN Solaris,IBM AIX,HP UX)的安全性能、應(yīng)用范圍和應(yīng)用領(lǐng)域有著較大的差異性。在國內(nèi),Windows 系列廣泛應(yīng)用于客戶端或工作站,Unix、Linux 則較少地應(yīng)用于終端。開源操作系統(tǒng)在國內(nèi)的應(yīng)用日漸增多。從另一個(gè)角度來講,同一機(jī)構(gòu)允許不同部門不同層次用戶使用不同的操作系統(tǒng),既可提高辦事效率,又可降低整個(gè)網(wǎng)絡(luò)系統(tǒng)的安全風(fēng)險(xiǎn)。事實(shí)下,各大操作系統(tǒng)提供的功能其實(shí)大同小異,主要有進(jìn)程管理、進(jìn)程調(diào)度、進(jìn)程間通信、文件管理、IO 輸入輸出、網(wǎng)絡(luò)輸入輸出、線程同步控制等等。但是要開發(fā)跨平臺的軟件卻極其困難,因?yàn)楦鞔蟛僮飨到y(tǒng)提供的 OS API 差別很大,在某些處理方式有較大出入。在操作系統(tǒng)的層面設(shè)計(jì)應(yīng)用系統(tǒng)框架,要考慮能封裝大部分種類的 OS API,提供統(tǒng)一的接口,并且這些接口調(diào)用都是標(biāo)準(zhǔn)的統(tǒng)一的,基于此框架開發(fā)上層的應(yīng)用就會有很大的便利性和通用性。
跨操作系統(tǒng)的應(yīng)用框架設(shè)計(jì)主要從以下幾個(gè)方面入手:
1、容器類包括 ARRAY、HASHMAP、VECTOR 等基本容器,有內(nèi)存池機(jī)制,可以使用多種方式的 iterator 遍歷。
2、時(shí)間類包括 Time、Locale、TimeFormat 等,時(shí)間精確到毫秒,有日期和 LOCALE 處理,有時(shí)間格式化處理,線程安全。
3、IO 輸入輸出流分輸入輸出流設(shè)備和讀寫器的設(shè)計(jì),輸入輸出設(shè)備即 InputStream 和OutputStream,讀寫器即Reader和 Writer??蓪θ魏螌ο蠛驮O(shè)備進(jìn)行 IO操作。
4、實(shí)現(xiàn)跨平臺的網(wǎng)絡(luò)類庫,首先需要對不同操作系統(tǒng)的網(wǎng)絡(luò)編程模型和接口進(jìn)行分析,求同存異。對網(wǎng)絡(luò)編程來說就是對 socket API 進(jìn)行分析。Windows 和 Linux 等操作系統(tǒng)上的 socket API 接口都屬于 Berkeley socket API 的衍生物,它們非常相似,這大大降低了跨平臺設(shè)計(jì)的難度。但它們之間還是存在許多細(xì)節(jié)上的不同,例如需要的頭文件不同;winsock 需要調(diào)用 WSAStartup 進(jìn)行初始化;Windows 下的 select 函數(shù)第一個(gè)參數(shù)被忽略,而 Linux 下第一個(gè)參數(shù)必須計(jì)算出來;Windows下不支持 IPv6 的SSM 組播,而 Linux支持;不同平臺下對于 AF_INET 和 AF_INET6 等常量定義的值是不同的,這些值不能用于文件存儲或網(wǎng)絡(luò)傳輸。這些細(xì)節(jié)差異必須在實(shí)現(xiàn)類庫時(shí)進(jìn)行合適的處理。另外要重點(diǎn)考慮網(wǎng)絡(luò)級跨平臺的難點(diǎn)負(fù)載均衡。
5、日志框架吸收 Log4j和 Log4cplus 的設(shè)計(jì),使用不同 Appender 來輸出日志,使用各種 LayoutPattern 類格式化輸出。
6、服務(wù)器框架庫,引入 Postfix 的進(jìn)程調(diào)度機(jī)制,可大大提高系統(tǒng)的運(yùn)行穩(wěn)定性,同時(shí)簡化運(yùn)行的維護(hù)成本。同時(shí)服務(wù)器框架已封裝了大部分基礎(chǔ)的功能,如訪問權(quán)限控制、協(xié)議處理等,所以開發(fā)應(yīng)用或擴(kuò)展將更加簡單,也利于團(tuán)隊(duì)協(xié)同開發(fā)。
7、分層軟件架構(gòu)對跨平臺程序設(shè)計(jì)來說也是很重要的。通過在底層類庫里解決平臺相關(guān)性,而底層類庫向上提供服務(wù)的接口完全是平臺無關(guān)的?;谶@樣的底層類庫開發(fā)的上層應(yīng)用程序很自然地?fù)碛辛送瑯拥目缙脚_能力。
最后完成對各個(gè)接口的實(shí)現(xiàn)。當(dāng)不同的操作系統(tǒng)的實(shí)現(xiàn)方法不一致時(shí),使用預(yù)編譯指令區(qū)分不同操作系統(tǒng),分別給予不同的實(shí)現(xiàn)。
應(yīng)用框架設(shè)計(jì)還要考慮到支持應(yīng)用服務(wù)器軟件、PocketPC 軟件、游戲等應(yīng)用軟件的開發(fā),使其具備跨平臺和支持多個(gè)編譯器及開發(fā)工具,以及支持小內(nèi)存應(yīng)用等。