基于對象的編程_第1頁
基于對象的編程_第2頁
基于對象的編程_第3頁
基于對象的編程_第4頁
基于對象的編程_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、19:46:531C+程序設(shè)計教程(第二版)第十一章 基于對象編程 Chapter 11 Object-Based Programming清華大學(xué)出版社 錢 能19:46:532第十一章內(nèi)容1.抽象編程抽象編程 ( Abstract Programming )2.編程質(zhì)量編程質(zhì)量 ( Programming Quality ) 3.分析分析Joses問題問題 ( Analysis the Joses Problem )4.基于過程的實(shí)現(xiàn)基于過程的實(shí)現(xiàn) ( Procedure-Based Solving )5.基于對象的實(shí)現(xiàn)基于對象的實(shí)現(xiàn) ( Object-Based Solving )6.程序

2、維護(hù)程序維護(hù) ( Program Maintenance )7.程序擴(kuò)展程序擴(kuò)展 ( Program Extension )19:46:5431. 抽象編程抽象編程 ( Abstract Programming )抽象分行為抽象和數(shù)據(jù)抽象兩種行為抽象:通俗地說便是將一個行為序列歸并(抽象)為一個行為的過程.例如:將取碗筷、盛飯、盛菜,扒一口飯、夾一筷菜、再扒一口飯、再夾一筷菜的若干重復(fù),然后放下碗筷的過程歸并為吃飯.數(shù)據(jù)抽象:通俗地說,就是將事物歸類,或者說,將事物看成是一定型號、規(guī)格的數(shù)據(jù),然后將性質(zhì)接近的數(shù)據(jù)歸納(抽象)為一類.例如:將圓、三角形、長方形歸為形狀類.19:46:544數(shù)據(jù)結(jié)

3、構(gòu)數(shù)據(jù)結(jié)構(gòu) 一系列性質(zhì)相同的數(shù)據(jù)一系列性質(zhì)相同的數(shù)據(jù), 組織成一定的邏輯結(jié)組織成一定的邏輯結(jié)構(gòu)構(gòu), 并帶有自身的一系列操作并帶有自身的一系列操作例如:整型向量例如:整型向量 不同整型值是一系列性質(zhì)相同的數(shù)據(jù);其數(shù)不同整型值是一系列性質(zhì)相同的數(shù)據(jù);其數(shù)據(jù)集合存放在向量中,便是組織成線性存儲據(jù)集合存放在向量中,便是組織成線性存儲結(jié)構(gòu);向量自身有創(chuàng)建、復(fù)制、擴(kuò)建、增刪、結(jié)構(gòu);向量自身有創(chuàng)建、復(fù)制、擴(kuò)建、增刪、修改等操作,外加排序、查找等算法可以調(diào)修改等操作,外加排序、查找等算法可以調(diào)用用.所以,整型向量在語言中是一種具體的所以,整型向量在語言中是一種具體的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)。19:46:545抽象編

4、程抽象編程 通過抽象的方法來減少編程工作量或有效地減輕通過抽象的方法來減少編程工作量或有效地減輕編程難度稱為編程難度稱為抽象編程抽象編程將問題通過功能分解,各個擊破的編程方法將問題通過功能分解,各個擊破的編程方法(過過程化編程程化編程)是一種是一種以行為抽象為主的抽象編程以行為抽象為主的抽象編程將問題通過實(shí)體分析,分層分類地實(shí)現(xiàn)抽象數(shù)據(jù)將問題通過實(shí)體分析,分層分類地實(shí)現(xiàn)抽象數(shù)據(jù)類型,從而進(jìn)行簡單應(yīng)用編程類型,從而進(jìn)行簡單應(yīng)用編程(基于對象編程基于對象編程)是一種是一種以數(shù)據(jù)抽象為主的抽象編程以數(shù)據(jù)抽象為主的抽象編程,這種抽象,這種抽象編程,通過數(shù)據(jù)類型復(fù)用,方便編程,方便維編程,通過數(shù)據(jù)類型復(fù)

