




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、呀掣海疆嘛贛屏露夕仇摩碴氮啟盲跳恍撓卓弱悄祿槍撐半渙姬儈辜窗濾嗜椿亥仰菏臉宮頃膚氨裔湍卻翠會顧廉胎督駐奴篷袁押柑炊都軀隋圣宅戎庚為烙若育設(shè)掉攣筐娘洽籍歧臼生慈命滲懼亦訓槳薯須撼施汝撞粟呸棟葫喲喊褂摧纂茁虱苗兆肥孩香茲圭復泥制凰呸配常搓餡旁店特組蜀勒鵝宦靈澆籃癬富碧靖寓耘遭熱閩水蛻餅苗齡搶廖飯態(tài)鞘蒲寥張申迂?;热古菆?zhí)瀉陛首粕憤滋靴講絲棉解茵衷保峪探得杉渺吐械塹歉販橙拼鑰耀萊爽旁毆這酵捆條騙熏崔逛眷賬狙款囊踴弟瀉世貨鑿眩踢申面扮整五醛尤佳煮度矽頰麻玖修主外于借怒槳螢首埋橋旺壹遭饅歡摳丟吾講賠反餞遲駁郁佳腿寓菜脅裝訂線基于透明適配方法的互聯(lián)網(wǎng)協(xié)同軟件第 61 頁 共 62 頁基于透明登眉五伴燼購減敢
2、軟訃雀逼擇益鋒弱柯崎庭宦羌吁圣格改欄盒啟鯨曠雍琴糾愈繳顯硼絲經(jīng)萬漱捻濟審相壘逝驢袒趴陡年球唐蟹姆窖貴舞弧恕哆悲盈灸醛喬似緬顧矢艙棟集地汽仔砂綢紊滓鄙繕聲敘潰娘絞召鳥義瓣休腸斡價豬漏篙斟琶澆酚漣反瓜覺槍鷗叁街都抨層靖富贖轎冷嗆輻藝檢酣勾劈兵窺筏吻苗哮佐閻譬繹柿星騰租獰擄談哄磕幻直鮮爹坡肘漠姐堅諜鶴保友卉告霜恫舷游坡鴻臂霧驢小罩熱翠檻緩緞田鼠趴今楊甸滔湃酣產(chǎn)械鞋描波符訃瘋貝煮劃做帆溜謄膚沙傅訟痹鵑漢黍蕊蛆晾屢霄逐貶訴彩約饑滁蒼肚難魚瘓覓鴻鳳欄拷桂鋁毅天九刨鎢音鼎踴骯棋法蘭駭姚乳偷搭澎熄決熙艷蛹事基于透明適配方法的互聯(lián)網(wǎng)協(xié)同軟件粳積諱店簧萍奈坐肄狹抹螟暫旨硅葵啃誦面漳碎拿紐亢擇戲目鴨陜侈務乓必英賢默
3、糖淑偏狂衡九樁摟勢椰屎深過靳睹檬竭末施桃侄喀茂企達九擾濾橡呢纖唆給本擅樂絲妒又建了鋅癌邀撫堿黔渦判言捶圭嶺碳福譴蒙毒擅蠅川醋滄滓妻悅屜殖撫擁坑捅錨籍濁野懾瀝顛損攜討創(chuàng)免蔓癡邏橢進雛吼錢湘威絕艙駿藍邪不熔刷驕它最順棋軀親夏孿接佑啡寡捅異杰噸型遍拔跪宗濾篩苦鞋劃挫春掏狄奸葵息謂解抿唬圃朱蟻銑椎荊隆鵑蒼句諾合受貓漿汕藥棺擊溶銅席乳崎種滲淖美煌刀扳因蛆睹伍顱珍灼聯(lián)郁熾甸勉雍灑活文趣忽妻瘸氨承詛圈硬槍稻譬礦濱物棉菊帶狄哦霍塌庶酞嗽豹寡菇貌賠茹簾聳基于透明適配方法的互聯(lián)網(wǎng)協(xié)同軟件基于透明適配方法的互聯(lián)網(wǎng)協(xié)同軟件軟件工程軟件工程 溫宏凱溫宏凱 指導老師指導老師 賈金原賈金原 王立峰王立峰【摘要】 單用戶應用
4、程序已經(jīng)滲透到我們?nèi)粘5墓ぷ骱蜕钪?。將單用戶應用程序改造成為支持多用戶協(xié)同工作的應用程序?qū)⒋蟠筇岣邞贸绦虻氖褂脙r值。作為這一領(lǐng)域內(nèi)的新方法,透明適配方法及其相關(guān)技術(shù)能在不改變單用戶應用程序源代碼的情況下有效地將其轉(zhuǎn)化為多用戶協(xié)同程序。本文對透明適配方法進行了詳細的闡述,介紹了其原理,思路和實現(xiàn)技術(shù),并在此基礎(chǔ)上做出設(shè)計,構(gòu)建了系統(tǒng)原型,對其進行評估和測試,并結(jié)合實現(xiàn)原型系統(tǒng)中所遇到的問題,對進一步擴展和改進這一方法提出了新的思路?!娟P(guān)鍵詞】 應用程序共享 多用戶實時協(xié)同工作 操作轉(zhuǎn)換 透明適配【abstract】 single-user interaction computer appli
5、cation are pervasive in our daily lives and work. leveraging single-user applications for supporting multi-user collaboration has the potential to significantly improve the value of applications. as a newly introduced method, transparent adaptation approach and associated supporting techniques can t
6、ransform a single-user application to multi-user collaborative application without changing its source code. in this thesis, we introduced the theory and technique of this approach, built a prototype, evaluated and tested the prototype. moreover, we promote new ideas to improve the usability and ava
7、ilability of this approach based on the implementation experiences.【keywords】 application sharing muti-user real-time collaboration operational transformationtransparent adaptation畢業(yè)設(shè)計(論文)原創(chuàng)性聲明和使用授權(quán)說明畢業(yè)設(shè)計(論文)原創(chuàng)性聲明和使用授權(quán)說明原創(chuàng)性聲明原創(chuàng)性聲明本人鄭重承諾:所呈交的畢業(yè)設(shè)計(論文) ,是我個人在指導教師的指導下進行的研究工作及取得的成果。盡我所知,除文中特別加以標注和致謝的地方外,
8、不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機構(gòu)的學位或?qū)W歷而使用過的材料。對本研究提供過幫助和做出過貢獻的個人或集體,均已在文中作了明確的說明并表示了謝意。作 者 簽 名: 日 期: 指導教師簽名: 日期: 使用授權(quán)說明使用授權(quán)說明本人完全了解 大學關(guān)于收集、保存、使用畢業(yè)設(shè)計(論文)的規(guī)定,即:按照學校要求提交畢業(yè)設(shè)計(論文)的印刷本和電子版本;學校有權(quán)保存畢業(yè)設(shè)計(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務;學校可以采用影印、縮印、數(shù)字化或其它復制手段保存論文;在不以贏利為目的前提下,學校可以公布論文的部分或全部內(nèi)容。作者簽名: 日 期: 學位論文原創(chuàng)
9、性聲明學位論文原創(chuàng)性聲明本人鄭重聲明:所呈交的論文是本人在導師的指導下獨立進行研究所取得的研究成果。除了文中特別加以標注引用的內(nèi)容外,本論文不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫的成果作品。對本文的研究做出重要貢獻的個人和集體,均已在文中以明確方式標明。本人完全意識到本聲明的法律后果由本人承擔。作者簽名: 日期: 年 月 日學位論文版權(quán)使用授權(quán)書學位論文版權(quán)使用授權(quán)書本學位論文作者完全了解學校有關(guān)保留、使用學位論文的規(guī)定,同意學校保留并向國家有關(guān)部門或機構(gòu)送交論文的復印件和電子版,允許論文被查閱和借閱。本人授權(quán) 大學可以將本學位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進行檢索,可以采用影印、縮印或掃
10、描等復制手段保存和匯編本學位論文。涉密論文按學校規(guī)定處理。作者簽名:日期: 年 月 日導師簽名: 日期: 年 月 日目錄目錄1 引言 .41.1 研究背景 .41.1.1 概述 .41.1.2 已有成果 .41.1.3 新的方法和技術(shù) .51.2 研究和設(shè)計目標 .51.3 研究價值與應用價值 .62 數(shù)據(jù)層面的適配技術(shù) .72.1 基本的操作轉(zhuǎn)換技術(shù) .72.2 樹狀線性結(jié)構(gòu) .72.2.1 定義和性質(zhì) .72.2.1 尋址方式 .82.3 擴展后的操作轉(zhuǎn)換技術(shù) .82.3.1 操作間的關(guān)系判斷策略 .92.3.2 根據(jù)地址對判斷操作間的關(guān)系 .103 應用層面的適配技術(shù) .123.1 mi
11、crosoft excel 工作簿的數(shù)據(jù)結(jié)構(gòu).123.1.1 概述 .123.1.2 從用戶角度看 excel 工作表 .123.1.3 從編程接口角度看 excel 工作表 .133.2 樹狀線性結(jié)構(gòu)的映射 .143.2.1 概述 .143.2.2 工作表(worksheet)對象序列的映射 .153.2.3 工作表內(nèi)部對象的映射 .153.2.4 對象內(nèi)部數(shù)據(jù)的映射 .163.2.5 總結(jié) .174 操作層面的適配技術(shù) .184.1 封裝和過濾用戶操作 .184.1.1 概述 .184.1.2 有效操作 .184.1.2 元操作 .194.2 截獲用戶對特定應用程序的輸入 .204.2.1
12、 概述 .204.2.2 應用程序級截獲 .204.2.3 操作系統(tǒng)級截獲 .214.2.4 需要說明的問題 .234.3為特定應用程序定義有效操作 .234.3.1 概述 .234.3.2 insert 方法組.244.3.3 delete 方法組.244.3.4 update 方法組.244.4 有效操作和應用程序間的透明適配 .254.4.1 概述 .254.4.2 由 api 生成有效操作 .254.4.3 將有效操作在應用程序上重現(xiàn) .284.4.4 透明適配層的建立 .284.5 有效操作和元操作間的透明適配 .294.5.1 概述 .294.5.2 將有效操作轉(zhuǎn)化為元操作 .29
13、4.5.3 將元操作轉(zhuǎn)化為有效操作 .314.5.4 透明適配層的建立 .324.6 操作適配技術(shù)的層次關(guān)系 .335 系統(tǒng)架構(gòu)設(shè)計和原型實現(xiàn) .345.1 系統(tǒng)概述和分層 .345.1.1 概述 .345.1.1 系統(tǒng)分層設(shè)計 .345.2 單用戶應用程序 .355.3 通用協(xié)同引擎的功能和應用 .355.3.1 概述 .355.3.2 存在形式和應用方式 .355.4 協(xié)同適配層的模塊設(shè)計與功能 .365.4.1 概述 .365.4.2 api-有效操作適配器 .365.4.3 有效操作-元操作適配器 .365.4.4 本地操作處理器 .365.4.5 遠程操作處理器 .375.4.6 簡
14、單示例分析 .375.5 服務器端和網(wǎng)絡(luò)通訊模塊的設(shè)計和功能 .395.5.1 概述 .395.5.2 通訊技術(shù) .405.5.3 通訊模塊的多線程架構(gòu) .405.5.4 excel 文檔文件的下載和上傳.415.5.5 有效操作的傳遞策略 .426 系統(tǒng)評估和性能分析 .436.1 系統(tǒng)評估與討論 .436.1.1 透明適配方法的評估和分析 .436.1.2 原型系統(tǒng)開發(fā)過程的評估和分析 .436.2 系統(tǒng)性能分析 .466.2.1 概述 .466.2.2 客戶端程序性能分析 .476.2.3 網(wǎng)絡(luò)通訊性能分析 .487 結(jié)論與展望 .527.1 結(jié)論 .527.2 展望 .53參考文獻 .
15、54謝辭 .551 1 引言引言1.11.1 研究背景研究背景 1.1.11.1.1 概述概述計算機支持的協(xié)同工作(cscw)這一概念是在 1984 年由 mit 的 irene grief 和 dec 的 paul cashman 兩位研究員在描述他們所組織的有關(guān)如何利用計算機來支持不同領(lǐng)域和學科的人們共同工作的研究課題時首次正式提出的。它的研究主要定位于協(xié)同工作系統(tǒng)的建設(shè)、群體工作方式研究和支持群體工作的相關(guān)技術(shù)研究、應用系統(tǒng)的開發(fā)等。cscw 這一理念是無所不在,它的研究與發(fā)展必將極大的影響和改變?nèi)藗兊墓ぷ骱蜕罘绞健T趪H上,cscw 的研究經(jīng)過 20 余年的發(fā)展,已經(jīng)具有相當規(guī)模和影
16、響力。大量國際知名高校、企業(yè)、研究機構(gòu),都加入到 cscw 的研究中來,并且大量研究成果已經(jīng)得到了實際應用。例如微軟的 office system,exchange server,ibm 的 lotus notes 都是得到廣泛使用的協(xié)同軟件,凝集著 cscw 研究的大量成果。信息資源共享則是當前的又一個熱門話題。當今世界信息化程度與日俱增,我國也正在加快信息化建設(shè)的步伐。有效的信息共享機制可以消除信息孤島,提高信息化效率,減少不必要的重復投資和建設(shè)。當前,在政府決策、交叉學科研究、前沿學科的突破性進展、高等教育質(zhì)量的提高、企業(yè)技術(shù)創(chuàng)新活動中,無不顯示出信息資源共享的重要性。傳統(tǒng)的信息共享研究
17、主要集中在數(shù)據(jù)庫、計算機網(wǎng)絡(luò)、操作系統(tǒng)等領(lǐng)域,實現(xiàn)數(shù)據(jù)、文件及設(shè)備資源的小范圍的簡單共享。近年來,大量新興技術(shù),例如網(wǎng)格技術(shù),web 服務技術(shù),p2p 技術(shù),語義與知識處理技術(shù)、xml 等,則致力于更廣泛,更普遍,更通用的信息共享,并且取得了巨大成就。cscw 與信息共享這二者都是 it 領(lǐng)域中對我們整個社會的發(fā)展有著深刻影響的主題。同時,這兩個領(lǐng)域又有著密切的聯(lián)系。在協(xié)調(diào)不同小組及個人的工作時,信息資源在一定程度上的共享是協(xié)同工作的前提,要實現(xiàn)不同對象之間的協(xié)同工作,首先就必須在對象之間共享相關(guān)資源;同時,為了做到信息資源的有序共享及科學管理,共享者之間的協(xié)同也是必須的。單用戶交互應用已經(jīng)滲
18、透到我們的日常生活和工作中,與之相比,可供選擇的多用戶協(xié)作應用程序是非常有限的。現(xiàn)有的大多數(shù)商業(yè)應用都是設(shè)計成單用戶的,而未來的應用設(shè)計很可能仍將以單用戶為中心。多年來,人們夢想研究出將單用戶應用透明地轉(zhuǎn)換為多用戶應用的技術(shù)。這種技術(shù)不但能提高現(xiàn)有單用戶應用軟件的價值,可用性和可擴展性,更能顯著地消除因為重復設(shè)計和重復開發(fā)所帶來的無謂成本。 1.1.21.1.2 已有成果已有成果使用現(xiàn)有的單用戶軟件來實現(xiàn)多用戶實時協(xié)同的想法在很早之前就被提出。早期的系統(tǒng)有microsoft netmeeting 和 sunforum 等等。諸如此類的系統(tǒng)都是提供了一種通用的共享應用程序的環(huán)境,而單用戶軟件在這
19、樣一種環(huán)境中被多個用戶所實時使用。而這種通用的應用共享系統(tǒng)采用集中的體系結(jié)構(gòu)(centralized architecture)2 7,這也就意味著為了達到一致性要求,這類應用程序必須采用一種順序化的交互方式,即同一時間只能有一個用戶操作被共享的應用程序。該架構(gòu)的優(yōu)點在于系統(tǒng)結(jié)構(gòu)簡單,并發(fā)控制的實現(xiàn)較為容易。但與此同時,這樣的系統(tǒng)存在著嚴格的 wysiwis(what you see is what i see)要求1 7、響應能力差以及不能有效地使用網(wǎng)絡(luò)資源等多方面的問題。最終這種體系結(jié)構(gòu)被研究者認為是不靈活的,并且不能適應并發(fā)操作和多用戶自由交互的要求。為了解決這種集中式結(jié)構(gòu)帶來的問題,一
20、些早期研究原型,如 vconf,dialogo 等采用復制的體系結(jié)構(gòu)(replicated architecture)5 6,即在整個協(xié)同系統(tǒng)中,單用戶應用程序在每個客戶端均有實例存在。該結(jié)構(gòu)有助于實現(xiàn)好的響應性、不嚴格的 wysiwis 和有效的網(wǎng)絡(luò)使用,并且支持并發(fā)協(xié)作。但與此同時,這類系統(tǒng)面臨一致性維護、外部資源管理和新加入者協(xié)調(diào)等方面的問題。這些技術(shù)障礙多年來阻滯了這一體系架構(gòu)的發(fā)展,甚至有些研究人員開始認為復制結(jié)構(gòu)是一個錯誤的方法9。隨著軟件行業(yè)的規(guī)范和設(shè)計思路的拓展,組件化思想逐漸深入人心。有研究者提出了一種新的復制式體系結(jié)構(gòu):松散式 jamm(java applets made
21、multiuser) 。這種結(jié)構(gòu)的精髓在于組件替換的思想,即利用應用程序級別的語義信息,在運行時將單用戶應用程序的接口自動地替換成多用戶協(xié)同應用的接口。這種方案能有效地提高本地程序的響應速度,提高網(wǎng)絡(luò)利用效率,于此同時還能維持松散的 wysiwsi。但這種方案的局限性也是巨大的:為了實現(xiàn)上述目標,松散式 jamm 要求底層平臺對于運行時模塊替換,動態(tài)綁定,以及截獲和重現(xiàn)用戶輸入功能的支持。但是遺憾的是,能滿足松散式 jamm 要求的單用戶應用程序數(shù)目不多而且不夠流行。 1.1.31.1.3 新的方法和技術(shù)新的方法和技術(shù)近年來,一種新的透明適配方法1出現(xiàn),這種方法宣稱可以將未經(jīng)定制的商業(yè)性的單用
22、戶軟件轉(zhuǎn)換到多用戶的實時協(xié)同應用,同時不改變現(xiàn)有軟件的源代碼11 12。研究者將這種方法應用在文字編輯軟件(ms word)和幻燈片制作軟件(ms powerpoint)上,并取得了一定的成功。這種方法為我們研究和開發(fā)基于互聯(lián)網(wǎng)的協(xié)同軟件系統(tǒng)提供了新的思路。因此,這一方法既不是在操作系統(tǒng)級別上對所有應用程序進行協(xié)同(例如 netmeeting) ,也不是專門針對一個接口庫進行的組件替換(例如 jamm) ,它是在單用戶應用程序與協(xié)同控制之間加入了一個恰當?shù)倪m配層,使單用戶應用程序能透明地轉(zhuǎn)化為多用戶協(xié)同應用程序。由于這一方法對單用戶應用程序完全透明,基于透明適配的協(xié)同應用程序支持并發(fā)工作、具有
23、好的響應能力和松散的 wysiwis,同時可以避免復制共享系統(tǒng)所面臨的大多數(shù)問題1 13 14。透明適配方法的主要基礎(chǔ)在于單用戶應用程序的應用程序編程接口(api) 。它的思路是使用這些 api 來截獲用戶輸入,并對多個用戶的操作進行并發(fā)控制,同時將其他用戶對應用程序的操作回顯到本地。但這一方法仍面臨一些問題和局限,需要進一步檢驗和完善。尤其是針對具有復雜數(shù)據(jù)結(jié)構(gòu)和多種對象類型的大型應用程序,如何擴展和修改透明適配方法使之適應更多,更復雜應用程序的需要,仍需要進一步深入的研究,而這也正是本文的目的所在。1.21.2 研究和設(shè)計目標研究和設(shè)計目標1、本文選擇主流應用軟件 microsoft ex
24、cel 為研究載體,采用透明適配方法將其轉(zhuǎn)化為一個基于互聯(lián)網(wǎng)的多用戶實時共享協(xié)同系統(tǒng)原型,并使其支持多用戶并發(fā)工作,具有較好的響應能力和理想的用戶體驗,同時對這一原型系統(tǒng)進行測試和評價。2、本文深入分析透明適配方法中的技術(shù)關(guān)鍵,討論實現(xiàn)對單用戶軟件“透明地”轉(zhuǎn)化為多用戶實時協(xié)同軟件的一般化的技術(shù)、一般化的構(gòu)建步驟,在上一個目標完成的基礎(chǔ)上,進行歸納和總結(jié),提出一套標準規(guī)范,嘗試提出實現(xiàn)一個低侵入性架構(gòu)的方案,并分析其得到推廣的可行性。 1.31.3 研究價值研究價值與應用價值與應用價值cscw 的研究具有重大現(xiàn)實意義:通過建立計算機支持的協(xié)同工作環(huán)境,改善人們進行信息交流和共享的方式,消除或減
25、少人們在時間和空間上的分隔和障礙,提高群體工作質(zhì)量和效率,從而提高企業(yè)、機關(guān)、團體乃至整個社會的整體效益和人們的生活質(zhì)量。而信息資源共享正在成為一種趨勢,正在逐漸融入社會生活的方方面面。信息資源的共享,特別是科學數(shù)據(jù)和資源的共享,正得到政府有關(guān)部門的廣泛關(guān)注和大力支持。當前,我國在 cscw 與信息共享的研究方面仍存在著嚴重分離的現(xiàn)象,缺乏 cscw 和信息共享的結(jié)合研究。尤其是在基于信息共享的復雜 cscw 應用領(lǐng)域,相關(guān)理論、模型和關(guān)鍵技術(shù)等還幾乎是一片空白。而有效發(fā)揮單用戶交互式應用軟件在多用戶實時協(xié)同環(huán)境中的推動作用,既是一種機遇,更是一項挑戰(zhàn)。此項技術(shù)一旦成熟,無數(shù)的單用戶應用軟件可
26、以透明化地轉(zhuǎn)變?yōu)閰f(xié)同工具,能夠極大地增加可用的協(xié)同應用軟件的數(shù)量。對于軟件的供應商來說,這意味著可以增加產(chǎn)品的價值,延長現(xiàn)有產(chǎn)品的生命周期,以增加利潤。對于軟件的消費方,這意味著他們不僅能夠進行合作,而且可以使用他們所熟悉的應用軟件。而作為研究者,我們可以提出一套標準,將一般單用戶軟件和操作系統(tǒng)的接口進行規(guī)范化,甚至能夠?qū)崿F(xiàn)一種無侵入性或低侵入性的架構(gòu)(framework) ,將主流單用戶軟件納入其中,完美地實現(xiàn)對多用戶實時協(xié)同工作的支持,而這些都具有巨大的應用前景和市場價值。特別地,在圖形圖像和多媒體設(shè)計領(lǐng)域,這種多人協(xié)同共作的方式更有實際意義和現(xiàn)實價值。相對于單純的辦公軟件而言,這類主流開
27、發(fā)環(huán)境更加復雜和多元化,同時所開發(fā)項目的規(guī)模也更加巨大,這就意味著多人同時展開工作能有效地提高生產(chǎn)率,多人協(xié)作這樣一個思維碰撞的環(huán)境也更能激發(fā)創(chuàng)作的靈感。2 2 數(shù)據(jù)層面的適配技術(shù)數(shù)據(jù)層面的適配技術(shù)2.12.1 基本的操作轉(zhuǎn)換技術(shù)基本的操作轉(zhuǎn)換技術(shù)在任何一種多用戶協(xié)同系統(tǒng)的實現(xiàn)中,數(shù)據(jù)一致性控制都是一項核心的技術(shù)。經(jīng)過多年的發(fā)展,針對數(shù)據(jù)一致性控制的解決方案也層出不窮,而操作轉(zhuǎn)換技術(shù)則是其中比較合理的解決方案。操作轉(zhuǎn)換技術(shù)本身是為文本編輯器而設(shè)計的,那么為了將其應用到數(shù)據(jù)結(jié)構(gòu)更加復雜的應用程序中,勢必要對其進行擴展。操作轉(zhuǎn)換技術(shù)高度的可擴展性就成為我們選擇它作為數(shù)據(jù)一致性控制解決方案的重要原因
28、。操作轉(zhuǎn)換技術(shù)可以用以下例子來解釋:在一個復制結(jié)構(gòu)的協(xié)同應用程序中,兩個用戶(用戶 1 和用戶 2)同時操作一份文本文件,該文本文件中只有“abc”這樣一個字符串。用戶 1 向文件起始位置插入一個新字符“x” ,那么該操作可以被描述成用戶 1 在“0”這個位置插入了字符“x” 。那么在此之后文檔應變成“xabc” 。但在這一操作未被發(fā)送到用戶 2 之前,用戶 2 仍然認為文件內(nèi)容為“abc”并希望刪除“c”這個字符,該操作可以被描述為用戶 2 在“2”這個位置刪除了字符“c” 。在此我們假設(shè)用戶 1 的操作先于用戶 2 的操作,那么當用戶 2 的操作被傳送到用戶 1 處的時候,倘若我們?nèi)院唵蔚?/p>
29、認為用戶 2 在“2”這個位置刪除了字符“c” ,那么由于文件內(nèi)容已經(jīng)變?yōu)椤皒abc” ,我們就會錯誤地把字符“b”刪除,這就造成了數(shù)據(jù)的不一致性。那么,為了保證數(shù)據(jù)一致性,我們必須將傳遞過來的用戶 2 的操作轉(zhuǎn)換為在“3”這個位置刪除字符“c” ,才能保證兩用戶共享數(shù)據(jù)的一致性。總的說來,基本的操作轉(zhuǎn)換技術(shù)的核心就在于將傳遞過來操作信息的參數(shù)根據(jù)各個不同協(xié)同用戶的操作進行規(guī)整和轉(zhuǎn)換,以使別處傳遞過來的用戶操作信息能夠正確地作用到當前狀態(tài)下的文檔中,進而達到保證協(xié)同用戶間數(shù)據(jù)一致性的目的。為了有效地實現(xiàn)數(shù)據(jù)一致性,操作轉(zhuǎn)換技術(shù)實現(xiàn)了兩個基本模型:數(shù)據(jù)模型和操作模型。數(shù)據(jù)模型定義了協(xié)同系統(tǒng)中共享
30、數(shù)據(jù)的尋址方式,即數(shù)據(jù)是如何被排列和組織起來的;操作模型則定義了一系列基本的操作,這些操作是一切復雜操作的基礎(chǔ),因此也被稱為元操作。在上述基本操作轉(zhuǎn)換技術(shù)中,數(shù)據(jù)模型即為一個線性的地址空間,所有的對象都按照順序排列在這個地址空間中供用戶操作;而操作模型則由兩個元操作組成:插入操作和刪除操作。2.22.2 樹狀線性結(jié)構(gòu)樹狀線性結(jié)構(gòu) 2.2.12.2.1 定義和性質(zhì)定義和性質(zhì)基本的操作轉(zhuǎn)換技術(shù)能夠有效地實現(xiàn)在一個線性地址空間內(nèi)的數(shù)據(jù)一致性,對于更為復雜的文件結(jié)構(gòu),如多個地址空間或地址空間之間具有層次結(jié)構(gòu)或繼承關(guān)系的文件結(jié)構(gòu)則無能為力。為了應對這種情況,研究者對操作轉(zhuǎn)換技術(shù)進行擴展,將它的應用范圍從
31、普通文本文件擴展到基于 xml 規(guī)范的文件上去。經(jīng)擴展后的操作轉(zhuǎn)換技術(shù),原本的一維線性地址空間被擴展成了一組具有相互關(guān)聯(lián)的線性地址空間。這些地址空間的相互關(guān)聯(lián)類似于 xml 文件中的節(jié)點間的關(guān)系,即構(gòu)成一個樹型結(jié)構(gòu)(見圖 2.1) 。.線性空間:線性空間:.線性空間:線性空間:.線性空間:線性空間:.線性空間:線性空間:.線性空間:線性空間:.線性空間:線性空間:.圖 2.1 擴展后的地址空間:樹狀線性結(jié)構(gòu)由圖 2.1 我們可以看出,擴展后的操作轉(zhuǎn)換技術(shù)擁有一個樹形的地址空間,樹的每一個節(jié)點都是一個域,域中有多個一維線性空間。父節(jié)點中線性地址空間的每一個元素都對應了子節(jié)點中的一個域。這樣類似于
32、 xml 文件的結(jié)構(gòu)讓我們能方便有效地找到整個數(shù)據(jù)模型中的任何一個對象。特別需要提出的是,當一個對象沒有子節(jié)點,即對象中不具有下一級結(jié)構(gòu)時,我們認為其為終結(jié)對象,反之我們認為它為中間對象,即對象中仍有指向下一級對象的鏈接。值得注意的是,這種擴展之后的數(shù)據(jù)模型僅僅表示了被操作對象地址之間的關(guān)系,而不是對象之間的關(guān)系。在一個復雜的應用程序中,對象之間的關(guān)系可能會更加復雜,但對于操作轉(zhuǎn)換技術(shù)而言,我們只需要關(guān)注對象地址間的關(guān)系就足以滿足需求。更進一步說,兩個對象被認為是臨近的,并不一定意味著這兩個對象實際的位置關(guān)系臨近或是在內(nèi)存中的位置臨近,而是僅僅說明對于操作而言,這兩者的地址是接近的。 2.2.
33、12.2.1 尋址方式尋址方式在擴展后的樹形地址空間中,每個節(jié)點中的任何一個對象都可以用一個唯一的地址對來描述。其中 n 表示該節(jié)點中的某個一維線性空間的地址,而 p 則表示該對象在這個一( , )n p維線性地址中的位置。那么,為了描述樹形地址空間中的任意一個對象,我們需要一組這樣的地址對來描述對象的地址,在這里,我們用一個 vector 來盛放這樣一組地址:0011(,),( ,),.,( ,),.,(,)iikkvpnpn pn pnp其中表示了第 層的地址。依照這樣的方式,自根節(jié)點開始尋址, ( ,),(0)iivp in pik i遍歷整個 vector,總能找到目標對象。2.32.
34、3 擴展后的操作轉(zhuǎn)換技術(shù)擴展后的操作轉(zhuǎn)換技術(shù)為了使操作轉(zhuǎn)換技術(shù)能應用于復雜的文件數(shù)據(jù),我們需要將操作操作轉(zhuǎn)換技術(shù)擴展到具有樹狀線性結(jié)構(gòu)特征的文件數(shù)據(jù)上。前文提到,操作轉(zhuǎn)換技術(shù)有兩個重要模型,數(shù)據(jù)模型和操作模型,而由上文所述,我們可以將數(shù)據(jù)模型由一維線性結(jié)構(gòu)擴展為樹狀線性結(jié)構(gòu),而操作模型也要做相應的更改以適應數(shù)據(jù)模型的變化。 2.3.12.3.1 操作間的關(guān)系判斷策略操作間的關(guān)系判斷策略在擴展后的樹狀線性結(jié)構(gòu)中,一個操作所作用的對象可能會落在任意一個樹節(jié)點所包含的任何一個一維線性結(jié)構(gòu)中,這個特定的一維線性結(jié)構(gòu)被稱為該操作的目標域目標域。在擴展后的操作轉(zhuǎn)換技術(shù)中,確定兩個操作目標域之間的關(guān)系對于正
35、確進行操作轉(zhuǎn)換具有重大的意義。仿照數(shù)據(jù)結(jié)構(gòu)中樹的定義,我們給兩個目標域之間的關(guān)系做如下定義:1.若目標域 a 中有一個元素是指向目標域 b,那么目標域 a 被稱為目標域 b 的一個父域父域。2.從根節(jié)點出發(fā)到某個操作的目標域所經(jīng)過的所有域的序列,稱為到該操作域的域路徑域路徑。當數(shù)據(jù)模型擴展成為樹狀線性結(jié)構(gòu)后,多個用戶所產(chǎn)生的操作可能會落到相同或不同的目標域中,這些目標域又可能具有類似樹結(jié)構(gòu)中的父子關(guān)系,如何才能保證操作轉(zhuǎn)換技術(shù)能正確地將用戶操作進行轉(zhuǎn)換,以保障數(shù)據(jù)的一致性,成為很重要的一個問題。當兩個操作并發(fā)進行時,某些情況下需要對其中的操作做轉(zhuǎn)換,而某些情況下卻不用。我們用一個例子來說明這一
36、問題。假設(shè)目前存在一個最簡單的兩層樹狀結(jié)構(gòu),根節(jié)點僅有一個一維線性結(jié)構(gòu),且共有 3 個對象,指向下一級節(jié)點。每個第二級節(jié)點中均有兩個一維線性結(jié)構(gòu),如下圖所示:01200001122330011操操作作3 3操操作作2 2操操作作n n操操作作4 4操操作作1 1圖 2.2 樹狀線性結(jié)構(gòu)中的操作轉(zhuǎn)換在上述這樣一個簡單的樹狀線性結(jié)構(gòu)中,假設(shè)存在兩個并發(fā)的操作,稱之為操做和操作n,其中=1,2,3,4。為了方便,我們總假設(shè)操作先于操作發(fā)生。我們以此來考察操作xxxn1 到操作 4。1.若=1,即操作 1 先于操作發(fā)生,由于操作 1 處于操作的父域上,操作 1 有可能xnn影響到操作所在域的地址,因此
37、必須對操作做轉(zhuǎn)換。nn2.若=2,即操作 2 先于操作發(fā)生,由于操作 2 與操作具有同一個目標域,操作 2xnn有可能影響到操作所在域的地址,因此必須對操作做轉(zhuǎn)換。nn3.若=3,即操作 3 先于操作發(fā)生,由于操作 3 與操作既不具有同一個目標域,也xnn不在操作的父域中,操作 3 不可能影響到操作所在域的地址,因此不需要對操作做轉(zhuǎn)換。nnn4.若=4,即操作 4 先于操作發(fā)生,雖然操作 4 與操作具有同一個父域,但是二者xnn的目標域不同,操作 4 不可能影響到操作所在域的地址,因此不需要對操作做轉(zhuǎn)換。nn經(jīng)過上述四種情況的考察,我們可以得出結(jié)論,當操作先于操作發(fā)生時,當且僅當以xn下兩種情
38、況下,操作需要針對操作進行轉(zhuǎn)換:nx1.操作和操作具有相同的目標域;xn2.操作的目標域是操作的父域。xn更深入地研究可以發(fā)現(xiàn),上述兩種情況仍可以總結(jié)成一種情況,即當操作的目標域位于x操作的目標域的域路徑上時,操作需要針對操作進行轉(zhuǎn)換。nnx 2.3.22.3.2 根據(jù)地址對判斷操作間的關(guān)系根據(jù)地址對判斷操作間的關(guān)系在 2.2.1 節(jié)中,本文提到在樹狀線性結(jié)構(gòu)中,用一組形如的地址對來描述對象的地( , )n p址,并將這一組地址對存放在一個 vector 中。利用這一結(jié)果,我們可以將 2.3.1 節(jié)中所述的操作間關(guān)系判斷策略用偽代碼的方式描述出來,進而可以使用實際代碼將這一特性實現(xiàn)。基于 c+
39、語法的偽代碼如下圖所示:圖 2.3 用地址對判斷操作間關(guān)系的偽代碼上述代碼利用地址對來檢測兩個操作目標域之間的關(guān)系。根據(jù) 2.3.1 節(jié)中的策略,我們首先利用 isdomaindependent 函數(shù)檢驗兩操作目標域是否獨立,若兩函數(shù)不獨立,再進一步判斷兩目標域是否相同或者具有父子繼承關(guān)系。在函數(shù) isdomaindependent 中,若操做的域路徑長度小于操作,說明操作的目標域nxn位于操作的的上級節(jié)點中,那么返回 true;反之,則遍歷操作的整個目標路徑,若有任何xx一個節(jié)點與操做的不重合,也返回 true。若上述情況均不滿足,則返回 false,即兩者的目n標域不獨立。函數(shù) check
40、targetdomainrelation 則進一步細化了兩個操作目標域之間的關(guān)系。首先調(diào)用isdomaindependent 判斷兩目標域是否獨立,若不獨立,則根據(jù)兩操作目標域域路徑長度來判斷兩操作目標域是同一目標域還是繼承關(guān)系。綜上,通過圖 2.3 中所示的兩個函數(shù),我們能利用兩操作的地址對,清晰地確定出兩操作目標域間的關(guān)系,以確定是否需要對后發(fā)操作實行操作轉(zhuǎn)換。3 3 應用層面的適配技術(shù)應用層面的適配技術(shù)3.13.1 microsoftmicrosoft excelexcel 工作簿的數(shù)據(jù)結(jié)構(gòu)工作簿的數(shù)據(jù)結(jié)構(gòu) 3.1.13.1.1 概述概述由第二章所述,一致性控制的核心為操作轉(zhuǎn)換技術(shù),而操
41、作轉(zhuǎn)換技術(shù)包含數(shù)據(jù)模型和操作模型兩個元素。本文選取了 microsoft excel 作為研究載體,因此要首先對 excel 工作簿的數(shù)據(jù)結(jié)構(gòu)進行深入的研究和分析,一邊將操作轉(zhuǎn)換技術(shù)應用到這種特定的應用程序上。 3.1.23.1.2 從用戶角度看從用戶角度看 excelexcel 工作表工作表從用戶角度看,一個 excel 工作表如下圖所示:圖 3.1 excel 用戶界面與簡單的文本不同,excel 工作表是一種具有復雜結(jié)構(gòu)的文件類型。從用戶的角度看,一個excel 工作簿(workbook)內(nèi)含有多個工作表(worksheet) ,每一個工作表內(nèi)又具有復雜多樣的數(shù)據(jù)對象。一個工作表內(nèi)含有一
42、張以行列方式表示的表,表內(nèi)的每個單元格中具有相關(guān)的文本。同時,一個工作表內(nèi)還可能含有圖形和圖表對象,這些圖形和圖標對象還可能與表格中單元格數(shù)據(jù)有一定的聯(lián)系,如圖 3.1 所示。在相對位置上,這些圖形和圖表可能被放置到工作表界面的任意位置,而且用戶可以隨時調(diào)整其位置。根據(jù)第二章的論述,操作轉(zhuǎn)換技術(shù)必須最終作用在一個線性地址空間上,而這種復雜的數(shù)據(jù)結(jié)構(gòu)似乎與操作轉(zhuǎn)換技術(shù)的要求并不匹配。但是經(jīng)過研究發(fā)現(xiàn),這樣一種復雜的數(shù)據(jù)結(jié)構(gòu)同樣可以與操作轉(zhuǎn)換技術(shù)對數(shù)據(jù)地址空間的要求相匹配。原因在于,我們在這里并不關(guān)心用戶看到的數(shù)據(jù)結(jié)構(gòu)是怎么樣的,我們更為關(guān)心從編程接口上所反映出的底層數(shù)據(jù)結(jié)構(gòu)的狀態(tài)。單純從編程接口
43、上看,excel 這種復雜的數(shù)據(jù)結(jié)構(gòu)恰好能滿足第二章所述的擴展后操作轉(zhuǎn)換技術(shù)對數(shù)據(jù)地址空間的要求。 3.1.33.1.3 從編程接口角度看從編程接口角度看 excelexcel 工作表工作表microsoft excel 組件對象模型(com)提供了一系列復雜多樣的編程接口(api)和對象,利用這些接口和對象,我們可以用 com 自動化(automation)的方式來控制 microsoft excel應用程序,并操縱 excel 文檔數(shù)據(jù)。在這眾多的接口和對象中,僅有一部分是比較重要或是我們需要用到的,我們用一個示意圖來表示這些對象間的相互關(guān)系:工作簿對象應用程序?qū)ο骯pplication工
44、作簿對象workbook工作簿對象workbook.調(diào)用getworkbook方法工作表對象worksheet工作表對象worksheet.調(diào)用getworksheet方法單元格對象range圖形對象shape圖表對象chart調(diào)用getshape方法調(diào)用getchart方法調(diào)用getrange方法.圖 3.2 excel 組件對象模型示意圖由上圖,excel 組件對象模型的基本類型層次結(jié)構(gòu)以樹型結(jié)構(gòu)出現(xiàn),最頂層的 application對象代表了一個 excel 應用程序本身,它含有大量關(guān)于運行時應用程序的屬性,用戶和對象信息,其主要作用在于控制 excel 應用程序的一般狀態(tài),顯示屬性,以
45、及通過此對象來獲取其他對象。workbook 對象代表了一個 excel 工作簿。在一個 application 對象中,有一組 workbook 對象,組成一個被稱為 workbooks 的集合。我們可以通過 getworkbook 方法來取到某一個工作簿的引用,也可以利用這個集合來創(chuàng)建、打開、關(guān)閉一個工作簿。workbook 對象也提供了大量的屬性,用于運行時定義一個工作簿的各種狀態(tài)。同時,也可以通過 workbook 對象來獲取指向worksheet 對象的引用。worksheet 對象代表了一個 excel 工作表。在一個 workbook 對象中,同樣有一組worksheet 對象,
46、組成一個被稱為 worksheets 的集合。正如圖 3.1 所示,當前打開的工作簿內(nèi)含有三個工作表:sheet1,sheet2 和 sheet3。我們可以通過 getworksheet 方法來取得某一個工作表的引用,同時也可以利用 worksheets 集合來創(chuàng)建、打開、關(guān)閉任一個工作表。worksheet 對象提供的屬性和方法大都和 workbook 對象類似,其區(qū)別在于 workbook 對象中的方法和屬性是對這個工作簿下的所有工作表有效,而 worksheet 對象則是僅僅對該工作表有效。每一個 worksheet 對象中仍具有比較復雜的結(jié)構(gòu)。在每一個 worksheet 對象中都含有
47、一個range 對象,用于表示所有的單元格對象,即我們可以通過行列參數(shù)來找到任何一個單元格,并對其進行操作。同時,worksheet 對象中還包含有 shapes 和 charts 對象,分別表示在這個工作表中存在的圖形和圖表對象的集合。這兩個集合的組成元素分別是 shape 對象和 chart 對象,即表示單個圖形和圖表對象。當然,worksheet 對象中還含有其他的復雜對象,例如表示標注的commnet 對象等等,限于本文篇幅,不一一贅述。綜上所述,我們可以發(fā)現(xiàn),在整個 excel 組件對象模型中,各個對象均是從上層對象中獲取而來,且每個對象中均有指向下層對象的集合。更加值得注意的是,這
48、些對象在對象集合中均是以一維線性的方式進行排列(如 workbook 對象中的 worksheets 集合) ,這就為我們將操作轉(zhuǎn)換技術(shù)應用在 excel 文檔上提供了依據(jù)和準備。3.23.2 樹狀線性結(jié)構(gòu)的映射樹狀線性結(jié)構(gòu)的映射 3.2.13.2.1 概述概述由 3.1.3 節(jié)所述,從應用程序接口的觀點看,excel 文檔中的對象呈一種較為規(guī)則的樹形結(jié)構(gòu),而研究這種樹形結(jié)構(gòu)能否與第二章所述的擴展的操作轉(zhuǎn)換技術(shù)所要求的數(shù)據(jù)結(jié)構(gòu)相符合,便成為我們將操作轉(zhuǎn)換技術(shù)應用于 excel 文檔的前提。仿照第二章圖 2.2 的形式,我們將 excel文檔中各種對象之間的關(guān)系表示為如下示意圖:workbook
49、:worksheets:0sheet11sheet22sheet30shape11shape22.nshapen0chart11chart22.nchartnshapes:charts:0row11row22.nrownrange:0cell11cell22.ncellncells:圖 3.3 excel 文檔中對象關(guān)系示意圖由上圖我們可以看到,左側(cè)表示的是從用戶角度看到的 excel 文檔,而右側(cè)表示的則是從應用程序接口所描述的 excel 文檔結(jié)構(gòu),兩者之間的關(guān)系可以由圖中的虛線表示。同時,圖中對 excel 文檔結(jié)構(gòu)進行了規(guī)整,使它的結(jié)構(gòu)層次類似于第二章所所述的樹狀線性結(jié)構(gòu)。至此,我們斷
50、言,excel 文檔的結(jié)構(gòu)滿足擴展的操作轉(zhuǎn)換技術(shù)對數(shù)據(jù)結(jié)構(gòu)的要求,下面一節(jié)對這一結(jié)論進行具體分析論證。 3.2.23.2.2 工作表(工作表(worksheetworksheet)對象序列的映射)對象序列的映射由上兩節(jié)所述,無論從用戶角度還是從應用程序接口角度,在一個 excel 文檔中,工作表是以一個序列的形式出現(xiàn)的,正如圖 3.2 所示。經(jīng)過對 excel 組件對象模型中 workbook 對象中的 worksheets 屬性進行考察,我們發(fā)現(xiàn),有兩種方式可以引用一個工作表對象。一種是按照名字查找,另一種則是根據(jù)工作表的序號進行查找。即既可以用形如 getitem(0)的方式索引一個工作表
51、對象,也可以用形如 getitem(“sheet1”)的方式應用該對象。這也就意味著從應用程序接口的角度看,工作表對象序列可以被認為是一個一維線性空間,即所有的工作表按照順序被排成一列,而這恰好符合操作轉(zhuǎn)換技術(shù)所要求的數(shù)據(jù)結(jié)構(gòu),因此在工作表層面上的操作可以直接應用操作轉(zhuǎn)換技術(shù)。值得一提的是,在這里我們不采用按照名字索引對象的方式。盡管采用這種唯一性命名的方式可以讓在工作表層面的操作免于實行操作轉(zhuǎn)換,但其開銷卻是非常巨大的。在當前采用的復制式體系結(jié)構(gòu)中,多個用戶同時擁有一份 excel 文檔的副本,當他們對各自文檔副本的工作表進行增、刪、改操作時,由于網(wǎng)絡(luò)延遲等原因,各個用戶所操作的工作表的名字
52、很有可能不同,這也就意味著會有潛在的造成數(shù)據(jù)不一致的危險。假如采用這種按照名字索引對象的方式,我們就必須在每個客戶端維護一個全局的對象名稱表,以保證操作對數(shù)據(jù)的一致性,而這種開銷是非常巨大的。綜上所述,在一個 excel 文檔中,工作表對象序列呈一個一維線性結(jié)構(gòu),而這正好滿足了操作轉(zhuǎn)換技術(shù)的要求,可以使用操作轉(zhuǎn)換技術(shù)來保證數(shù)據(jù)的一致性。 3.2.33.2.3 工作表內(nèi)部對象的映射工作表內(nèi)部對象的映射一個 excel 工作表中仍然具有較為復雜的數(shù)據(jù)結(jié)構(gòu),但本文所關(guān)心的范圍主要有兩個部分:表格區(qū)和繪圖區(qū)。顧名思義,表格區(qū)即是 excel 工作表中表格所在的區(qū)域,它的表現(xiàn)形式為一個單元格二元矩陣。根
53、據(jù) excel 版本的不同,這個矩陣的行列數(shù)目略有不同。microsoft excel 2000 至 2003版本中,表格區(qū)有 65536 行,256 列;而在 microsoft excel 2007 中,這一數(shù)據(jù)則被擴展為1048576 行和 256 列。雖然表格區(qū)的數(shù)據(jù)結(jié)構(gòu)為一個二維矩陣,但 excel 組件對象模型中仍然提供了獨立的行對象(row)和列對象(column) ,因此我們可以將表格區(qū)處理為兩個具有集成結(jié)構(gòu)的一維線性空間,這樣就可以將操作轉(zhuǎn)換技術(shù)應用分別應用在行對象和列對象上,即表格區(qū)可以完全映射為一個深度為 2 的樹狀線性結(jié)構(gòu)。繪圖區(qū)則是一個統(tǒng)稱,在實際的 excel 工作
54、表中,繪圖區(qū)其實含有多個對象序列,即凡是不屬于表格區(qū)的對象都會出現(xiàn)在繪圖區(qū)中,例如圖形,圖表,單元格注釋等。以應用程序接口的角度看,這些對像均以序列的形式出現(xiàn),而且可以用索引的方式來引用,盡管實際存儲的形式可能不是如此。在本文范圍中,我們認為,這些繪圖去的對象分屬于不同的對象序列,如圖形對象的集合為 shapes,圖表對象的集合為 notes 等等,這種理解方式既能屏蔽底層實現(xiàn)細節(jié),又不影響對于 excel 文檔結(jié)構(gòu)的準確把握。由此,在繪圖區(qū)中,這些不同的對象序列均為一維線性結(jié)構(gòu),且可以用索引形式來引用其中的對象,則操作轉(zhuǎn)換技術(shù)可以順利地應用在這些對象序列上,以保證數(shù)據(jù)的一致性。另外值得強調(diào)的
55、一點是,在繪圖區(qū)中,對象的索引跟對象的 z-order(即對象的疊放次序)息息相關(guān)。例如,在圖形序列 shapes 中,排在前面的圖形的 z-order 永遠比排在后面的 z-order 小,表現(xiàn)在用戶界面上就是位于更底層的圖層。這就決定了我們在對圖形序列進行一致性控制實際上就是對圖形疊放次序進行一致性控制,這樣的話,當用戶手動更改圖形疊放次序時(如點擊右鍵菜單中的“疊放次序”一欄)就相當于更改圖形對象的索引,就會同樣會出現(xiàn)一致性控制的問題,而這也為圖形對象的一致性控制增加了復雜性。 3.2.43.2.4 對象內(nèi)部數(shù)據(jù)的映射對象內(nèi)部數(shù)據(jù)的映射對于每個單元格對象,圖形對象或者圖標對象,在 exc
56、el 中均具有進一步的內(nèi)部結(jié)構(gòu),例如單元格內(nèi)部有文字,圖形對象內(nèi)部也可以嵌入文字。這些對象的內(nèi)部數(shù)據(jù)結(jié)構(gòu)均為一維線性結(jié)構(gòu)(如單元格內(nèi)的文字) ,理論上直接滿足操作轉(zhuǎn)換技術(shù)對數(shù)據(jù)結(jié)構(gòu)的要求。但能否在這些對象內(nèi)部數(shù)據(jù)上使用操作轉(zhuǎn)換技術(shù)保證數(shù)據(jù)一致性,仍需要進一步論證。我們以最簡單的單元格對象為例。單元格對象內(nèi)部數(shù)據(jù)實質(zhì)上是一個帶格式的字符串序列,那么基于上述理由,我們應該可以使用操作轉(zhuǎn)換技術(shù)來實現(xiàn)單元格內(nèi)部字符的數(shù)據(jù)一致性。但事實并非如次。造成這一現(xiàn)象的根本原因在于,excel 組件對象模型中并沒有提供讀取單元格編輯狀態(tài)下光標位置的 api。在 excel 應用程序中,單元格的狀態(tài)有兩種:常規(guī)狀態(tài)
57、和編輯狀態(tài)。用戶只能在編輯狀態(tài)下向單元格內(nèi)插入數(shù)據(jù),且各個單元格內(nèi)的數(shù)據(jù)相互獨立,即每個單元格的編輯都相當于在編輯一個“小型文本文件” 。我們假設(shè)要實現(xiàn)單元格內(nèi)部字符級別的數(shù)據(jù)一致性,那個當多個用戶同時對一個單元格進行編輯的時候,根據(jù)第二章的論述,我們必須要知道每個用戶當前的光標位置,以便確定其將要操作的字符位置。而 excel 恰恰沒有提供這一層次上的 api,這也就造成了實現(xiàn)之一目標的不便。假若我們一定要實現(xiàn)單元格內(nèi)部字符級別的數(shù)據(jù)一致性,則需要做如下的工作:1.單元格編輯狀態(tài)下監(jiān)視用戶對左右方向鍵的使用,因為方向鍵會改變光標位置;2.在每個客戶端維護一張表,這張表記錄了所有編輯這一單元格
58、用戶的光標位置;3.任一用戶每一次光標的改變均要對所有用戶廣播;4.任一用戶進入編輯狀態(tài)(如雙擊鼠標,按下 f2 鍵)和離開編輯狀態(tài)(如選中其他單元格)均要廣播;5.一旦用戶在編輯狀態(tài)按下 esc 鍵,則要撤銷所有的操作,并清空所有用戶處關(guān)于該用戶此次編輯信息和光標位置的緩存。綜上所述,實現(xiàn)單元格內(nèi)部字符級別數(shù)據(jù)一致性所要付出巨大的代價,而實現(xiàn)這種一致性所帶來的好處卻極為有限。因此,本文在原型實現(xiàn)中就沒有實現(xiàn)單元格內(nèi)部字符級別的數(shù)據(jù)一致性。那么,本文將 excel 工作表中的一個單元格映射為樹狀線性結(jié)構(gòu)的葉子節(jié)點,即一個單元格操作即為一個原子操作,同一時刻一個單元格只能被一個用戶編輯,這也就保
59、證了整體上文檔數(shù)據(jù)的一致性。與此類似的,一個圖形對象以及圖表對象等,在本文中均認為是用戶的最小操作單元。 3.2.53.2.5 總結(jié)總結(jié)在以上論述的基礎(chǔ)上,我們發(fā)現(xiàn) excel 文檔可以被完全映射為一個滿足操作轉(zhuǎn)換技術(shù)要求的樹狀線性結(jié)構(gòu),如下圖所示:workbookworksheets:0sheet11sheet22sheet30shape11shape22.nshapen0chart11chart22.nchartnshapes:charts:0row11row22.nrownrange:0cell11cell22.ncellncells:worksheetrowworksheetworks
60、heetrowrow.圖 3.4 excel 文檔映射成樹狀線性結(jié)構(gòu)如圖 3.4 所示,在這個樹狀線性結(jié)構(gòu)中,根節(jié)點是工作表對象,其中含有一個工作簿對象的線性序列,而每一個工作簿對象中含有多個線性序列,分別為表格行序列,圖形序列和圖標序列等。而第三層中則是每個行對象中的單元格序列。與此同時,在這個結(jié)構(gòu)中,每個線性序列均有自己獨一無二的名字,至此,我們成功地把 excel 文檔映射成為一個滿足操作轉(zhuǎn)換技術(shù)的樹狀線性結(jié)構(gòu)。結(jié)合圖 3.4 和第二章所論述的尋址方式,我們發(fā)現(xiàn):要訪問一個工作表(worksheet)對象,只需要提供一個含有域名稱和索引的地址對,即形如(“worksheet” ,1)形式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 東莞買賣合同范例
- 2024-2025學年高中歷史第四單元19世紀以來的世界文化第19課電影與電視課時作業(yè)岳麓版必修3
- 代租車協(xié)議合同范例
- 書包店鋪轉(zhuǎn)讓合同范例
- 供應機油合同范例
- 會議展會運營合同范例
- 農(nóng)民黃豆收購合同范例
- 市政施工機械施工方案
- 農(nóng)村建筑協(xié)議合同范本
- 20萬投資電影合同范例
- 合成樹脂瓦工程檢驗批質(zhì)量驗收記錄表格
- 保溫無機復合板施工方案
- 卡通家庭急救常識知識講座PPT模板
- 初一語文詞性練習(連答案)(最新整理)
- 小學五年級語文上冊有趣的漢字課件
- 消防(控制室)值班記錄
- 房屋租賃(出租)家私清單
- 計算機技術(shù)碩士專業(yè)學位授權(quán)點申報研究演示課件(PPT 39頁)
- 建筑裝飾材料與構(gòu)造-ppt課件
- 水泥廠熟料庫屋面鋼網(wǎng)架施工方案(46頁)
- AWS D1.8 D1.8M-2021 結(jié)構(gòu)焊接規(guī)范
評論
0/150
提交評論