




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2.4面向對象的程序開發(fā)方法2.4.1面向對象的基本概念思維方式決定解決問題的方式,傳統(tǒng)軟件開發(fā)采用自頂向下的思想指導程序設計,即將目標劃分為若干子目標,子目標再進一步劃分下去,直到目標能被編程實現為止。面向對象技術給軟件設計領域帶來極大的變化,它利用軟件對象來進行程序開發(fā),所謂對象是包含數據和對數據操作的代碼實體,或者說是在傳統(tǒng)的數據結構中加入一些被稱為成員函數的過程,因而賦予對象以動作。而在程序設計中,對象具有與現實世界的某種對應關系,我們正是利用這種關系對問題進行分解。從程序語言角度來看,在一個對象中代碼和(或)數據可以是這個對象私有的,不能被對象外的部分直接訪問。因而對象提供了一種高級保護以防止程序被無關部分錯誤修改或錯誤地使用了對象的私有部分。當從對象外部試圖直接對受保護的內部數據進行修改時,將被程序拒絕,只有通過對象所提供的對外服務函數材能夠對其內部數據進行必要的加工,從而保證了數據加工的合法性。從這一意義上講,把這種代碼和數據的聯(lián)系稱為〃封裝〃。換句話說,封裝是將對象封閉保護起來,是將內部細節(jié)隱蔽起來的能力。在強調軟件組件的重用方面,面向對象的技術與標準的工業(yè)設計規(guī)律有更多相似之處。在面向對象語言中,類是創(chuàng)建對象的關鍵,事實上類描述了一族對象的公共特征和操作,而對象則是具體實現的類。例如小汽車是一個基本概念,它具有顏色、幾何尺寸、動力特性的特征。那我們可以定義一個稱為"car"的類,具有顏色、幾何尺寸、動力特征等參數,以及描述汽車在外界條件下運動狀態(tài)的成員函數。一輛具體的小汽車則是一個對象,在這個對象中有關參數均有具體數值,并可以通過輸入說明變量(外界條件參數)獲取該車具體運動狀態(tài)。C++和Smalltalk是廣泛被接受的面向對象的程序設計語言,在歐洲Eiffel擁有一批追隨者,而Ada9X通過附加多態(tài)性和繼承性,將把Ada語言全面引入面向對象的世界。面向對象技術給軟件發(fā)展帶來如下益處:*可重用性。從一開始對象的產生就是為了重復利用,完成的對象將在今后的程序開發(fā)中被部分或全部地重復利用。*可靠性。由于面向對象的應用程序包含了通過測試的標準部分,因此更加可靠。由于大量代碼來源于成熟可靠的類庫,因而新開發(fā)程序的新增代碼明顯減少,這是程序可靠性提高的一個重要原因。*連續(xù)性。具有面向對象特點的C++與C語言有很大的兼容性,C程序員可以比較容易地過渡到C++語言開發(fā)工作。面向對象語言具有如下基本特征:*訪問控制。對象必須能夠對其內部的某些元素進行保護,是它們只能被內部使用,而不受外部干擾。反過來,對象又必須同其它外部元素進行聯(lián)系,以便對對象進行操作。在C++中,類有私有的(private)、保護的(protected)和公有的(public)三種訪問機制。*繼承性。通過對已有對象進行增加或部分修改的方法建立新的對象,對已有對象可以增加數據和過程,也可以對其中某些過程進行從新定義。最初的類被稱為基類,從基類擴展出來的類稱為派生類。從已有類派生出新類是為了獲得更強的針對性。*多態(tài)性。正象生態(tài)系統(tǒng)一樣,繼承構成了類族。通常這些類族中的類具有同名的成員函數,例如OD分布類族,具有一個通用基類,兩個派生類:增長系數OD分布類和重力模型OD分布類,這幾個類都有同名的Exec成員函數。多態(tài)性意味著存在多種形式,能使人們在程序中激活任何屬于OD分布類族的類的Exec成員函數,甚至在編譯可以不必具體知道對象是屬于增長系數OD類還是重力模型OD分布類。面向對象體系結構技術有助于創(chuàng)建行業(yè)性軟件開發(fā)機構。例如交通規(guī)劃盡管具有差別,但各城市所需要的軟件基本上是相同的,這就為軟件開發(fā)機構提供了一種制作面向交通規(guī)劃的軟件框架(注意這里講的是軟件框架而不是通用性軟件)的機會。這種框架一旦開發(fā)成功,就可以多次反復利用。面向對象技術特別適合于將某一領域內的軟件資源整理成體系化,因為它有很好的表現能力,能夠容易抓住特定功能領域的本質。2.4.2面向對象的程序設計為有效使用面向對象的程序方法,首先需要解決程序的結構設計問題。在程序設計過程中最重要的抽象,也就是說,從現實世界中抽象出合理的對象結構。在面向對象思想中,抽象決定了對象的對外形象、內部結構以及處理對象的外部接口,其關鍵是處理對象的可見外部特征。封裝是與抽象緊密聯(lián)系的概念,它需要兩個基本前提:首先,對象必須能夠表現一個完備的概念,例如可以將一條道路的縱斷面設計作為一個對象,它與外部的聯(lián)系限于縱斷面地面線、縱斷面設計參數。當這些外部條件給定之后,對象可以獨立計算任意樁號的設計高程、地面高程、設計高差、填挖面積等,也可以根據給定的比例和初始坐標計算設計線和地面線的圖形坐標。第二,對象的私有性,例如上述示例中,對象的內部數據結構在外部是不可見的,其他程序員并不需要了解這種數據結構就可以使用對象的功能。對于對象的接口設計是十分重要的,它必須給出必要的訪問渠道,同時必須盡可能地將內部細節(jié)隱藏起來。我們可以將接口看作是在屏蔽墻上打開的一些出入通道,通道過多了就失去了屏蔽墻存在的意義,通道過少又由于限制過強而行動不便。一般情況下,這種通道表現為一組接口函數,事實上我們也可以將一些變量作為對外開放的,但這并不是一種很好的方法。面向對象設計方法的另一個重要貢獻,是關于繼承與多態(tài)性的處理。所謂繼承是指從現存對象出發(fā)建立一個新的對象類型,使它具有原對象的特點和功能,這稱為〃派生"。同時,新的對象類型又具有某種新特點和新功能。這樣,我們可以采用對象派生的方法建立一個有層次的對外部世界的描述。例如,在第三章中我們可以看到一組有關三維曲面分塊的類族,從四條三維空間直線定義的簡單曲面,到四條復雜三維空間曲線定義的曲面,呈現復雜的分層次的多態(tài)性。但他們都有共同的接口函數形式:例如根據給定平面點計算高程等。2.4.3采用面向對象方法進行程序開發(fā)的示例為了進一步幫助讀者了解面向對象的程序開發(fā)方法,我們在此介紹一個應用示例,我們的目的是幫助理解這種方法,而不是具體教會讀者立刻能夠編程,因此這里使用的是不那么嚴密但易于理解的表述。為支持交通規(guī)劃決策支持系統(tǒng)、道路項目可行性研究決策支持系統(tǒng)開發(fā),建立了一個基礎類庫,庫中包含了大量的專用工具。這個類庫中有一個用于管理道路或交通網絡數據的類族,它為交通分配、數據檢查、圖形輸出等多個子系統(tǒng)提供支持。作為整個類族的基礎,建立了一個拓撲網絡,它只描述節(jié)點之間的連接特性,各邊均沒有長度、等級等方面的特性。對于這個拓撲網,建立了整個類族的基礎-基類NetworkManager,其具體定義如下所示:【清單2—5】NetworkManager的說明classNetworkManager{本類管理拓撲特征的網絡,在本網絡中各邊沒有長度、等級一類的參數。這構成了所有網絡類的基類。protected:...public:構造函數及析構函數...
存序號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);獲取設置狀態(tài)標志進行系統(tǒng)內存分配設置網絡類型設置最大邊數設置節(jié)點的最大編號X在網絡中增設一條邊網絡數據設置完成后的處理將網絡中的所有有向邊反向獲取網絡中的邊數獲取網絡中的節(jié)點數獲取兩指定節(jié)點間有幾條連接邊獲取指定節(jié)點間第no條邊的內存序GetNode1(intl);GetNode2(intl);GetNumOutLink(intn);GetOutLink(intn,intno);獲取內存序號為l的邊的起點編號獲取內存序號為l的邊的終點編號獲取以節(jié)點n為起點的邊的數量獲取以節(jié)點n為起點的第no條邊的內intintGetNumInLink(intn);GetInLink(intn,intno);獲取以節(jié)點n為終點的第no條邊的內存序號};一個是說明符"protected一個是說明符"protected:"以下直到說明符"public:”,這里略去了其中的內容。實際上這里有一些數據的定義,以及內部函數的定義。但對于外部調用來說,這些內容都是不可見的,以防止使用者無意中對這部分內容進行了錯誤的操作。這就是類的屏蔽。而在說明符"public”以下列出的函數均是對外開放的服務函數,從外部可以調用它們獲得所需的支持。在這些函數中GetNode1(邊的編號)、GetNode2(邊的編號)、GetNumOutLink(節(jié)點編號)、GetOutLink(節(jié)點編號,邊的相對序號)、GetNumInLink(節(jié)點編號)、GetInLink(節(jié)點編號,邊的相對序號)等是真正提供我們非常需要的服務功能的函數。它們分別可以通過給定邊的編號查詢該邊的起(終)點編號,根據給定節(jié)點的編號查詢從該節(jié)點出去或進來的邊的編號,以及查詢給定節(jié)點出去或進來的第i條邊的編號。這類函數還有Reverse(void)、GetNumLink(void)、GetNumNode(void)、GetLinkStat(intn1,intn2)、GetLink(intn1,intn2,intno)等。而SetNetwork(intn1,intn2)起的作用是告訴類網絡中的某一條邊的起點和終點,換句話說是將外部的數據輸入到NetowrkManager中間去。由于這種處理方法,這個類與具體數據形式脫鉤了,從而增強了其通用性。調用者可以根據具體情況從數據文件或數據庫中獲取網絡數據,而后通過調用SetNetwork一條邊一條邊地把數據送進網絡管理類中。這類函數還有SetNetworkType(inttype)、SetMaxLink(intn)、SetMaxNode(intn)等。類族結構如圖2-1所示,從NetworkManager逐步派生出整個類族。CTPSNetworkForWin與CTPSNetworkForDOS在內存申請?zhí)幚矸矫嬗兴鶇^(qū)別,分別為Windows和DOS環(huán)境下的程序開發(fā)提供服務,與NetworkManager相比,對各邊增加了長度和等級的特征值。CTPSNetworkCost新增加了有關各邊的費用函數處理功能,以及能夠對各邊進行流量、運行
車速等數據存取。Network-Cost與其父類相比,增加了一些有關網絡總體狀態(tài)合計處理的功能,例如計算整個網絡的車公里合計值等。NetworkNode則是在節(jié)點上增加了數據存儲功能,因而能夠記錄節(jié)點的坐標值等數據。NetworkFlowNode也是增加了節(jié)點數據的存儲處理功能,但由于其父類的不同,因而能夠處理許多有關流量的信息。圖2-1網絡類派生關系圖我們進一步以CTPSNetworkForWin為例,說明派生類與父類之間的關系。在以下列出的定義說明中,我們可以看到在派生類中僅增加了一些新函數。對于父類已有的對外服務函數,派生類仍然可以繼續(xù)使用。也就是說,派生類是在父類的基礎上,增加開發(fā)一些新功能而建立的。這就使得我們能夠根據需要逐步通過派生的方法建立即有相同功能,又有所區(qū)別的類族,以滿足不同的要求?!厩鍐?—6】CTPSNetworkForWin的說明classCTPSNetworkForWin:publicNetworkManag{//本網絡類是針對Windows環(huán)境所開發(fā)的派生類,與NetworkManag相比,網絡邊增加了長度及等級特征。public:構造及析構函數...intSetLinkLength(intn1,intn2,intno,doublex); /置指定節(jié)點設間第no條邊的長度//根據邊的內存序號設intSetLinkLength(intn,doublex);//根據邊的內存序號設置長度intSetLinkClass(intn1,intn2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 主承辦單位安全協(xié)議書
- 倉儲一體化服務協(xié)議書
- 高空安全協(xié)議協(xié)議書
- 交房屋定金有效協(xié)議書
- 飯店樓上住戶協(xié)議書
- 車輛事故出院協(xié)議書
- 項目整體回購協(xié)議書
- 車間安全管理總結報告
- 食品過期調解協(xié)議書
- 送貨司機責任協(xié)議書
- MOOC 大學公共體育-華南理工大學 中國大學慕課答案
- GB 34914-2021凈水機水效限定值及水效等級
- GB 15831-2006鋼管腳手架扣件
- 浙教版八年級科學第四章電學測試
- 機電顧問服務建議書123
- 廣西壯族自治區(qū)工程造價綜合定額答疑匯編2022年11月更新
- 科學發(fā)展觀基本解讀(完整版)課件
- 基坑工程施工驗收記錄表
- 夜間施工專項方案
- 微生物實驗室病原微生物評估報告
- 護理風險管理與護理安全
評論
0/150
提交評論