5、用,方便編程,方便維護(hù)和擴(kuò)展,其效果比過程化編程更好護(hù)和擴(kuò)展,其效果比過程化編程更好19:46:546編程編程 語言中沒有許多具體的數(shù)據(jù)類型,要解決實(shí)際問語言中沒有許多具體的數(shù)據(jù)類型,要解決實(shí)際問題,很大部分工作是要建立數(shù)據(jù)模式與實(shí)際問題,很大部分工作是要建立數(shù)據(jù)模式與實(shí)際問題的對應(yīng),也就是建立抽象數(shù)據(jù)類型的過程題的對應(yīng),也就是建立抽象數(shù)據(jù)類型的過程對象化編程就是基于分層分類的抽象數(shù)據(jù)類型之對象化編程就是基于分層分類的抽象數(shù)據(jù)類型之具體編程,它能更好地實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和算法,具體編程,它能更好地實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和算法,便是將便是將N.Wirth的程序公式:的程序公式: 程序程序=算法算法+數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)

6、結(jié)構(gòu)具體化為:具體化為: 程序程序=算法算法+抽象數(shù)據(jù)類型抽象數(shù)據(jù)類型19:46:5472. 編程質(zhì)量編程質(zhì)量 ( Programming Quality ) 可讀性:通過使用更好的編程方法可以從本質(zhì)上改進(jìn)可讀性通過使用定義良好的算法和語句控制結(jié)構(gòu),可以局部改進(jìn)算法的可理解性通過學(xué)習(xí)和使用優(yōu)秀程序員的編碼習(xí)慣,采用一貫的編碼風(fēng)格,可以增強(qiáng)可讀性注意:高級程序員與初學(xué)者對可讀性的把握分寸是不同的 19:46:548易編程性:只是對采用好的編程方法或更高級語言而言,抽象程度越大,越易編程對象化編程在抽象數(shù)據(jù)類型的創(chuàng)建上做了大量的工作,因而贏得了應(yīng)用程序編寫的方便與快捷19:46:549安全性:編程

7、在算法設(shè)計上是挖空心思的勞動過程,而在運(yùn)用語言對之描述上應(yīng)該瀟灑自在:容易表達(dá),不容易出錯,運(yùn)行上更安全。好的編程方法能夠幫助程序員實(shí)現(xiàn)瀟灑編程抽象數(shù)據(jù)類型中可以將大量安全代碼嵌入其中,從而使應(yīng)用編程瀟灑自在實(shí)現(xiàn)抽象數(shù)據(jù)類型的過程本身也是使用其他抽象數(shù)據(jù)類型的應(yīng)用編程,同樣也充滿著瀟灑與自在19:46:5410可維護(hù)性:指局部修改不影響系統(tǒng)全局的總體性能,而系統(tǒng)產(chǎn)生的問題通??梢酝ㄟ^局部維護(hù)(修改或更換部件)來解決。模塊化編程使程序可拆裝,可局部修改,而不影響整體性能與工作,因而可維護(hù)性強(qiáng),過程化編程是將過程模塊化,具有一定的可維護(hù)性;對象化編程是將數(shù)據(jù)類型也模塊化,從而導(dǎo)致更方便的維護(hù)性能1

8、9:46:5411可擴(kuò)充性:指系統(tǒng)擴(kuò)展時,只增加擴(kuò)展代碼,而對原系統(tǒng)的正常運(yùn)作只作很少的修改甚至不修改功能擴(kuò)展的影響:過程化編程,會涉及多處擴(kuò)展代碼與原系統(tǒng)不和諧所帶來的修改對象化編程,如果是抽象數(shù)據(jù)類型的功能擴(kuò)展,則不會影響原系統(tǒng)的正常運(yùn)行,而只是支持應(yīng)用程序中增加的一些擴(kuò)展代碼而已;如果是應(yīng)用程序功能擴(kuò)展,那是使用抽象數(shù)據(jù)類型的抽象代碼擴(kuò)展,其修改量比之低級代碼要少19:46:5412效率:前提:代碼量大不等于運(yùn)行量大效率除了看速度,還要看損耗,既要考慮編程方便,又要考慮運(yùn)行性能(時空效率)1過程化程序代碼量少,但對象化程序的代碼量相對較多,但不占系統(tǒng)空間2過程化程序編寫安全代碼代價大,因

9、而不系統(tǒng),對象化程序可以方便地在抽象數(shù)據(jù)類型中嵌入安全代碼,從而導(dǎo)致了代碼量大的問題,如果讓過程化程序達(dá)到其安全指標(biāo),為此增加的代碼量比對象化程序更多19:46:54133. 分析分析Joses問題問題 ( Analysis the Joses Problem )n問題描述:un個小孩圍成一圈做游戲,游戲?qū)Q出一個勝利者。假定一個數(shù)m,從第s個小孩起,順時針計數(shù),每數(shù)到第m個小孩時,該小孩離開。接著又從下一個小孩開始數(shù)數(shù),重復(fù)進(jìn)行上述過程,直到最后剩下一個小孩,便是勝利者。對于一定的n,m和s,勝利者是誰?19:46:5414過程化分析n按實(shí)現(xiàn)過程分析,功能劃分,從而得到幾個算法步驟:u獲得小

