軟件系統(tǒng)設(shè)計(jì)方案_第1頁
軟件系統(tǒng)設(shè)計(jì)方案_第2頁
軟件系統(tǒng)設(shè)計(jì)方案_第3頁
軟件系統(tǒng)設(shè)計(jì)方案_第4頁
軟件系統(tǒng)設(shè)計(jì)方案_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第五章系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)是把需求轉(zhuǎn)化為軟件系統(tǒng)的最重要的環(huán)節(jié)。系統(tǒng)設(shè)計(jì)的優(yōu)劣在根本上決定了軟件系統(tǒng)的質(zhì)量。就象“一切帝國(guó)主義都是紙老虎”那樣可以斷定“差的系統(tǒng)設(shè)計(jì)必定產(chǎn)生差的軟件系統(tǒng)?!彼晕覀円ΡWC系統(tǒng)設(shè)計(jì)“根正苗紅”,把一切左傾、右傾的設(shè)計(jì)思潮消滅在萌芽狀態(tài)。WindowsNT的一位系統(tǒng)設(shè)計(jì)師擁有8輛法拉利跑車,讓Microsoft公司的一些程序員十分眼紅。但你只能羨慕而不能憤恨,因?yàn)椴⒉皇敲總€(gè)程序員都有本事成為復(fù)雜軟件系統(tǒng)的設(shè)計(jì)師。系統(tǒng)設(shè)計(jì)要比純粹的編程困難得多。即便你清楚客戶的需求,卻未必知道應(yīng)該設(shè)計(jì)什么樣的軟件系統(tǒng)——既能掙最多的錢又能讓客戶滿意?!疤煜挛骱蠲朗呛贾荨?,千年前蘇東坡大學(xué)士對(duì)西湖精采絕倫的系統(tǒng)設(shè)計(jì),使杭州榮升為“天堂”,讓后人只剩下贊嘆和破壞的份了。本章講述系統(tǒng)設(shè)計(jì)的四方面內(nèi)容:體系結(jié)構(gòu)設(shè)計(jì)、模塊設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)、用戶界面設(shè)計(jì)。如果將軟件系統(tǒng)比喻為人體,那么:(1)體系結(jié)構(gòu)就如同人的骨架。如果某個(gè)家伙的骨架是猴子,那么無論怎樣喂養(yǎng)和美容,這家伙始終都是猴子,不會(huì)成為人。(2)模塊就如同人的器官,具有特定的功能。人體中最出色的模塊設(shè)計(jì)之一是手,手只有幾種動(dòng)作,卻能做無限多的事情。人體中最糟糕的模塊設(shè)計(jì)之一是嘴巴,嘴巴將最有價(jià)值但毫無相干的幾種功能如吃飯、說話、親吻混為一體,使之無法并行處理,真乃人類之不幸。(3)數(shù)據(jù)結(jié)構(gòu)與算法就如同人的血脈和神經(jīng),它讓器官具有生命并能發(fā)揮功能。數(shù)據(jù)結(jié)構(gòu)與算法分布在體系結(jié)構(gòu)和模塊中,它將協(xié)調(diào)系統(tǒng)的各個(gè)功能。人的耳朵和嘴巴雖然是相對(duì)獨(dú)立的器官,但如果耳朵失聰了,嘴巴就只能發(fā)出“啊”“嗚”的聲音,等于喪失了說話的功能(所以聾子天生就是啞巴),可人們卻又能用手勢(shì)代替說話。人體的數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)真是十分神奇并且十分可笑。(4)用戶界面就如同人的外表,最容易讓人一見鐘情或一見惡心。象人類追求心靈美和外表美那樣,軟件系統(tǒng)也追求(內(nèi)在的)功能強(qiáng)大和(外表的)界面友好。但隨著生活節(jié)奏的加快,人們已少有興趣去品味深藏不露的內(nèi)在美。如果把Unix系統(tǒng)比作是健壯的漢子和婦人,那么Windows系統(tǒng)就象嫵媚的小白臉和狐貍精。想不到Windows系統(tǒng)竟然能興風(fēng)作浪,占去大半市場(chǎng)。有鑒于此,我們應(yīng)該鼓勵(lì)女士多買化妝品(男士付錢)以獲得更好的界面。在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí),我們要深情地關(guān)注軟件的質(zhì)量因素,如正確性與精確性、性能與效率、易用性、可理解性與簡(jiǎn)法性、可復(fù)用性與可擴(kuò)充性等等。即使把系統(tǒng)設(shè)計(jì)做好了,也并不意味著就能產(chǎn)生好的軟件系統(tǒng)。在程序設(shè)計(jì)、測(cè)試、維護(hù)等環(huán)節(jié)還要做大量的工作,無論哪個(gè)環(huán)節(jié)出了差錯(cuò),都會(huì)把好事搞砸了。據(jù)說上帝把所有的女士都設(shè)計(jì)成天使,可是天使們?cè)谙路矔r(shí)有些雙腳先著地,有些臉先著地。上帝的這一疏忽讓很多女孩傷透了心。我們?cè)陂_發(fā)軟件時(shí),一定要吸取這個(gè)教訓(xùn)。5.1體系結(jié)構(gòu)設(shè)計(jì)楊叔子院子曾這樣指點(diǎn)其弟子:文學(xué)中有科學(xué),音樂中有數(shù)學(xué),漫畫中有現(xiàn)代數(shù)學(xué)的拓?fù)鋵W(xué)。漫畫家可以“幾筆”就把一個(gè)人畫出來,不管怎么美化或丑化,就是活像。為什么?因?yàn)槟恰皫坠P”不是別的,而是拓?fù)鋵W(xué)中的特征不變量,這是事物最本質(zhì)的東西。體系結(jié)構(gòu)是軟件系統(tǒng)中最本質(zhì)的東西:(1)體系結(jié)構(gòu)是對(duì)復(fù)雜事物的一種抽象。良好的體系結(jié)構(gòu)是普遍適用的,它可以高效地處理多種多樣的個(gè)體需求。一提起“房子”,我們的腦中馬上就會(huì)出現(xiàn)房子的印象(而不是地洞的印象)。“房子”是人們對(duì)住宿或辦公環(huán)境的一種抽象。不論是辦公樓還是民房,同一類建筑物(甚至不同類的建筑物)之間都具有非常相似的體系結(jié)構(gòu)和構(gòu)造方式。如果13億中國(guó)人民每個(gè)人都要用特別的方式構(gòu)造奇異的房子,那么960萬平方公里的土地將會(huì)變得千瘡百孔,終日不得安寧?;郏?)體系淹結(jié)構(gòu)在一定搞的時(shí)間內(nèi)保弄持穩(wěn)定。只犧有在穩(wěn)定的悶環(huán)境下,人跨們才能干點(diǎn)級(jí)事情,社會(huì)責(zé)才能發(fā)展。違科學(xué)告訴我散們,宇宙間盤萬物無時(shí)無君刻不在運(yùn)動(dòng)盤、飛行。由任于我們的生披活環(huán)境在地啊球上保持相配對(duì)穩(wěn)定,以師致于我們可陰以無憂無慮船地吃飯和睡呆覺,壓根就刪意識(shí)不到自撤己是活生生汁的導(dǎo)彈。軟覺件開發(fā)最怕慚的就是需求顫變化,但丟“快需求會(huì)發(fā)生怎變化江”詢是個(gè)無法逃掃避的現(xiàn)實(shí)。淡人們希望在是需求發(fā)生變劉化時(shí),最好懼只對(duì)軟件做蜂些皮皮毛毛置的修改,可菊千萬別改動(dòng)悼軟件的體系建結(jié)構(gòu)。就如尺人們對(duì)住宿班的需求也會(huì)帥變動(dòng),你可涌以經(jīng)常改變唐房間的裝璜或和擺設(shè),但久不會(huì)在每次浙變動(dòng)時(shí)都要鏡去折墻、拆痰柱、挖地基賣。如果當(dāng)需衣求發(fā)生變化菜時(shí),程序員壩不得不去修岡改軟件的體蹤系結(jié)構(gòu),那缸么這個(gè)軟件伙的系統(tǒng)設(shè)計(jì)栽是失敗的??屏己玫捏w系廳結(jié)構(gòu)意味著冰普適、高效棍和穩(wěn)定。本倚節(jié)將論述兩器種非常通用矛的軟件體系腹結(jié)構(gòu):層次奇結(jié)構(gòu)和客戶搞機(jī)/服務(wù)器詠(峽Clien晚t/Ser蜻ver訂)結(jié)構(gòu)。饞5元.紛1瑞.團(tuán)1懷族層次結(jié)構(gòu)箏層次結(jié)構(gòu)表削達(dá)了這么一吳種常識(shí):有頭些事情比較貫復(fù)雜,我們飲沒法一口氣誰干完,就把即事情分為好炸幾層,一層白一層地去做數(shù)。高層的工膀作總是建立牽在低層的工式作之上。層鞋次關(guān)系主要蹄有兩種:上棄下級(jí)關(guān)系和瀉順序相鄰關(guān)梯系。滲一、上下級(jí)充關(guān)系的層次焰結(jié)構(gòu)諒我們從小學(xué)蹲一直讀到博河士研究生畢翅業(yè),要讀2耗0多年,可塘以分為五個(gè)溪層次。而范死進(jìn)的知識(shí)結(jié)欠構(gòu)只有兩層持:質(zhì)“句私塾另”渡和鈴“磁秀才族”揪,但讀了五游十多年,如搞圖5嗚.增1所示。一羞般地處于較軍高層次的學(xué)竿生應(yīng)該懂得彼所有低層次慎的知識(shí),而燈處于低層次際學(xué)生無法懂孝得所有高層昂次的知識(shí)。跟圖5我.類1的層次結(jié)歸構(gòu)存在上下池級(jí)關(guān)系,如孟同在軍隊(duì)中卻,上級(jí)可以嫌命令下級(jí),肢而下級(jí)不能買命令上級(jí)。診如果把圖5卻.嚴(yán)1的層次結(jié)顆構(gòu)當(dāng)成是一織個(gè)軟件系統(tǒng)萬的結(jié)構(gòu),那允么上層子系拍統(tǒng)可以使用祖下層子系統(tǒng)金的功能,而亦下層子系統(tǒng)軌不能夠使用孟上層子系統(tǒng)優(yōu)的功能。傭二、順序相爺鄰關(guān)系的層留次結(jié)構(gòu)籍順序相鄰關(guān)遮系的層次結(jié)趣構(gòu)表明通訊牙只能在相鄰剩兩層之間發(fā)司生,信息只攝能被一層一舊層地順序傳警遞。這種層溪次結(jié)構(gòu)的經(jīng)騎典之作是計(jì)夕算機(jī)網(wǎng)絡(luò)的諷OSI參考降模型,如圖定5溜.市2所示。為姓了減少設(shè)計(jì)妨的復(fù)雜性,姥大多數(shù)網(wǎng)絡(luò)儀都按層(裁Layer攜)或級(jí)(料Level伐)的方式組樹織。每一層驗(yàn)的目的都是盼向它的上一預(yù)層提供一定哲的服務(wù),而槽把如何實(shí)現(xiàn)都這一服務(wù)的接細(xì)節(jié)對(duì)上一倚層加以屏蔽庫(kù)。一臺(tái)機(jī)器濤上的第棍n殿層與另一臺(tái)筋機(jī)器上的第分n判層進(jìn)行對(duì)話向。通話的規(guī)企則就是第釀n俗層的協(xié)議。伍數(shù)據(jù)不是從挎一臺(tái)機(jī)器的吳第恥n須層直接傳送鑰到另一臺(tái)機(jī)奪器的第晝n妻層。發(fā)送方兇把數(shù)據(jù)和控狀制信息逐層桐向下傳遞。猛最低層是物熔理介質(zhì),它航進(jìn)行實(shí)際的乒通訊。接收灰方則將數(shù)據(jù)吳和控制信息仰逐層向上傳街遞。厲每一對(duì)相鄰忙層之間都有縣接口。接口若定義了下層廉提供的原語宰操作和服務(wù)握。當(dāng)網(wǎng)絡(luò)設(shè)嗽計(jì)者在決定雪一個(gè)網(wǎng)絡(luò)應(yīng)朽包含多少層煙,每一層應(yīng)撈當(dāng)做什么的候時(shí)候,其中曬很重要的工晉作是在相鄰風(fēng)層之間定義等清晰的接口娘。接口可以孟使得同一層摸能輕易地用求某一種實(shí)現(xiàn)鋸(黑Imple脹menta粗tion獵)來替換另布一種完全不府同的實(shí)現(xiàn)(示如用衛(wèi)星信填道來代替所蠢有的線辨),只要新耗的實(shí)現(xiàn)能向它上層提供同闊一組服務(wù)就摔可以了。[米Tanen默baum寬姓1998]小學(xué)(5-6年)小學(xué)(5-6年)碩士(2-3年)托下桌溉縫廣拒禁駁碩士(2-3年)苦壤罰蘆英頁仿鞠才考蟲上戚“幻舉人花”刷時(shí)已五十多和歲了本科(4年)容拒燥賺剩債劣瀉游復(fù)沸習(xí)報(bào)考臭“貞舉人肉”督用了幾十年本科(4年)秀才秀才中學(xué)(6年)私私塾博士(3-4年)博士(3-4年)搖訊圖5會(huì).纏1(害a脆)從小學(xué)讀志到博士存在癥的五個(gè)學(xué)習(xí)溜階段劫階圖5修.頓1(戴b找)范進(jìn)的知塞識(shí)結(jié)構(gòu)舉人應(yīng)用層舉人應(yīng)用層應(yīng)用層應(yīng)用層表示層表示層表示層表示層會(huì)話層主機(jī)A會(huì)話層主機(jī)A會(huì)話層會(huì)話層傳輸層傳輸層主傳輸層傳輸層主機(jī)B網(wǎng)絡(luò)層網(wǎng)絡(luò)層網(wǎng)絡(luò)層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層物理層物理層物理層逮圖5塵.錦2計(jì)算礙機(jī)網(wǎng)絡(luò)的O魯SI參考模裙型物理層蹄三、其它的梅層次結(jié)構(gòu)管目前在大型驚商業(yè)應(yīng)用軟翻件系統(tǒng)中還酷流行一種包餃含中間件(潮Middl頭eware景)的層次結(jié)蹈構(gòu),如圖5戀.頃3所示[J裳a(bǔ)cobs體on19擁97]暫。中間件支遷持與平臺(tái)無握關(guān)的分布式崗計(jì)算,可以特用冷DCOM靠和CORB沙A對(duì)象來實(shí)套現(xiàn)。MiddlewareMiddlewareApplicationSystemsBusiness-specificComponentsApplicationSystemsBusiness-specificComponentsSystemSoftwareSystemSoftware務(wù)圖5毅.緒3包含日中間件的層時(shí)次結(jié)構(gòu)壞5土.個(gè)1度.因2疤若客戶機(jī)/服擴(kuò)務(wù)器結(jié)構(gòu)疏讓我們先回莖顧一下早期臥的系統(tǒng)錘。貝爾(疫Alexa點(diǎn)nder權(quán)Graha絹mBel休l結(jié))于187期6年申請(qǐng)了腦專利。構(gòu)那時(shí)期的電炊話必須一對(duì)司一對(duì)地賣,幅用戶自己在欄兩個(gè)之牙間拉一根線娛。如果一個(gè)弟用戶想緩和其它幾個(gè)圍用戶通敏話,他必須固拉窩n糕根單獨(dú)的線散到每個(gè)人的盯房子里。于旨是在很短的董時(shí)間內(nèi),城扔市里到處都憤是穿過房屋違和樹木的混勝亂的線湯。很明顯,纏企圖把所有核的完全霧互聯(lián)(如圖顯5甚.膚4(宋a趣)所示)是否行不通的。容貝爾公紅司在187標(biāo)8年開辦了嫁第一個(gè)交換器局。公司為澤每個(gè)客戶架首設(shè)一條線。桌打時(shí),放客戶搖動(dòng)電乳話的曲柄使飛公司辦鎮(zhèn)公室的鈴響威起來,操作雞員聽到鈴聲遼以后根據(jù)要竿求將呼叫方候和被呼叫方勝用跳線手工雙連接起來。恥這種集中交爺換式的模型棵如圖5跌.椒4(瀉b趙)所示。很握快地,貝爾務(wù)系統(tǒng)的交換赴局就出現(xiàn)在盛各地。人們姿又要求能打摸城市間的長(zhǎng)價(jià)途,就區(qū)出現(xiàn)了二級(jí)粒交換局,以障后進(jìn)一步發(fā)妻展為多個(gè)二除級(jí)交換局。戶[你Tanen隨baum崗1998]交換局交換局說5好.交4(號(hào)a幻)完全互聯(lián)染的系統(tǒng)勇是舊夢(mèng)友5豆.查4(升b蜻)集中交換覽式的系納統(tǒng)受如果將圖5積.田4(伸b仰)中的點(diǎn)看成是客戶邪程序,將中議心的交換局蒙看成是服務(wù)考程序,那么轎圖5披.侵4(鴉b巖)就是典型埋的客戶機(jī)/屬服務(wù)器結(jié)構(gòu)局。注意這里達(dá)客戶機(jī)和服渴務(wù)器都是指戲軟件而不是頑指硬件(一駐臺(tái)計(jì)算機(jī)可暑以放多個(gè)客瑞戶機(jī)和服務(wù)敲器軟件)。板客戶機(jī)/服登務(wù)器結(jié)構(gòu)存咸在兩個(gè)顯然鐘的優(yōu)點(diǎn):嚴(yán)(1)以集注中的方式高罷效率地管理贈(zèng)通訊。前面限講系統(tǒng)技的故事就是轉(zhuǎn)要說明這一餃點(diǎn)。寨(2)可以勞共享資源。額比如在信息犧管理系統(tǒng)中范,服務(wù)器將相信息集中起狐來,任何客偉戶機(jī)都可以濱通過訪問服失務(wù)器而獲得谷所需的信息獸。蠶客戶機(jī)和服勻務(wù)器之間的富通訊以絲“觸請(qǐng)求州——盤響應(yīng)迷”什的方式進(jìn)行回??蛻魴C(jī)先塊向服務(wù)器發(fā)苦起德“沒請(qǐng)求侄”梨(并Reque御st崇),服務(wù)器礎(chǔ)再響應(yīng)(博Respo歸nse予)這個(gè)請(qǐng)求術(shù),如圖5坊.賽5所示。夜縫杠亮擱冷般零小請(qǐng)求服務(wù)器客戶機(jī)服務(wù)器客戶機(jī)壘沿救亡馳斬歲狀窮響應(yīng)狠圖5勺.蘇5汁Cli倉(cāng)ent謊和逃Serve挺r趕之間的通訊妄以杏“允請(qǐng)求許——稱響應(yīng)犁”姥的方式進(jìn)行醋采用垃“榴請(qǐng)求討——棍響應(yīng)論”袋這種通訊方替式的基本動(dòng)膜機(jī)是為了解澤決筍“路聚集視”遣(搬Rende蓬zvous濾)問題。為絮了理解這一坊個(gè)問題,設(shè)芽想一個(gè)人試襯圖在分離的托機(jī)器上啟動(dòng)形兩個(gè)程序并趙讓它們進(jìn)行營(yíng)通訊。還需蔽記住,計(jì)算增機(jī)的運(yùn)行速絨度要比人的陶操作速度高騾出許多數(shù)量竊級(jí)。在他啟耗動(dòng)第一個(gè)程返序后,該程遇序開始執(zhí)行托并向?qū)Φ瘸潭晷虬l(fā)送消息妄。在幾個(gè)微沙秒內(nèi),它便元發(fā)現(xiàn)對(duì)等程射序還不存在楊,于是就發(fā)捏出一條錯(cuò)誤明消息,然后吃退出。此后碗,他啟動(dòng)了造第二個(gè)程序完。不幸的是挺,當(dāng)?shù)诙€(gè)滋程序開始執(zhí)邁行時(shí),它也分找不到第一宅個(gè)程序(早轟已退出)。朱即使這兩個(gè)鴿程序連續(xù)地平重新試著通歡訊,但由于外它們的執(zhí)行備速度那么高鋒,以致于它筒們?cè)谕凰泊组g聯(lián)系上的板概率非常低沙。在客戶機(jī)結(jié)/服務(wù)器結(jié)哪構(gòu)中,服務(wù)鑰器在啟動(dòng)后唱必須(無限拖期地)等待萄客戶機(jī)的三“撐請(qǐng)求午”捕,因此就形彼成了塵“孫請(qǐng)求泥——覺響應(yīng)叨”銜的通訊方式綿。餅在渡Inter順net/I既ntran略et忌領(lǐng)域,目前較“偷瀏覽器鉛—雅Web患服務(wù)器犧—營(yíng)數(shù)據(jù)庫(kù)服務(wù)盼器講”靠結(jié)構(gòu)是一幣種非常流行受的客戶機(jī)/耽服務(wù)器結(jié)構(gòu)飼,如圖遇5.6戲所示。這種掛結(jié)構(gòu)最大的喪優(yōu)點(diǎn)是:客拜戶機(jī)統(tǒng)一采企用瀏覽器,鋸這不僅讓用送戶使用方便索,而且使得過客戶機(jī)端不屠存在維護(hù)的窩問題。當(dāng)然縫,軟件開發(fā)尸布和維護(hù)的西工作不是自撞動(dòng)消失了,周而是轉(zhuǎn)移到欣了里Web天服務(wù)器端。者在肢Web色服務(wù)器端,鬧程序員要用千腳本語言編丟寫響應(yīng)頁面束。例如用漏Micro孤soft榨的依ASP科語言查詢數(shù)凍據(jù)庫(kù)服務(wù)器殃,將結(jié)果保半存在粉Web椅頁面中,再舅由瀏覽器顯鼻示出來。數(shù)據(jù)庫(kù)服務(wù)器Web數(shù)據(jù)庫(kù)服務(wù)器Web服務(wù)器客戶機(jī)ASPEngine瀏覽器濾取噸族奏HTTP柔失請(qǐng)求ASPEngine瀏覽器駕柜蓄括魄栗嘴篇調(diào)朗巧認(rèn)查詢?cè)~拍悔屠要獲疑碗親HTTP熟西響應(yīng)寶圖宋5.6臟“噴瀏覽器拳—光Web灣服務(wù)器累—接數(shù)據(jù)庫(kù)服務(wù)哭器窗”寨結(jié)構(gòu)痛5仆.2趟模塊愛設(shè)計(jì)差在設(shè)計(jì)好軟摟件的體系結(jié)腳構(gòu)后,就已租經(jīng)在宏觀上假明確了各個(gè)身模塊應(yīng)具有竟什么功能,簡(jiǎn)應(yīng)放在體系成結(jié)構(gòu)的哪個(gè)代位置。我們齒習(xí)慣地從功菠能上劃分模助塊,保持牽“跌功能獨(dú)立舉”走是模塊化設(shè)尿計(jì)的基本原斥則。因?yàn)?,罪“泛功能?dú)立咐”蠻的模塊可以斜降低開發(fā)、峰測(cè)試、維護(hù)畏等階段的代潮價(jià)。但是研“欲功能獨(dú)立煮”陳并不意味著伯模塊之間保塔持絕對(duì)的孤?lián)u立。一個(gè)系歸統(tǒng)要完成某去項(xiàng)任務(wù),需批要各個(gè)模塊嫂相互配合才藍(lán)能實(shí)現(xiàn),此被時(shí)模塊之間再就要進(jìn)行信漿息交流。游比如手和腳方是兩個(gè)躁“鐮功能獨(dú)立密”瞇的模塊。沒悉有腳時(shí),手割照樣能干活戀。沒有手時(shí)扯,腳仍可以靜走路。但如右果希望跑得租快,那么邁積左腳時(shí)一定岔要伸右臂甩陶左臂,邁右餓腳時(shí)則要伸綁左臂甩右臂損。在設(shè)計(jì)一嗚個(gè)模塊時(shí)不頃僅要考慮背“址這個(gè)模塊就殼該提供什么夫樣的功能漏”頂,還要考慮合“節(jié)這個(gè)模塊應(yīng)暖該怎樣與其慨它模塊交流哲信息嫩”尊。六本節(jié)將論述磨評(píng)價(jià)模塊設(shè)仰計(jì)優(yōu)劣的三黃個(gè)特征因素賤:恢“諒信息隱藏照”樸、展“阿內(nèi)聚與耦合光”臟和覽“臥封閉要——跡開放性熔”柄。連5艙.扇2霧.搶1撇盾信息隱藏紅在一節(jié)不和窮諧的課堂里外,老師嘆氣訂道:奉“腥要是坐在后逢排聊天的同任學(xué)能象中間卻打牌的同學(xué)友那么安靜,州就不會(huì)影響借到前排睡覺挺的同學(xué)。蘇”移這個(gè)故事告粱訴我們,如站果不想讓壞幼事傳播開來類,就應(yīng)該把池壞事隱藏起殲來,主“渡家丑不可外摸揚(yáng)扔”否就是這個(gè)道鍛理。為了盡屋量避免某個(gè)騾模塊的行為義去干擾同一礎(chǔ)系統(tǒng)中的其尸它模塊,在來設(shè)計(jì)模塊時(shí)遲就要注意信德息隱藏。應(yīng)杰該讓模塊僅朝僅公開必須券要讓外界知紗道的內(nèi)容,臨而隱藏其它疲一切內(nèi)容。披模塊的信息類隱藏可以通徑過接口設(shè)計(jì)扒來實(shí)現(xiàn)。一海個(gè)模塊僅提管供有限個(gè)接息口(遣Inter頸face講),執(zhí)行模翠塊的功能或茶與模塊交流艘信息必須且論只須通過調(diào)住用公有接口觀來實(shí)現(xiàn)。如圍果模塊是一消個(gè)C++對(duì)啄象,那么該造模塊的公有棄接口就對(duì)應(yīng)己于對(duì)象的公顧有函數(shù)。如哨果模塊是一紅個(gè)COM對(duì)膊象,那么該飯模塊的公有汽接口就是C愁OM對(duì)象的鴉接口。一個(gè)靜COM對(duì)象政可以有多個(gè)概接口,而每緞個(gè)接口實(shí)質(zhì)培上是一些函未數(shù)的集合。槳[危Roger兼son1午999]促美國(guó)也許澤是世界上丑稠聞最多的國(guó)科家,因?yàn)樗非竺裰?,駛不懂得籮“顫隱藏信息取”匯。但美國(guó)又俯是軟件產(chǎn)業(yè)途最發(fā)達(dá)的國(guó)差家,模塊化賺設(shè)計(jì)的方法避都是美國(guó)人納倡導(dǎo)的,他猴們應(yīng)該很懂墾得遵“鴨隱藏信息抬”咬。真是前后掠矛盾,這些用美國(guó)佬!達(dá)5系.轉(zhuǎn)2宰.巾2距悠內(nèi)聚與耦合觸犧內(nèi)聚(擦Cohes刪ion扶)是一個(gè)模濕塊內(nèi)部各成鴿分之間相關(guān)撞聯(lián)程度的度畢量。耦合(悄Coupl桌ing疫)是模塊之私間依賴程度百的度量。內(nèi)被聚和耦合是習(xí)密切相關(guān)的戰(zhàn),與其它模流塊存在強(qiáng)耦釣合的模塊通梨常意味著弱求內(nèi)聚,而強(qiáng)瓶?jī)?nèi)聚的模塊拘通常意味著塊與其它模塊舞之間存在弱池耦合。模塊據(jù)設(shè)計(jì)追求強(qiáng)功內(nèi)聚,弱耦抖合。簽一、內(nèi)聚強(qiáng)黎度虛內(nèi)聚按強(qiáng)度隔從低到高有瓦以下幾種類界型:辛(1)偶然展內(nèi)聚。如果它一個(gè)模塊的亦各成分之間駝毫無關(guān)系,漫則稱為偶然枯內(nèi)聚。?。?)邏輯躲內(nèi)聚。幾個(gè)闊邏輯上相關(guān)條的功能被放寄在同一模塊鏟中,則稱為殲邏輯內(nèi)聚。酒如一個(gè)模塊贊讀取各種不塌同類型外設(shè)礦的輸入。盡卵管邏輯內(nèi)聚壤比偶然內(nèi)聚倚合理一些,惕但邏輯內(nèi)聚劣的模塊各成懼分在功能上損并無關(guān)系,烏即使局部功螞能的修改有凳時(shí)也會(huì)影響蘆全局,因此芝這類模塊的失修改也比較收困難。糕(3)時(shí)間野內(nèi)聚。如果座一個(gè)模塊完懼成的功能必墓須在同一時(shí)蹈間內(nèi)執(zhí)行(牲如系統(tǒng)初始刺化),但這禽些功能只是迅因?yàn)闀r(shí)間因壇素關(guān)聯(lián)在一抹起,則稱為倦時(shí)間內(nèi)聚。奴(4)過程姑內(nèi)聚。如果緣一個(gè)模塊內(nèi)寶部的處理成腳分是相關(guān)的獸,而且這些撫處理必須以揀特定的次序絨執(zhí)行,則稱很為過程內(nèi)聚取。殲(5)通信但內(nèi)聚。如果蜘一個(gè)模塊的總所有成分都蝴操作同一數(shù)碎據(jù)集或生成類同一數(shù)據(jù)集棟,則稱為通央信內(nèi)聚。啦(6)順序差內(nèi)聚。如果列一個(gè)模塊的臟各個(gè)成分和但同一個(gè)功能喘密切相關(guān),管而且一個(gè)成爬分的輸出作富為另一個(gè)成仰分的輸入,頂則稱為順序鉗內(nèi)聚。叨(7)功能玉內(nèi)聚。模塊經(jīng)的所有成分先對(duì)于完成單痕一的功能都拆是必須的,爆則稱為功能因內(nèi)聚。巡二、耦合強(qiáng)份度悶耦合的強(qiáng)度演依賴于以下悠幾個(gè)因素:雨(1)一個(gè)山模塊對(duì)另一侄個(gè)模塊的調(diào)輕用;(2)質(zhì)一個(gè)模塊向裝另一個(gè)模塊若傳遞的數(shù)據(jù)歷量;(3)徐一個(gè)模塊施筋加到另一個(gè)釣?zāi)K的控制司的多少;(外4)模塊之微間接口的復(fù)插雜程度。甜耦合按從強(qiáng)棚到弱的順序鴉可分為以下寨幾種類型:含(1)內(nèi)容清耦合。當(dāng)一刪個(gè)模塊直接眉修改或操作鄭另一個(gè)模塊占的數(shù)據(jù)旬,蒙或者直接轉(zhuǎn)叢入另一個(gè)模鑄塊時(shí),就發(fā)在生了內(nèi)容耦紅合。此時(shí),咸被修改的模精塊完全依賴河于修改它的譽(yù)模塊。抬(2)公共救耦合。兩個(gè)鎖以上的模塊暈共同引用一漿個(gè)全局?jǐn)?shù)據(jù)霞項(xiàng)就稱為公驕共耦合。名(3)控制菌耦合。一個(gè)藏模塊在界面心上傳遞一個(gè)建信號(hào)(如開夢(mèng)關(guān)值、標(biāo)志蟲量等)控制蔥另一個(gè)模塊復(fù),接收信號(hào)貫的模塊的動(dòng)狗作根據(jù)信號(hào)青值進(jìn)行調(diào)整臭,稱為控制域耦合。甘(4)標(biāo)記枯耦合。模塊顛間通過參數(shù)昏傳遞復(fù)雜的級(jí)內(nèi)部數(shù)據(jù)結(jié)膛構(gòu),稱為標(biāo)麗記耦合。此塊數(shù)據(jù)結(jié)構(gòu)的選變化將使相敵關(guān)的模塊發(fā)福生變化。嫌(5)數(shù)據(jù)羊耦合。模塊港間通過參數(shù)霉傳遞基本類盤型的數(shù)據(jù),剝稱為數(shù)據(jù)耦鏡合。粗(6)非直像接耦合。模愉塊間沒有信我息傳遞時(shí),舊屬于非直接巡耦合。令如果模塊間勻必須存在耦泛合,就盡量重使用數(shù)據(jù)耦辨合,少用控斧制耦合,限不制公共耦合申的范圍,堅(jiān)黨決避免使用稈內(nèi)容耦合。煙5宏.掃2館.載3質(zhì)劣封閉憑——潤(rùn)開放性秩如果一個(gè)模敬塊可以作為帆一個(gè)獨(dú)立體勵(lì)被其它程序楚引用,則稱許模塊具有封認(rèn)閉性。如果魯一個(gè)模塊可柳以被擴(kuò)充,擁則稱模塊具墓有開放性。隔從字面上看裹,讓模塊具聞?dòng)泄贰熬品忾]栗——多開放性毒”勝是矛盾的,奇但這種特征獸在軟件開發(fā)疫過程中是客渡觀存在的。扎當(dāng)著手一個(gè)攪新問題時(shí),撇我們很難一襯次性解決問友題。應(yīng)該先守縱觀問題的躺一些重要方震面,同時(shí)作映好以后補(bǔ)充槍的準(zhǔn)備。因銷此讓模塊存著在恭“功開放性挽”舞并不是壞事葵情。稼“蹦封閉性千”莊也是需要的愁,因?yàn)槲覀儾〔荒艿鹊酵陻[全掌握解決驚問題的信息盤后再把程序正做成別人能酸用的模塊。鑰模塊的棗“蓬封閉樓——凳開放性茄”營(yíng)實(shí)際上對(duì)應(yīng)跟于軟件質(zhì)量影因素中的可寬復(fù)用性和可阻擴(kuò)充性。采稅用面向過程駛的方法進(jìn)行旬程序設(shè)計(jì),租很難開發(fā)出贏既具有封閉吵性又具有開測(cè)放性的模塊室。采用面向煤對(duì)象設(shè)計(jì)方燙法可以較好間地解決這個(gè)撐問題。蝦5券.鋼3角債數(shù)據(jù)結(jié)構(gòu)吹與算法設(shè)計(jì)貝學(xué)會(huì)設(shè)計(jì)數(shù)叛據(jù)結(jié)構(gòu)與算迫法,可以讓跳我們編寫出西高效率的程灑序。也許有捧人要問,在小計(jì)算機(jī)速度頌日新月異的法今天,為什閑么還需要高詞效率的程序僚?辛因?yàn)槲覀兊恼葱坌呐c能力量是一起增長(zhǎng)峰的,技術(shù)進(jìn)蹈步最快也快功不過人們欲恭望的增長(zhǎng)。巴計(jì)算速度和蝶存儲(chǔ)容量上崇的革新僅僅孝提供了處理惹更復(fù)雜問題紅的有效工具洞,所以高效綱率的程序永妻遠(yuǎn)不會(huì)過時(shí)殼。述設(shè)計(jì)高效率素的程序是基棟于良好的數(shù)駱據(jù)結(jié)構(gòu)與算態(tài)法,而不是系基于編程小涂技巧。大多預(yù)數(shù)計(jì)算機(jī)科泄學(xué)系在設(shè)置嗎課程時(shí),都照重視學(xué)習(xí)基掏本的軟件工獅程原理,以隔及數(shù)據(jù)結(jié)構(gòu)從與算法設(shè)計(jì)妥。桿一般說來,慕數(shù)據(jù)結(jié)構(gòu)與虹算法就是一缺類數(shù)據(jù)的表蘿示及其相關(guān)脊的操作(這捐里算法不是閘指數(shù)值計(jì)算步的算法)。索從數(shù)據(jù)表示宮的觀點(diǎn)來看踩,存儲(chǔ)在數(shù)蔥組中的一個(gè)誼有序整數(shù)表惡也是一種數(shù)層據(jù)結(jié)構(gòu)。算寬法是指對(duì)數(shù)楊據(jù)結(jié)構(gòu)施加緞的一些操作圈,例如對(duì)一抗個(gè)線性表進(jìn)忽行檢索、插帳入、刪除等內(nèi)操作。一個(gè)扔算法如果能指在所要求的準(zhǔn)資源限制(笛Resou渠rceC朗onstr枝aints奸)范圍內(nèi)將收問題解決好殘,則稱這個(gè)涂算法是有效貼率(E仰ffici夠ent廣)的。例如暈一個(gè)資源限夜制可能是圖“嫩用于存儲(chǔ)數(shù)鞏據(jù)的內(nèi)存有前限共”任,或者削“濃允許執(zhí)行每美個(gè)子任務(wù)所繼需的時(shí)間有苗限鐵”騙。一個(gè)算法地如果比其它愁已知算法所鄭需要的資源資都少,這個(gè)杰算法也被稱晨為是有效率還的。算法的懂代價(jià)(C塔ost問)是指消耗唯的資源量。世一般說來,只代價(jià)是由一寨個(gè)關(guān)鍵資源貞例如時(shí)間或式空間來評(píng)估腔的。怠毋庸置疑,柳人們編寫程謀序是為了解霸決問題。只塵有通過預(yù)先碼分析問題來屈確定必須達(dá)婆到的性能目燙標(biāo),才有希步望挑選出正接確的數(shù)據(jù)結(jié)避構(gòu)。有相當(dāng)謹(jǐn)多的程序員想忽視了這一甘分析過程,董而直接選用寄某一個(gè)他們推習(xí)慣使用的嚇,但是與問陡題不相稱的輸數(shù)據(jù)結(jié)構(gòu),牲結(jié)果設(shè)計(jì)出巴一個(gè)低效率籠的程序。如渴果使用簡(jiǎn)單艇的設(shè)計(jì)就能辜?jí)蜻_(dá)到性能尸目標(biāo)時(shí),選躁用復(fù)雜的數(shù)沿?fù)?jù)結(jié)構(gòu)也是消沒有道理的悄。羞人們對(duì)常用辰的數(shù)據(jù)結(jié)構(gòu)挎與算法的研孔究已經(jīng)相當(dāng)駱透徹,可以件歸納出一些構(gòu)設(shè)計(jì)原則:曉(1)每一稼種數(shù)據(jù)結(jié)構(gòu)滑與算法都有球其時(shí)間、空玻間的開銷和唇收益。當(dāng)面員臨一個(gè)新的驚設(shè)計(jì)問題時(shí)治,設(shè)計(jì)者要薄徹底地掌握郵怎樣權(quán)衡時(shí)勺空開銷和算筆法有效性的覺方法。這就誓需要懂得算稠法分析的原愈理,而且還亂需要了解所基使用的物理第介質(zhì)的特性丹(例如,數(shù)滿據(jù)存儲(chǔ)在磁示盤上與存儲(chǔ)渡在內(nèi)存中,頸就有不同的瘡考慮)。失(2)與開康銷和收益有車關(guān)的是時(shí)間錢——刺空間的權(quán)衡射。通??梢猿杂酶蟮臅r(shí)吐間開銷來換廁取空間的收刷益,反之亦宣然。時(shí)間紡——徐空間的權(quán)衡桂普遍地存在兔于軟件開發(fā)濁的各個(gè)階段瘦中。辱(3)程序摘員應(yīng)該充分披地了解一些譜常用的數(shù)據(jù)遭結(jié)構(gòu)與算法窗,避免不必孕要的重復(fù)設(shè)崗計(jì)工作。弱(4)數(shù)據(jù)譯結(jié)構(gòu)與算法米為應(yīng)用服務(wù)臺(tái)。我們必須君先了解應(yīng)用蘭的需求,再于尋找或設(shè)計(jì)申與實(shí)際應(yīng)用電相匹配的數(shù)為據(jù)結(jié)構(gòu)。[穗Shaff基er19料98]偷5降.軟4搖均用早術(shù)戶軟鳥界酬龜面矛侍設(shè)捏徹計(jì)堅(jiān)某個(gè)人總有策辦法讓自己研保持心情愉懇快、信心十喝足。有一天覽,他向一名穿圍棋九段和蹈一名乒乓球?qū)毷澜绻谲娞舨?zhàn),結(jié)果他強(qiáng)全勝了。因看為他跟圍棋僅九段打乒乓疤球,跟乒乓吊球冠軍下圍刊棋。用戶界你面的編程技刮術(shù)是人們熟險(xiǎn)悉得不得了躬的事,我決邀定講一講比蹦較陌生的界“級(jí)用戶界面設(shè)鞭計(jì)美學(xué)捷”動(dòng)。黑有位愛好書鹿畫的博士后直請(qǐng)我欣賞鋼匯琴演奏會(huì)。走我從頭到尾跌只聽到蔥“夜叮叮咚咚腰”誦的聲音,實(shí)潑在享受不到蒸“家高雅容”火,就請(qǐng)這位澇朋友指點(diǎn)。顧他雖然也不爽懂鋼琴,卻庸從欣賞書法債的角度設(shè)法感解釋如何欣購(gòu)賞音樂??上奘俏壹炔欢疂鈺ㄒ膊欢魳罚媸亲⒆⒉话?。炮“創(chuàng)美棵”歸似乎真的不券可言傳。我慣在讀本科時(shí)朗,特別喜歡獸編寫用戶界拐面程序,并錯(cuò)且常向同學(xué)燭演示、賣弄冰。我覺得還項(xiàng)不過癮,就瘦寫了一篇視“版用戶界面設(shè)浴計(jì)美學(xué)犬”善的短文[林飄銳喘1997川]婆。凡是路過傍我實(shí)驗(yàn)室的聰同學(xué)都被我溝逮住,被迫捧聽完我得意懲之極的朗讀辯,茫然者與地痛苦者居多筍。不久我的懶朗讀便所向序披糜,聞聲浴者逃之夭夭減?,F(xiàn)在我又陰把那篇短文堤摘錄至此,語請(qǐng)您忍著點(diǎn)換吧。備5蟻.挽4中.輸1簡(jiǎn)魄界面設(shè)計(jì)中偉美的需求與勵(lì)導(dǎo)向作用興人們對(duì)美的填向往和追求或是與生俱有幅的。顯然沒叮有人愿意丑悟化自己的程蠻序,也沒有籍用戶嗜好丑桂陋的界面。粘軟件開發(fā)者陰要設(shè)計(jì)美,喉用戶要享受膽美,所以界沈面的美是開晃發(fā)者與用戶宏的共同需求另。州界面美的概粉念很抽象,捷以致讓人無瓦法說清楚什速么是界面的尚美。但它同偉時(shí)又很現(xiàn)實(shí)團(tuán),以致人人縫都可以去欣枝賞和感受界親面美,并且映挑剔美中之鴨不足。美學(xué)邀不是一種量催化的學(xué)問,暈如果因此而播輕視美學(xué)指扛導(dǎo),必將導(dǎo)期致在設(shè)計(jì)過谷程中光依賴羊程序員個(gè)人貴的經(jīng)驗(yàn)與感借覺。由于程斜序員接受的等教育主要是鍋如何使計(jì)算樹機(jī)完成工作愛,而不是人繪如何工作,菌因此僅靠程級(jí)序員主觀想維象設(shè)計(jì)而成那的界面往往餡得不到大眾狐用戶的認(rèn)可肥。再美的界面能怕消除用戶由信感覺引起的樣乏味、緊張殿和疲勞(情投緒低落),不大大提高用筑戶的工作效冒率,從而進(jìn)到一步為發(fā)揮舍用戶技能和墓為用戶完成管任務(wù)作出貢忽獻(xiàn)。從人機(jī)雨界面發(fā)展歷罩史與趨勢(shì)上脫可以看出人碧們對(duì)界面美四的需求,以拘及美在界面階設(shè)計(jì)中的導(dǎo)梁向作用。豆界面設(shè)計(jì)已注經(jīng)經(jīng)歷了兩奉個(gè)界限分明芒的時(shí)代。第抓一代是以文電本為基礎(chǔ)的虹簡(jiǎn)單交互,借如常見的命煮令行,字符嚇菜單等。由甩于第一代界亞面考慮人的物因素太少,幸用戶興趣不礦高。隨著技屑術(shù)的發(fā)展,綁出現(xiàn)了第二霉代直接操縱賓的界面。它誘大量使用圖戒形、語音和漿其它交互媒山介,充分地愚考慮了人對(duì)手美的需求。切直接操縱的茶界面使用視節(jié)聽、觸摸等春技術(shù),讓人牢可以憑借生燕活常識(shí)、經(jīng)化歷和推理來落操縱軟件,孝愉快地完成討任務(wù)。更高削層次的界面憐甚至模擬了森人的生活空雹間,例如虛盯擬現(xiàn)實(shí)環(huán)境偷。種界面的美充銀分體現(xiàn)了人碗機(jī)交互作用湯中人的特性逝與意圖,越添來越多的用氣戶將通過具引有吸引力而泳令人愉快的堡人機(jī)界面與同計(jì)算機(jī)打交危道。朽5獸.扭4蔑.蓮2雜顆界面美的內(nèi)葡涵疤本節(jié)從合適猴性、風(fēng)格和趟廣義美三個(gè)消方面論述界緣面美的內(nèi)涵蔥。原一、界面的傍合適性鹽界面的合適灘性是指界面改是否與軟件侵功能相融洽妖。如果界面梢不適合于軟鐮件的功能,酒那么界面將斧毫無用處,但界面美的內(nèi)決涵就無從談驚起。所以界曉面的合適性皺是界面美的皇首要因素,竊它提醒設(shè)計(jì)謙者不要片面閘追求外觀漂內(nèi)亮而導(dǎo)致失放真或華而不監(jiān)實(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)畫搜,在后臺(tái)演簽奏雄壯的進(jìn)彼行曲,電閃意雷鳴之后出年來的卻是一踩個(gè)普通的文使本編輯器。紀(jì)整個(gè)過程讓豈用戶置身于投云里霧里,津而結(jié)果卻讓桃用戶感到驚督諤而不是驚科喜。合適性頂差的界面只枯會(huì)給軟件帶序來厄運(yùn)。忌二、界面的短風(fēng)格姑界面的風(fēng)格寄有兩類,一研是產(chǎn)“膊一致性趁”派,二是智“秧個(gè)性化屠”嚴(yán)。雙商業(yè)應(yīng)用軟餅件的界面設(shè)耗計(jì)注重一致迷性。設(shè)計(jì)者蠻必須密切注桐意在相同應(yīng)包用領(lǐng)域中最慣流行的軟件玩的界面,必聚須尊重用戶定使用這些軟杯件的習(xí)慣。們例如商業(yè)軟蒸件習(xí)慣于設(shè)響置F1鍵為旦幫助熱鍵,梅如果某個(gè)設(shè)隱計(jì)者別出心怕裁地讓F1緒鍵成為程序酬終止的熱鍵朵,那么在用玻戶渴望得到挨幫助而伸手偽擊F1鍵的聰一剎那,他藍(lán)的工作就此構(gòu)完蛋。相信賴這個(gè)用戶句“久一朝被蛇咬波,十年怕井妨繩饑”涉。竿目前流行的往軟件開發(fā)工鏈具如碑Visua瓜lC++隊(duì)、永Visua顆lBas義ic脊、托Delph迎i辰、加C++植句Build瓣er燕、勺Power輩Buil撕der陶等,都能夠塔快速地開發(fā)肅出非常相似彎的圖形用戶小界面。在冤Inter癥net/I沖ntran劉et擊領(lǐng)域,瀏覽賢器幾乎成了蕉唯一的客戶形機(jī)程序,因桐為用戶希望規(guī)用完全一致醉的軟件來完誤成千變?nèi)f化課的應(yīng)用任務(wù)鏈。朋在娛樂領(lǐng)域笑的軟件中,煩有個(gè)性化的摘界面自然比氧泯然于眾的首界面更具有告吸引力。一血般說來,計(jì)姑算機(jī)專業(yè)人桿員玩過的軟娛件不計(jì)其數(shù)劈。界面看多省了,真有種活“塘曾經(jīng)滄海難孩為水梯”噴的感覺。不肚過當(dāng)我看到載一個(gè)叫腥Soniq頸ue淺的放音樂的去軟件時(shí),不乎禁對(duì)其界面田的創(chuàng)意嘖嘖難稱贊,忍不族住象貼美女辰像那樣把它肚貼到書中,族如圖5摧.島7所示。固圖5隨.雪7狂Soniq罪ue剝軟件的幾種慶界面哄人們經(jīng)常搞嗎不清楚什么哈情況下應(yīng)該右追求?!疤右恢滦喳悺标惢蛩嚒皩賯€(gè)性化聰”武。在大白天府,當(dāng)人們都伴穿戴整齊時(shí)慨,有些人喜些歡只掛幾片鞏遮羞布。而路當(dāng)大家都赤符條條地在共壽公浴室洗澡光時(shí),卻也有車人喜歡穿著討衣服。誕三、界面的產(chǎn)廣義美草盡管界面的疤美并沒有增閘加軟件的功蓋能與性能,挪卻又是必為荒可少的。用泳戶使用界面律時(shí),除了直僚接的感官美廚感外,還有篇很大一部分勇美感是間接蹤的,它們存跨在于人們的授使用體驗(yàn)中鵲,例如方便款,實(shí)用等。部與圖形用戶釣界面相比,年命令行是最突原始的界面被,它難記又茅難看。但對(duì)哀于熟練的用歐戶而言,他職們樂于使用粱命令行以獲仆得高效率。費(fèi)命令行因具蝕有高效率而皆贏得了專業(yè)裝人士的喜愛城,早期的姐Unix修系統(tǒng)就是徹暑頭徹尾的命壤令系統(tǒng)??刹钜哉f,一切兔有利于人機(jī)源交互的界面銀設(shè)計(jì)因素都使具有廣義美殖。健界面設(shè)計(jì)的永一些特殊考死慮也體現(xiàn)了隆廣義美,如梁設(shè)法使殘障洞人也可以使驕用軟件。普IBM老公司在19叼85年已經(jīng)朗創(chuàng)建了殘障亞人國(guó)家支持樹中心。莫Apple比公司的專門牢教育辦公室覆則提供了一堤些有利于殘界障人使用的橋計(jì)算機(jī)信息房產(chǎn)品。堵5榆.鋸5系統(tǒng)設(shè)豎計(jì)示例連——巷支持協(xié)同工腦作的交互式今三維圖形軟根件開發(fā)系統(tǒng)靈本節(jié)論述艱“貸支持協(xié)同工初作的交互式消三維圖形軟蠶件開發(fā)系統(tǒng)擱”盟的系統(tǒng)設(shè)計(jì)躲,作為本章栽的示例(場(chǎng)取材于作者貢的博士論文策工作[林銳對(duì)2000賊])。鋪虛設(shè)計(jì)背景永圖形標(biāo)準(zhǔn)在氏圖形領(lǐng)域有困著重要的地融位,它不僅追加速了3D醉應(yīng)用程序的菌開發(fā),而且壤使3D應(yīng)用裝程序的可移飲植性更好。勤歷史上曾出劈現(xiàn)的圖形標(biāo)滿準(zhǔn)(或AP練I)有C惕ore纏、G言KS后、PHIG別S、PEX拖、GL、D牧ore棕、R迎ender碰Man交、脹Hoops炕、填OpenG艦L惱等等。經(jīng)過剃競(jìng)爭(zhēng)與淘汰棒,目前佳OpenG棋L膨成為國(guó)際上泰公認(rèn)的3D蕩圖形工業(yè)標(biāo)醒準(zhǔn),在拌Unix相與鹽PC鞠平臺(tái)得到廣暖泛應(yīng)用。旅OpenG覆L晨提供了數(shù)百辟個(gè)庫(kù)函數(shù),龜可以方便地誦繪制具有真親實(shí)感的3墳D過圖形。但是閘在開發(fā)交互圍式的3淺D禾圖形應(yīng)用程秩序時(shí),圖形輔的繪制只是趟一部分工作善,更多的工泳作集中在場(chǎng)住景數(shù)據(jù)結(jié)構(gòu)燃、圖形對(duì)象雪、三維交互磁和圖形用戶編界面的設(shè)計(jì)娛上。黑由于O睡penGL潑與窗口系統(tǒng)尖無關(guān),不提須供任何交互擔(dān)手段,必須高由程序員自房己編寫所有洞的交互功能妥。并且O潮penGL奔的編程接梢口是低級(jí)的啞C函數(shù),不蓋提供可復(fù)用駱的對(duì)象庫(kù)或楊者應(yīng)用程序匙框架,開發(fā)系效率不高。雨為了克服這梁些困難,人城們往往在圖爬形標(biāo)準(zhǔn)之上率再建立更高障級(jí)的開發(fā)工麻具墊(3DT往oolki絞t訂或么3DEn頓gine)蠶。基于O皺penGL擠的著名的開混發(fā)工具有O能pen劫俱Inven巡tor辭、IRIS帶P份erfor翁mer銅、O我ptime蜘izer/鬧Cosmo矮3D誘以及GLU筒T等等。O冠pen桶件Inven約tor吹被譽(yù)為是交借互式3D開失發(fā)工具的刮“掃事實(shí)標(biāo)準(zhǔn)美”瘋,但顯然沒碗有一個(gè)3D梢開發(fā)工具能煎滿足所有的域應(yīng)用需求,曬3D的廣泛倘應(yīng)用需要更歇多的開發(fā)工躬具支持。駐蕩隨著計(jì)算機(jī)插圖形技術(shù)與洲網(wǎng)絡(luò)技術(shù)的獎(jiǎng)迅猛發(fā)展,淹兩者的結(jié)合謎勢(shì)在必行。賞在商業(yè)、科迷研、教育、央娛樂等領(lǐng)域剪,用于分布料式虛擬環(huán)境橋(箱Distr痛ibute續(xù)dVir愧tual兩Envir廈onmen映ts,D供VEs餓)和計(jì)算機(jī)焰支持協(xié)同工碑作(譯Compu豈terS配uppor服tedC乎ooper梨ative稅Work叉,CSC瓣W壤)的圖形系很統(tǒng)已成為研瘡究與應(yīng)用的更熱點(diǎn)。著名壺的昨DVEs朵系統(tǒng)有名DIVE滲、壯dVS準(zhǔn)、盆MR招、綠Repo-蒼3D芒等。但是這淋些曲DVEs聞系統(tǒng)缺乏3渠D開發(fā)工具拿的交互式圖抖形功能以及漂通用性,而薄通用的3D萬開發(fā)工具如皮O鞭pen蔑膀Inven宮tor常則又不支持停分布式計(jì)算串和協(xié)同工作餐。由于在窗斬口系統(tǒng)、圖安形支撐庫(kù)、暴編程語言等很方面存在差擦異,上述隱DVEs灑系統(tǒng)和3D市開發(fā)工具難殊以方便地結(jié)捏合使用。貪我們多方面聾分析了3D依需求及軟硬憲件條件,研黑制完成運(yùn)行唐于歷PC租平臺(tái),支持疼協(xié)同工作的望交互式三維燭圖形軟件開駛發(fā)系統(tǒng),如唯圖鴿5.8腦所示。其中劫:好(1)征Intra樂3D2.騎0漿是基于屢OpenG皺L尾的通用交互池式三維圖形臉軟件開發(fā)工狀具,可用于斬快速開發(fā)波Windo突w9x/蘿NT顯下的交互式率三維圖形應(yīng)殲用軟件。賞(2)寧CNC軟曠1.0懶是支持協(xié)同挖工作的網(wǎng)絡(luò)閑通訊開發(fā)系筒統(tǒng)(腰Coope維rativ訴eNet喊work凍Commu咐nicat計(jì)or宜),其核心擦是支持冷“市發(fā)布倚—薪訂閱模式抵”仗與遼“河組播模式送”幻的服務(wù)器與裙API蟲??褰Y(jié)合拋Intra暈3D2.岸0英和銀CNC1拍.0搞,可以快速蘇開發(fā)支持協(xié)棗同工作的交陜互式三維圖冠形應(yīng)用軟件希。邀支持協(xié)同工作的網(wǎng)絡(luò)通訊開發(fā)系統(tǒng)CNC1.0通用交互式三維圖形軟件開發(fā)工具Intra3D支持協(xié)同工作的網(wǎng)絡(luò)通訊開發(fā)系統(tǒng)CNC1.0通用交互式三維圖形軟件開發(fā)工具Intra3D2.0觀按昂賤壺矮筆圖驕5.8蘋支持協(xié)同綱工作的交互筍式三維圖形跑軟件開發(fā)系僻統(tǒng)鼓5.5.盈2肯通用交互式攀三維圖形軟炮件開發(fā)工具戴綿Intra價(jià)3D2.穿0救Intra結(jié)3D2.烈0倘的核心是集彼成了場(chǎng)景數(shù)墊據(jù)結(jié)構(gòu)、圖勒形對(duì)象、三借維交互算法曬和圖形用戶創(chuàng)界面的傘C++懸類庫(kù)與初COM源(比Compo毯nent混Objec際tMod俱el雞)對(duì)象庫(kù),首支持耍Visua幣lC++染、龜Visua除lBas憑ic懇、傷Delph端i耐等語言的應(yīng)統(tǒng)用編程。氣Intra如3D污的核心庫(kù)分競(jìng)四層創(chuàng)建:棟(1)第一診層為式“山基礎(chǔ)對(duì)象與奔函數(shù)乞”踏(B疼asic南Objec榆tsan促dFun最ction挖s欣);啟(2)第二飾層為直“譽(yù)圖形對(duì)象汽”造(反Graph稅ical公Objec憑ts抖);賠(3)第三腔層為蒙“嶼場(chǎng)景圖與節(jié)超點(diǎn)哈”譜(涉Scene危Grap膊hand糕Node冠s析);本(4)第四鴉層為延“改繪制與交互鳳”仿(詠Rende泛ring翠andI飾ntera果ction錫)。首體系結(jié)構(gòu)如級(jí)圖5單.9皮所示,其中啞高層構(gòu)件可泥以引用低層聰構(gòu)件,但低墾層構(gòu)件不能鍋引用高層構(gòu)苗件。4、繪制與交互層Intra3DCOM4、繪制與交互層Intra3DCOM庫(kù)Intra3DC++類庫(kù)3、場(chǎng)景的圖與節(jié)點(diǎn)層3、場(chǎng)景的圖與節(jié)點(diǎn)層2、圖形對(duì)象層2、圖形對(duì)象層1、基礎(chǔ)對(duì)象與函數(shù)層1、基礎(chǔ)對(duì)象與函數(shù)層Window9x/NT+OpenGL+VisualC++Window9x/NT+OpenGL+VisualC++席圖5擊.9萄渡Intra不3D2.悟0撇的體系結(jié)構(gòu)屬Intra富3D2.墓0急是免費(fèi)軟件念,有配套書日籍《交互式時(shí)三維圖形技蘆術(shù)與程序設(shè)薪計(jì)》。標(biāo)準(zhǔn)筍版軟件約2廁5兆,核心扮庫(kù)7萬多行勒C++疑代碼全部公里開,用戶可費(fèi)以方便地修呢改內(nèi)核以適雞應(yīng)不同的需煉求。淡5.5.娘2易.1活主要模塊和飽功能眠一、基礎(chǔ)對(duì)錄象與函數(shù)層繭(1)定義蔑了用于對(duì)象康引用計(jì)數(shù)的拴內(nèi)存管理基尚類;攝(2)矢量擱、矩陣與四宗元組運(yùn)算,犯鼠標(biāo)跟蹤球冤算法;正(3)點(diǎn)陣猛字體與三維墓矢量字體輸跳出,常用于失數(shù)據(jù)可視化瘋圖形的數(shù)據(jù)討標(biāo)注;顫(4)圖像殺輸入輸出以早及紋理映射類,支持BM香P、GIF箱、JPEG旬、SGI、師TGA等圖蒜像格式;圍(5)常用恐幾何圖元的閱繪制,如錐機(jī)、柱、球、秘環(huán)等,并支逢持肌S立wept形屑體,螺旋體隔的繪制;傭(6)饞提供450壓余種材質(zhì),際在第四層中自可以交互式姐編輯這些材咬質(zhì)。淚二、圖形對(duì)濁象層蒙圖形對(duì)象能脊將數(shù)據(jù)轉(zhuǎn)化串為幾何模型罷并可以繪制集出來。宋I帽ntra活3D2.潮0版提供了寄三類圖形對(duì)喪象:牲(拋1蚊)常用幾何玩對(duì)象,如長(zhǎng)孤方體、錐體番、圓柱體、棟球體、圓環(huán)梁體、辱Swept歌形體等;蛾(時(shí)2闊)多邊形模商型對(duì)象,可攀用于繪制杠Autod夸esk片公司慨.3ds萍模型和病Wavef男ront秧公司的即.obj括模型兔;距(3)堵商業(yè)統(tǒng)計(jì)圖解形對(duì)象,如撥柱形圖、帶笛狀圖、條形巾圖、折線圖罪、面積圖、勺餅圖、塔形答圖、曲線圖罪、曲面圖、靈進(jìn)程圖、股成票圖等。弊圖形對(duì)象的諒開發(fā)與應(yīng)用紗問題密切相增關(guān),用戶可蔑以使用繼承驢方法擴(kuò)充新害的圖形對(duì)象貿(mào),而不會(huì)影啦響到其它三咽層的構(gòu)件。消三、場(chǎng)景圖嬌與節(jié)點(diǎn)序場(chǎng)景圖(S氣cene比Graph時(shí))是有向無心環(huán)圖,嗓Scene暖Grap沾h邪的主要節(jié)點(diǎn)梢有:(1)她S高ceneN叨ode睬是所有節(jié)點(diǎn)毒的基類。在經(jīng)S嫁ceneN漆ode順中定義了局視部坐標(biāo)系以渾及相應(yīng)的圖種形變換,這騎樣便于第四仁層以同樣的爐操作方式實(shí)四現(xiàn)三維交互很。(2)相展機(jī)節(jié)點(diǎn)(C呆amera黃Node芹)支持平行淹投影與透視折投影,支持戒多個(gè)相機(jī)切遮換。(3)罪光源節(jié)點(diǎn)有艇三種:平行域光源節(jié)點(diǎn)捏(DirL躬ightN林ode)典、點(diǎn)光源節(jié)藏點(diǎn)蹤(Poin具tLigh燦tNode桂)珍和錐光源節(jié)獨(dú)點(diǎn)罵(Spot沫Light假Node)弓。(4)形泛體節(jié)點(diǎn)(S凳hapeN址ode釀)用于引用填圖形對(duì)象,蜘有關(guān)圖形對(duì)脂象的三維交鬼互均由S進(jìn)hapeN款ode掃處理。本四、繪制與庸交互層妨Intra悠3D的交互牽分兩類:一妙類是對(duì)形體化、光源和相放機(jī)的直接操伙作,另一類箭是真實(shí)感屬夠性的編輯。卸Intra積3D墳的場(chǎng)景視圖致構(gòu)件(羞Scene背View屆)封裝了交宿互式繪制的蝶所有細(xì)節(jié),格如消息處理益、場(chǎng)景節(jié)點(diǎn)促的遍歷繪制毀、多重采樣謊消鋸齒、鼠唇標(biāo)交互等。察為了便于編監(jiān)輯真實(shí)感屬收性,諷Intra挺3D劫定制了一些斬常用對(duì)話:喂矢量字體對(duì)擾話(銜FontD乞ialog華)、顏色對(duì)匹話(航Color景Dialo慌g陡)、材質(zhì)庫(kù)澆對(duì)話(突Mater惡ialLi老bDial允og擋)、材質(zhì)對(duì)脹話(攪Mater戀ialDi場(chǎng)alog蔑)與光源對(duì)舒話(選DirLi異ghtDi武alog,錯(cuò)Poin段tLigh裹tDial慨og,S醫(yī)potLi犁ghtDi重alog龜)。濾5.5.盞2鄉(xiāng).2應(yīng)用戶界面設(shè)顯計(jì)申Intra饑3D慣的場(chǎng)景視圖標(biāo)構(gòu)件催Scene材View搏用于快速創(chuàng)兔建交互式3珠D知應(yīng)用程序的木主界面。S莫ceneV水iew掃支持s高elect賀ing踐、友scali咽ng貸、幕rotat宇ing覆、耳trans幟latin營(yíng)g錢、睬creat寒ing別、塞delet瓦ing浸等三十余種裝操作,并提灑供工具條方動(dòng)便于交互,謙如圖守5.10獲所示。講獅為了編輯真船實(shí)感屬性,廟常需在對(duì)話醒框中繪制3岡D孝圖形。炭Micro性soft慣的窗口系統(tǒng)樹不提供假3D弊的對(duì)話窗口爆。使用睛Intra陷3D借的砍Windo末w3D柜構(gòu)件可在對(duì)施話框中創(chuàng)建草多個(gè)3排D痕視圖,圖目5.11絹的材質(zhì)對(duì)話脊和圖5及.12徹的材質(zhì)庫(kù)對(duì)買話都使用了果Windo浙w3D插構(gòu)件。顏色眉編輯是孟3D陽圖形程序中訓(xùn)最常用的交腹互,材質(zhì)與偵光源的編輯疊實(shí)際上是通銷過改變顏色側(cè)分量來實(shí)現(xiàn)叉的。需要進(jìn)革行顏色編輯控的交互均涉渾及千HSV北與暫RGB沾模式的顏色咳轉(zhuǎn)換。溝Intra狐3D眉的患“單繪制與交互躍層道”泛實(shí)現(xiàn)了這些頃計(jì)算,并且翠提供彩色的藝滑動(dòng)條用于墓鼠標(biāo)交互??棃D媽5.13吊、圖何5.14膜分別為點(diǎn)光左源對(duì)話和顏窄色對(duì)話。這圖膏5.10粘用于直辜接操作的三伍維交互工具籃條辜裂恩講月圖膠5.11參拉材質(zhì)對(duì)話?cǎi)剭u璃裙豎攝匪圖5越.12醉相材質(zhì)庫(kù)對(duì)話苦持敬貞皂唇賀斥圖濁5.13析點(diǎn)光源洪對(duì)話抱嬌嶺冒雜久推圖睜5.14哨顏色輝對(duì)話刊許情支持協(xié)同工狼作的網(wǎng)絡(luò)通屢訊開發(fā)系統(tǒng)鞠CNC盆1.0涉舟最簡(jiǎn)單的協(xié)鈴?fù)ぷ髂J蕉妒亲寖蓚€(gè)客壞戶機(jī)直接通藏訊,可以用降Socke嫩t壞編程實(shí)現(xiàn)。神假設(shè)有崇n酬個(gè)客戶機(jī)參撤加協(xié)同工作鋼,每個(gè)客戶陪機(jī)將與所有醋其它的客戶服機(jī)通訊。那羊么總共存在教n(n-1弱)/2濕個(gè)光Socke慣t昏直接通訊,艷并且每個(gè)客矩戶機(jī)的變動(dòng)德將導(dǎo)致其它偶客戶機(jī)的修討改。這種雜Socke屢t戲直接通訊使期得協(xié)同工作釋的管理和客游戶機(jī)的程序籮設(shè)計(jì)變得非瞧常困難。售CNC絡(luò)系統(tǒng)提供了唐支持泥“爪發(fā)布嗎—騾訂閱(傾Publi推sh-Su棵bscri仁be鄙)村”溪與漂“征組播(庭Multi慕cast鉤)乎”較模式的服嫩務(wù)器與攪API航,可以高效溉地管理多個(gè)霞組群的協(xié)同鳴工作,并使矩得客戶機(jī)的取程序設(shè)計(jì)十退分簡(jiǎn)單。減CNC1首.0誘的系統(tǒng)結(jié)構(gòu)燈如圖憂5.15考所示。渣CNC匹服務(wù)器將客基戶機(jī)分組管湊理。在弄“旺發(fā)布咬—液訂閱浮”澤模式中,將疤產(chǎn)生數(shù)據(jù)的然進(jìn)程稱為生害產(chǎn)者(們Produ膽cer膊),將接受斷數(shù)據(jù)的進(jìn)程牲稱為消費(fèi)者格(棒Consu賣mer庫(kù))。生產(chǎn)者磨可以向服務(wù)窮器發(fā)布數(shù)據(jù)伙,服務(wù)器??看孢@些數(shù)據(jù)即。消費(fèi)者可看以向服務(wù)器璃訂閱數(shù)據(jù)。歇每個(gè)客戶機(jī)斬可能是很多崗數(shù)據(jù)的生產(chǎn)少者或消費(fèi)者苗。同一時(shí)刻征,影CNC族系統(tǒng)允許有扶任意多個(gè)生與產(chǎn)者和消費(fèi)農(nóng)者存在。蒼CNC刑的災(zāi)“軋發(fā)布先—共訂閱猜”他功能是用冰TCP淋協(xié)議實(shí)現(xiàn)的他。偽拋在歉“湊組播進(jìn)”屑模式中,溝服務(wù)器動(dòng)態(tài)揮地分配每個(gè)銳組的組播地點(diǎn)址。客戶機(jī)急可以向服務(wù)錢器申請(qǐng)加入拼任意組,允散許向任意組之播放消息,句服務(wù)器不保蒙存這些組播篇消息。堤CNC賞的控“濕組播抓”阿功能是用聚UDP都協(xié)議實(shí)現(xiàn)的遙。CNC客戶機(jī)CNCCNC客戶機(jī)CNC服務(wù)器CNCAPI基于基于TCP協(xié)議的發(fā)布—訂閱模式基于基于UDP協(xié)議的組播模式鞋圖啊5.15組CNC宿1.0慧的系統(tǒng)結(jié)口構(gòu)御5.5.印3閣.1忙懇CNC麥客戶機(jī)的荒API墊設(shè)計(jì)嚷垂類閉CNCCl釣ient抓客戶機(jī)用來襖實(shí)現(xiàn)惡“錯(cuò)發(fā)布位—菠訂閱婆”見和懂“唐組播現(xiàn)”悅功能,主要槐接口(公有腰函數(shù))如下診:已登class堵CNCC諒lient栽{吊私publi灑c:恭候BOOL厲Conne奮ct(棋…燥);爹銅撒攔//精殲連接服務(wù)器勢(shì)御卸BOOL窩Disco更nnect濫();垂盤合隊(duì)//陽慰與服務(wù)器斷那開連接牧稀BOOL喊Publi瓶shDat丙a(兆…單);蘋歇挪//畢降向服務(wù)器發(fā)叛布數(shù)據(jù)浙唯BOOL映Query視Data(深…記);王春嬌//題合向服務(wù)器查攏詢數(shù)據(jù)宮鈔BOOL汪詢Subsc很ribeD拼ata(廢…付);調(diào)落//洗羅向服務(wù)器訂踢閱數(shù)據(jù)奮治GROUP姻IPQu瑞eryGr菜oupIP肺(?!?;膽繭//誼門向服務(wù)器查嫁詢組播地址雷潛DWORD遭Mult遇icast艱Messa櫻ge(讓…石);彼懲//發(fā)送跑組播消息持山virtu逆al亡void皆Messa錦ge慈Respo想nse敗(刻…架);//炊響應(yīng)組播消脅息…};佛一、客戶程徹序的津“穩(wěn)發(fā)布嘉”補(bǔ)協(xié)議裁鐮客戶機(jī)向服頭務(wù)器發(fā)布的幻每個(gè)數(shù)據(jù)報(bào)喘均含有數(shù)據(jù)介類型、工作贏組名稱、數(shù)漸據(jù)名稱、生認(rèn)命期和數(shù)據(jù)林長(zhǎng)度的信息紐。報(bào)文格式組如圖扒5.壺16所示,憂數(shù)據(jù)結(jié)構(gòu)見拘Data知Publi磨sh狠:慧弱struc震tDat闊aPubl井ish{返目開BYTE微枯iData海Type;灑腿木//2導(dǎo)個(gè)字節(jié)葛數(shù)據(jù)類型,寨宏定義為筐DATA_龜PUBLI苗SH款遮鋤char村脊篇strGr恢oupNa妥me[16沸];誘株//細(xì)16個(gè)字節(jié)詞的工作組名舒字血紗母char浩芒款strDa習(xí)taNam鞭e[16]錄;努壘//春16個(gè)字節(jié)呆的數(shù)據(jù)名字活地稈DWORD劑船dwLif橫eTime領(lǐng);扎片誓//4栗個(gè)字節(jié)的數(shù)柜據(jù)生命期,找以秒為單位曉桂慈DWORD抓泛dwLen芒gth;他脅襖際//4編個(gè)字節(jié)的數(shù)減據(jù)內(nèi)容的長(zhǎng)玉度悉侄歡char訂噸還*pchC殃onten董t;傘認(rèn)男//失數(shù)據(jù)內(nèi)容};象訓(xùn)2字節(jié)脾暮16字沙節(jié)魄傻16妄字節(jié)守氣姿筒4字節(jié)壽植4字論節(jié)datatypegroupnamedatanamelifetimelengthcontentdatatypegroupnamedatanamelifetimelengthcontent菌圖幼5.舞16用牛于發(fā)布的報(bào)赤文格式險(xiǎn)二、客戶程廉序的蟻“歉訂閱撓”其協(xié)議泛客戶機(jī)向服簡(jiǎn)務(wù)器訂閱數(shù)粱據(jù)分兩步實(shí)倒現(xiàn):延(1)先調(diào)崇用函數(shù)鄭Query略Data劉向服務(wù)器發(fā)塔送一個(gè)驢DataQ簽uery賄格式的報(bào)文賢,用于查詢壺要畏訂閱的炮數(shù)據(jù)是否存千在。旋誼struc妻tDat此aQuer稼y{鴨初BYTE沙該糊iData需Type;脫強(qiáng)驚夜//2捷個(gè)字節(jié)兄?jǐn)?shù)據(jù)類型,過宏定義為戒DATA_開QUERY散猜魄char壁漏strGr優(yōu)oupNa悉me[16茂];托謀呀//持16個(gè)字節(jié)屠的工作組名需字哨閉char晴挑strDa遣taNam且e[16]概;血增巡//寄16個(gè)字節(jié)亮的數(shù)據(jù)名字};繪(2)服務(wù)決器接收到查咐詢時(shí),按照直旨DataQ呢uery肉結(jié)構(gòu)中的示strGr羞oupNa紋me幣和音strDa練taNam考e嘗進(jìn)行搜索。續(xù)如果該數(shù)據(jù)殺不存在,扶Serve世r開向鴉Clien爽t嚇發(fā)送一個(gè)燕FALSE咳標(biāo)志。如果蘿該數(shù)據(jù)存在筍,服務(wù)器先蔑向饑客戶機(jī)虛發(fā)送一個(gè)級(jí)TRUE殲標(biāo)志,之后出立即再向它客戶機(jī)錄發(fā)送該數(shù)據(jù)隆(跑DataP備ublis休h緒格式)。移如果用客戶機(jī)即得到嫌TRUE較標(biāo)志的查詢負(fù)結(jié)果,就誦調(diào)用函數(shù)切Subsc它ribeD丹ata驢來接收服務(wù)濃器值發(fā)送過來的釋數(shù)據(jù)。汽三、客戶程牛序的塊“播組播菌”荷協(xié)議潤(rùn)糾客戶機(jī)煤先灑調(diào)用函數(shù)爐Query閱Group成IP德向服務(wù)器發(fā)乘送一個(gè)豈Group亮Addre我ss綠格式的報(bào)文水,用于查詢心組播地址。觸服務(wù)器返回陣相應(yīng)的十進(jìn)翅制點(diǎn)分式的娛IP尾地址??渌鉺truc每tGro捆upAdd持ress{世警BYTE詢臥太iData因Type;伯廉頂議//2卻個(gè)字節(jié)談數(shù)據(jù)類型,捎宏定義為軟GROUP屋_ADDR廣ESS絮斧讓char欠延strGr壯oupNa節(jié)me[16踩];枝社拴//浪16個(gè)字節(jié)良的工作組名鄰字};的客戶機(jī)調(diào)用倆函數(shù)路Multi節(jié)castM沉essag幣e牢向指定的格組(根據(jù)組論播地址)播探放消息。組食播的數(shù)據(jù)報(bào)罪結(jié)構(gòu)予Data案Multi房cast臉定義如下:核struc圾tDat界aMult講icast{壯DWORD勉夜dwCon療tentT逐ype;絹割//響組播的數(shù)據(jù)暈報(bào)療類型,由用眾戶定義嶺char略占斧*pchC骨onten恨t;應(yīng)凱餡//洞組播的數(shù)據(jù)兇報(bào)漏內(nèi)容,由用士戶定義};專如果軟客戶機(jī)片接收到組播對(duì)的消息,將軋自動(dòng)調(diào)用函喇?dāng)?shù)Mess泊age聚Respo觀nse坊來響應(yīng)該消決息。Mes筋sage揮Respo繡nse晶是虛函數(shù),壁它將根據(jù)捏dwCon懂tentT遺ype信息捐決定如何處目理到來的佛組播消息,口具體功能由券用戶定義。鹽5.5.斥3纖.脊2漂嘉么CNC堪服務(wù)器的設(shè)奔計(jì)甲一、數(shù)據(jù)結(jié)辰構(gòu)覺斃CNC懸服務(wù)器的數(shù)怨據(jù)結(jié)構(gòu)主要治由三部分組湖成:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論