版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2.4面向?qū)ο蟮某绦蜷_發(fā)方法2.4.1面向?qū)ο蟮幕靖拍钏季S方式?jīng)Q定解決問題的方式,傳統(tǒng)軟件開發(fā)采用自頂向下的思想指導(dǎo)程序設(shè)計,即將目標(biāo)劃分為若干子目標(biāo),子目標(biāo)再進(jìn)一步劃分下去,直到目標(biāo)能被編程實現(xiàn)為止。面向?qū)ο蠹夹g(shù)給軟件設(shè)計領(lǐng)域帶來極大的變化,它利用軟件對象來進(jìn)行程序開發(fā),所謂對象是包含數(shù)據(jù)和對數(shù)據(jù)操作的代碼實體,或者說是在傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)中加入一些被稱為成員函數(shù)的過程,因而賦予對象以動作。而在程序設(shè)計中,對象具有與現(xiàn)實世界的某種對應(yīng)關(guān)系,我們正是利用這種關(guān)系對問題進(jìn)行分解。從程序語言角度來看,在一個對象中代碼和(或)數(shù)據(jù)可以是這個對象私有的,不能被對象外的部分直接訪問。因而對象提供了一種高級保護(hù)以防止程序被無關(guān)部分錯誤修改或錯誤地使用了對象的私有部分。當(dāng)從對象外部試圖直接對受保護(hù)的內(nèi)部數(shù)據(jù)進(jìn)行修改時,將被程序拒絕,只有通過對象所提供的對外服務(wù)函數(shù)材能夠?qū)ζ鋬?nèi)部數(shù)據(jù)進(jìn)行必要的加工,從而保證了數(shù)據(jù)加工的合法性。從這一意義上講,把這種代碼和數(shù)據(jù)的聯(lián)系稱為〃封裝〃。換句話說,封裝是將對象封閉保護(hù)起來,是將內(nèi)部細(xì)節(jié)隱蔽起來的能力。在強(qiáng)調(diào)軟件組件的重用方面,面向?qū)ο蟮募夹g(shù)與標(biāo)準(zhǔn)的工業(yè)設(shè)計規(guī)律有更多相似之處。在面向?qū)ο笳Z言中,類是創(chuàng)建對象的關(guān)鍵,事實上類描述了一族對象的公共特征和操作,而對象則是具體實現(xiàn)的類。例如小汽車是一個基本概念,它具有顏色、幾何尺寸、動力特性的特征。那我們可以定義一個稱為"car"的類,具有顏色、幾何尺寸、動力特征等參數(shù),以及描述汽車在外界條件下運(yùn)動狀態(tài)的成員函數(shù)。一輛具體的小汽車則是一個對象,在這個對象中有關(guān)參數(shù)均有具體數(shù)值,并可以通過輸入說明變量(外界條件參數(shù))獲取該車具體運(yùn)動狀態(tài)。C++和Smalltalk是廣泛被接受的面向?qū)ο蟮某绦蛟O(shè)計語言,在歐洲Eiffel擁有一批追隨者,而Ada9X通過附加多態(tài)性和繼承性,將把Ada語言全面引入面向?qū)ο蟮氖澜?。面向?qū)ο蠹夹g(shù)給軟件發(fā)展帶來如下益處:*可重用性。從一開始對象的產(chǎn)生就是為了重復(fù)利用,完成的對象將在今后的程序開發(fā)中被部分或全部地重復(fù)利用。*可靠性。由于面向?qū)ο蟮膽?yīng)用程序包含了通過測試的標(biāo)準(zhǔn)部分,因此更加可靠。由于大量代碼來源于成熟可靠的類庫,因而新開發(fā)程序的新增代碼明顯減少,這是程序可靠性提高的一個重要原因。*連續(xù)性。具有面向?qū)ο筇攸c(diǎn)的C++與C語言有很大的兼容性,C程序員可以比較容易地過渡到C++語言開發(fā)工作。面向?qū)ο笳Z言具有如下基本特征:*訪問控制。對象必須能夠?qū)ζ鋬?nèi)部的某些元素進(jìn)行保護(hù),是它們只能被內(nèi)部使用,而不受外部干擾。反過來,對象又必須同其它外部元素進(jìn)行聯(lián)系,以便對對象進(jìn)行操作。在C++中,類有私有的(private)、保護(hù)的(protected)和公有的(public)三種訪問機(jī)制。*繼承性。通過對已有對象進(jìn)行增加或部分修改的方法建立新的對象,對已有對象可以增加數(shù)據(jù)和過程,也可以對其中某些過程進(jìn)行從新定義。最初的類被稱為基類,從基類擴(kuò)展出來的類稱為派生類。從已有類派生出新類是為了獲得更強(qiáng)的針對性。*多態(tài)性。正象生態(tài)系統(tǒng)一樣,繼承構(gòu)成了類族。通常這些類族中的類具有同名的成員函數(shù),例如OD分布類族,具有一個通用基類,兩個派生類:增長系數(shù)OD分布類和重力模型OD分布類,這幾個類都有同名的Exec成員函數(shù)。多態(tài)性意味著存在多種形式,能使人們在程序中激活任何屬于OD分布類族的類的Exec成員函數(shù),甚至在編譯可以不必具體知道對象是屬于增長系數(shù)OD類還是重力模型OD分布類。面向?qū)ο篌w系結(jié)構(gòu)技術(shù)有助于創(chuàng)建行業(yè)性軟件開發(fā)機(jī)構(gòu)。例如交通規(guī)劃盡管具有差別,但各城市所需要的軟件基本上是相同的,這就為軟件開發(fā)機(jī)構(gòu)提供了一種制作面向交通規(guī)劃的軟件框架(注意這里講的是軟件框架而不是通用性軟件)的機(jī)會。這種框架一旦開發(fā)成功,就可以多次反復(fù)利用。面向?qū)ο蠹夹g(shù)特別適合于將某一領(lǐng)域內(nèi)的軟件資源整理成體系化,因為它有很好的表現(xiàn)能力,能夠容易抓住特定功能領(lǐng)域的本質(zhì)。2.4.2面向?qū)ο蟮某绦蛟O(shè)計為有效使用面向?qū)ο蟮某绦蚍椒ǎ紫刃枰鉀Q程序的結(jié)構(gòu)設(shè)計問題。在程序設(shè)計過程中最重要的抽象,也就是說,從現(xiàn)實世界中抽象出合理的對象結(jié)構(gòu)。在面向?qū)ο笏枷胫校橄鬀Q定了對象的對外形象、內(nèi)部結(jié)構(gòu)以及處理對象的外部接口,其關(guān)鍵是處理對象的可見外部特征。封裝是與抽象緊密聯(lián)系的概念,它需要兩個基本前提:首先,對象必須能夠表現(xiàn)一個完備的概念,例如可以將一條道路的縱斷面設(shè)計作為一個對象,它與外部的聯(lián)系限于縱斷面地面線、縱斷面設(shè)計參數(shù)。當(dāng)這些外部條件給定之后,對象可以獨(dú)立計算任意樁號的設(shè)計高程、地面高程、設(shè)計高差、填挖面積等,也可以根據(jù)給定的比例和初始坐標(biāo)計算設(shè)計線和地面線的圖形坐標(biāo)。第二,對象的私有性,例如上述示例中,對象的內(nèi)部數(shù)據(jù)結(jié)構(gòu)在外部是不可見的,其他程序員并不需要了解這種數(shù)據(jù)結(jié)構(gòu)就可以使用對象的功能。對于對象的接口設(shè)計是十分重要的,它必須給出必要的訪問渠道,同時必須盡可能地將內(nèi)部細(xì)節(jié)隱藏起來。我們可以將接口看作是在屏蔽墻上打開的一些出入通道,通道過多了就失去了屏蔽墻存在的意義,通道過少又由于限制過強(qiáng)而行動不便。一般情況下,這種通道表現(xiàn)為一組接口函數(shù),事實上我們也可以將一些變量作為對外開放的,但這并不是一種很好的方法。面向?qū)ο笤O(shè)計方法的另一個重要貢獻(xiàn),是關(guān)于繼承與多態(tài)性的處理。所謂繼承是指從現(xiàn)存對象出發(fā)建立一個新的對象類型,使它具有原對象的特點(diǎn)和功能,這稱為〃派生"。同時,新的對象類型又具有某種新特點(diǎn)和新功能。這樣,我們可以采用對象派生的方法建立一個有層次的對外部世界的描述。例如,在第三章中我們可以看到一組有關(guān)三維曲面分塊的類族,從四條三維空間直線定義的簡單曲面,到四條復(fù)雜三維空間曲線定義的曲面,呈現(xiàn)復(fù)雜的分層次的多態(tài)性。但他們都有共同的接口函數(shù)形式:例如根據(jù)給定平面點(diǎn)計算高程等。2.4.3采用面向?qū)ο蠓椒ㄟM(jìn)行程序開發(fā)的示例為了進(jìn)一步幫助讀者了解面向?qū)ο蟮某绦蜷_發(fā)方法,我們在此介紹一個應(yīng)用示例,我們的目的是幫助理解這種方法,而不是具體教會讀者立刻能夠編程,因此這里使用的是不那么嚴(yán)密但易于理解的表述。為支持交通規(guī)劃決策支持系統(tǒng)、道路項目可行性研究決策支持系統(tǒng)開發(fā),建立了一個基礎(chǔ)類庫,庫中包含了大量的專用工具。這個類庫中有一個用于管理道路或交通網(wǎng)絡(luò)數(shù)據(jù)的類族,它為交通分配、數(shù)據(jù)檢查、圖形輸出等多個子系統(tǒng)提供支持。作為整個類族的基礎(chǔ),建立了一個拓?fù)渚W(wǎng)絡(luò),它只描述節(jié)點(diǎn)之間的連接特性,各邊均沒有長度、等級等方面的特性。對于這個拓?fù)渚W(wǎng),建立了整個類族的基礎(chǔ)-基類NetworkManager,其具體定義如下所示:【清單2—5】NetworkManager的說明classNetworkManager{本類管理拓?fù)涮卣鞯木W(wǎng)絡(luò),在本網(wǎng)絡(luò)中各邊沒有長度、等級一類的參數(shù)。這構(gòu)成了所有網(wǎng)絡(luò)類的基類。protected:...public:構(gòu)造函數(shù)及析構(gòu)函數(shù)...
存序號intGetSetFlag(void);intNWAlloc(void);voidSetNetworkType(voidSetMaxLink(intvoidSetMaxNode(intinttype););intn2););intSetNetwork(intn1,intSetEnd(void);voidReverse(void);GetNumLink(void);GetNumNode(void);GetLinkStat(intn1,intn2);GetLink(intn1,intn2,intintintintintintint存序號intGetSetFlag(void);intNWAlloc(void);voidSetNetworkType(voidSetMaxLink(intvoidSetMaxNode(intinttype););intn2););intSetNetwork(intn1,intSetEnd(void);voidReverse(void);GetNumLink(void);GetNumNode(void);GetLinkStat(intn1,intn2);GetLink(intn1,intn2,intintintintintintintintintno);獲取設(shè)置狀態(tài)標(biāo)志進(jìn)行系統(tǒng)內(nèi)存分配設(shè)置網(wǎng)絡(luò)類型設(shè)置最大邊數(shù)設(shè)置節(jié)點(diǎn)的最大編號X在網(wǎng)絡(luò)中增設(shè)一條邊網(wǎng)絡(luò)數(shù)據(jù)設(shè)置完成后的處理將網(wǎng)絡(luò)中的所有有向邊反向獲取網(wǎng)絡(luò)中的邊數(shù)獲取網(wǎng)絡(luò)中的節(jié)點(diǎn)數(shù)獲取兩指定節(jié)點(diǎn)間有幾條連接邊獲取指定節(jié)點(diǎn)間第no條邊的內(nèi)存序GetNode1(intl);GetNode2(intl);GetNumOutLink(intn);GetOutLink(intn,intno);獲取內(nèi)存序號為l的邊的起點(diǎn)編號獲取內(nèi)存序號為l的邊的終點(diǎn)編號獲取以節(jié)點(diǎn)n為起點(diǎn)的邊的數(shù)量獲取以節(jié)點(diǎn)n為起點(diǎn)的第no條邊的內(nèi)intintGetNumInLink(intn);GetInLink(intn,intno);獲取以節(jié)點(diǎn)n為終點(diǎn)的第no條邊的內(nèi)存序號};一個是說明符"protected一個是說明符"protected:"以下直到說明符"public:”,這里略去了其中的內(nèi)容。實際上這里有一些數(shù)據(jù)的定義,以及內(nèi)部函數(shù)的定義。但對于外部調(diào)用來說,這些內(nèi)容都是不可見的,以防止使用者無意中對這部分內(nèi)容進(jìn)行了錯誤的操作。這就是類的屏蔽。而在說明符"public”以下列出的函數(shù)均是對外開放的服務(wù)函數(shù),從外部可以調(diào)用它們獲得所需的支持。在這些函數(shù)中GetNode1(邊的編號)、GetNode2(邊的編號)、GetNumOutLink(節(jié)點(diǎn)編號)、GetOutLink(節(jié)點(diǎn)編號,邊的相對序號)、GetNumInLink(節(jié)點(diǎn)編號)、GetInLink(節(jié)點(diǎn)編號,邊的相對序號)等是真正提供我們非常需要的服務(wù)功能的函數(shù)。它們分別可以通過給定邊的編號查詢該邊的起(終)點(diǎn)編號,根據(jù)給定節(jié)點(diǎn)的編號查詢從該節(jié)點(diǎn)出去或進(jìn)來的邊的編號,以及查詢給定節(jié)點(diǎn)出去或進(jìn)來的第i條邊的編號。這類函數(shù)還有Reverse(void)、GetNumLink(void)、GetNumNode(void)、GetLinkStat(intn1,intn2)、GetLink(intn1,intn2,intno)等。而SetNetwork(intn1,intn2)起的作用是告訴類網(wǎng)絡(luò)中的某一條邊的起點(diǎn)和終點(diǎn),換句話說是將外部的數(shù)據(jù)輸入到NetowrkManager中間去。由于這種處理方法,這個類與具體數(shù)據(jù)形式脫鉤了,從而增強(qiáng)了其通用性。調(diào)用者可以根據(jù)具體情況從數(shù)據(jù)文件或數(shù)據(jù)庫中獲取網(wǎng)絡(luò)數(shù)據(jù),而后通過調(diào)用SetNetwork一條邊一條邊地把數(shù)據(jù)送進(jìn)網(wǎng)絡(luò)管理類中。這類函數(shù)還有SetNetworkType(inttype)、SetMaxLink(intn)、SetMaxNode(intn)等。類族結(jié)構(gòu)如圖2-1所示,從NetworkManager逐步派生出整個類族。CTPSNetworkForWin與CTPSNetworkForDOS在內(nèi)存申請?zhí)幚矸矫嬗兴鶇^(qū)別,分別為Windows和DOS環(huán)境下的程序開發(fā)提供服務(wù),與NetworkManager相比,對各邊增加了長度和等級的特征值。CTPSNetworkCost新增加了有關(guān)各邊的費(fèi)用函數(shù)處理功能,以及能夠?qū)Ω鬟呥M(jìn)行流量、運(yùn)行
車速等數(shù)據(jù)存取。Network-Cost與其父類相比,增加了一些有關(guān)網(wǎng)絡(luò)總體狀態(tài)合計處理的功能,例如計算整個網(wǎng)絡(luò)的車公里合計值等。NetworkNode則是在節(jié)點(diǎn)上增加了數(shù)據(jù)存儲功能,因而能夠記錄節(jié)點(diǎn)的坐標(biāo)值等數(shù)據(jù)。NetworkFlowNode也是增加了節(jié)點(diǎn)數(shù)據(jù)的存儲處理功能,但由于其父類的不同,因而能夠處理許多有關(guān)流量的信息。圖2-1網(wǎng)絡(luò)類派生關(guān)系圖我們進(jìn)一步以CTPSNetworkForWin為例,說明派生類與父類之間的關(guān)系。在以下列出的定義說明中,我們可以看到在派生類中僅增加了一些新函數(shù)。對于父類已有的對外服務(wù)函數(shù),派生類仍然可以繼續(xù)使用。也就是說,派生類是在父類的基礎(chǔ)上,增加開發(fā)一些新功能而建立的。這就使得我們能夠根據(jù)需要逐步通過派生的方法建立即有相同功能,又有所區(qū)別的類族,以滿足不同的要求?!厩鍐?—6】CTPSNetworkForWin的說明classCTPSNetworkForWin:publicNetworkManag{//本網(wǎng)絡(luò)類是針對Windows環(huán)境所開發(fā)的派生類,與NetworkManag相比,網(wǎng)絡(luò)邊增加了長度及等級特征。public:構(gòu)造及析構(gòu)函數(shù)...intSetLinkLength(intn1,intn2,intno,doublex); /置指定節(jié)點(diǎn)設(shè)間第no條邊的長度//根據(jù)邊的內(nèi)存序號設(shè)intSetLinkLength(intn,doublex);//根據(jù)邊的內(nèi)存序號設(shè)置長度intSetLinkClass(intn1,intn2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度私營企業(yè)商務(wù)用車租賃及維護(hù)服務(wù)合同3篇
- 二零二五年度養(yǎng)豬場養(yǎng)殖廢棄物資源化利用項目合作合同3篇
- 二零二五年度養(yǎng)牛產(chǎn)業(yè)鏈可持續(xù)發(fā)展合作協(xié)議3篇
- 2025年度智慧城市基礎(chǔ)設(shè)施建設(shè)投資入股協(xié)議3篇
- 二零二五年度農(nóng)村土地租賃與農(nóng)業(yè)廢棄物資源化利用及循環(huán)經(jīng)濟(jì)合作協(xié)議2篇
- 二零二五年度農(nóng)村土地承包經(jīng)營權(quán)流轉(zhuǎn)與農(nóng)業(yè)廢棄物資源化利用及循環(huán)農(nóng)業(yè)合作合同
- 2025年度農(nóng)村房屋買賣合同及附屬土地使用權(quán)轉(zhuǎn)讓協(xié)議2篇
- 2025年度新材料研發(fā)合伙人股權(quán)分配與市場推廣合同3篇
- 二零二五年度農(nóng)村墓地墓園祭祀活動策劃與執(zhí)行協(xié)議
- 2025年度養(yǎng)殖土地租賃及農(nóng)業(yè)廢棄物資源化利用協(xié)議3篇
- 偉大的《紅樓夢》智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)
- 設(shè)備維護(hù)檢查修理三級保養(yǎng)記錄表
- 施工安全風(fēng)險分析及應(yīng)對措施表
- 《針灸推拿》題庫
- 2023年上海市初中物理競賽復(fù)賽試題銀光杯
- GB/T 20475.2-2006煤中有害元素含量分級第2部分:氯
- GB 18218-2000重大危險源辨識
- 神通數(shù)據(jù)庫管理系統(tǒng)v7.0企業(yè)版-2實施方案
- 油田視頻監(jiān)控綜合應(yīng)用平臺解決方案
- 福建省泉州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- 酒精性腦病的護(hù)理查房實用版課件
評論
0/150
提交評論