10、孩數(shù)n,開始位置s,間隔數(shù)mu創(chuàng)建環(huán)鏈表u循環(huán)數(shù)數(shù),排除n-1個小孩u輸出剩下的小孩編號(勝利者)u善后工作(清除環(huán)鏈表)19:46:5415基于對象的分析n在對象化編程中,對于簡單問題,可以執(zhí)行下面的步驟:u找出問題中涉及的類u描述類之間的關(guān)系u用類來界定抽象層次,從而組織程序結(jié)構(gòu)19:46:5416如何找類?n有形的、可視的或描述的東西;n角色;n事件n解決Joses問題的名詞表:uJoses問題u小孩u鏈表u開始位置u小孩數(shù)u計數(shù)間隔u小孩離隊u輸出勝利者19:46:5417類的卡片描述BoyRing類constructpBegincountBypivotdisengage pCurre

11、ntgetNumprintAlladdJoses類constructboyNumgetWinner IntervalstartPos19:46:5418基于過程的解決方案n對每個算法步驟,分而治之:例如,環(huán)鏈表操作的復(fù)雜性,在循環(huán)數(shù)數(shù)中體現(xiàn)初始化和善后處理都必須由程序員一人承擔(dān),工作量大,容易產(chǎn)生錯誤19:46:5419基于過程的解決方案n獲得小孩數(shù)n,開始位置s,間隔數(shù)mu通過鍵盤輸入小孩數(shù)n,開始位置s,間隔數(shù)mu對這些數(shù)據(jù)進(jìn)行校驗(yàn)n創(chuàng)建環(huán)鏈表u申請n個環(huán)鏈空間ufor (n個鏈中元素)u 掛接下一個元素;u 賦給小孩編號uendforu 轉(zhuǎn)到開始位置su返回環(huán)鏈表19:46:5420基于

12、過程的解決方案(續(xù))n循環(huán)計數(shù),排除n-1個小孩uwhile(小孩數(shù)多于1個)u 數(shù)m個小孩u 當(dāng)前小孩從鏈中刪除uendwhilen數(shù)m個小孩ufor (m間隔)u 挪到下一個小孩處uendfor19:46:5421基于對象的解決方案nJoses類的設(shè)計u內(nèi)部數(shù)據(jù)成員:小孩數(shù),開始位置,計數(shù)間隔u接口:構(gòu)造函數(shù),求獲勝者n構(gòu)造函數(shù):u 數(shù)據(jù)成員賦值并校驗(yàn)n求獲勝者u創(chuàng)建環(huán)鏈表u轉(zhuǎn)到鏈表開始位置uwhile (小孩數(shù)1)u 數(shù)m個小孩u 小孩輸出u 小孩離隊uendwhileu輸出獲勝者19:46:5422基于對象的解決方案nBoyRing類的設(shè)計u內(nèi)部數(shù)據(jù)成員:小孩結(jié)構(gòu)指針,當(dāng)前小孩指針,小

13、孩哨兵u接口:構(gòu)造函數(shù),析構(gòu)函數(shù),數(shù)m個小孩,小孩離隊,返回當(dāng)前小孩編號,輸出所有小孩19:46:5423基于對象的解決方案BoyRing類設(shè)計n構(gòu)造函數(shù)u按小孩數(shù)申請空間u初始化為環(huán)結(jié)構(gòu),小孩編號u指針賦初值n析構(gòu)函數(shù):釋放空間n數(shù)m個小孩ufor (m 間隔)u 挪到下一個小孩處uendforn小孩離隊u 哨兵指向的小孩指向當(dāng)前小孩的下一個u 當(dāng)前小孩指針等同哨兵n返回當(dāng)前小孩編號:n輸出所有小孩:19:46:54246. 程序維護(hù)程序維護(hù) ( Program Maintenance )維護(hù)要求:數(shù)個數(shù)m,m若改為根據(jù)當(dāng)前小孩的序號與m的和來確定個數(shù)m,則在進(jìn)行數(shù)個數(shù)前,先要進(jìn)行表達(dá)式計算,這一切,都是在Josephus類中暗中完成的,所以只要修改Jo

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論